This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: Oddity in the linker code on AIX
- From: Ian Lance Taylor <ian at airs dot com>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: binutils at sources dot redhat dot com
- Date: 19 Apr 2005 23:35:22 -0400
- Subject: Re: Oddity in the linker code on AIX
- References: <200504192325.32716.ebotcazou@adacore.com>
Eric Botcazou <ebotcazou@adacore.com> writes:
> #ifdef ALIGN_SECTIONS_IN_FILE
> if ((abfd->flags & EXEC_P) != 0)
> {
> /* Make sure this section is aligned on the right boundary - by
> padding the previous section up if necessary. */
>
> old_sofar = sofar;
> #ifdef RS6000COFF_C
> /* AIX loader checks the text section alignment of (vma - filepos)
> So even though the filepos may be aligned wrt the o_algntext, for
> AIX executables, this check fails. This shows up when a native
> AIX executable is stripped with gnu strip because the default vma
> of native is 0x10000150 but default for gnu is 0x10000140. Gnu
> stripped gnu excutable passes this check because the filepos is
> 0x0140. This problem also show up with 64 bit shared objects. The
> data section must also be aligned. */
> if (!strcmp (current->name, _TEXT)
> || !strcmp (current->name, _DATA))
> {
> bfd_vma pad;
> bfd_vma align;
>
> sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
>
> align = 1 << current->alignment_power;
> pad = abs (current->vma - sofar) % align;
>
> if (pad)
> {
> pad = align - pad;
> sofar += pad;
> }
> }
> else
> #else
> {
> sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
> }
> #endif
It's pretty clear from looking at the original patch introducing this
code:
2001-12-20 Tom Rix <trix@redhat.com>
* coffcode.h (coff_compute_section_file_positions): Add special AIX
loader alignment of text section.
that the #else above should be a #endif, and the #endif should be
removed.
Ian