Special handling of AIX xcoff text alignment fix.

This commit is contained in:
Tom Rix 2001-12-20 21:29:21 +00:00
parent c3d3ce5b89
commit 47ede03a41
2 changed files with 35 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2001-12-20 Tom Rix <trix@redhat.com>
* coffcode.h (coff_compute_section_file_positions): Add special AIX
loader alignment of text section.
2001-12-20 Jason Thorpe <thorpej@wasabisystems.com>
* config.bfd (mips-dec-netbsd*): Delete alias for mips*el-*-netbsd*.

View File

@ -3054,7 +3054,36 @@ coff_compute_section_file_positions (abfd)
padding the previous section up if necessary */
old_sofar = sofar;
sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
#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 an 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. */
if (!strcmp (current->name, _TEXT))
{
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
if (previous != (asection *) NULL)
{
previous->_raw_size += sofar - old_sofar;