mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-17 13:10:12 +08:00
Special handling of AIX xcoff text alignment fix.
This commit is contained in:
parent
c3d3ce5b89
commit
47ede03a41
@ -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*.
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user