mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
Fix xcoff linker's ordering of pad sections
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2002-01-03 Tom Rix <trix@redhat.com>
|
||||||
|
|
||||||
|
* xcofflink.c (_bfd_xcoff_bfd_final_link): Update .pad section ordering
|
||||||
|
for recent bfd_make_section_anyway change.
|
||||||
|
|
||||||
2002-01-03 Nick Clifton <nickc@cambridge.redhat.com>
|
2002-01-03 Nick Clifton <nickc@cambridge.redhat.com>
|
||||||
|
|
||||||
* elf32-arm.h (elf32_arm_final_link_relocate): Handle
|
* elf32-arm.h (elf32_arm_final_link_relocate): Handle
|
||||||
|
@ -3656,14 +3656,15 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
|||||||
{
|
{
|
||||||
boolean saw_contents;
|
boolean saw_contents;
|
||||||
int indx;
|
int indx;
|
||||||
asection **op;
|
asection **op, **prev;
|
||||||
file_ptr sofar;
|
file_ptr sofar;
|
||||||
|
|
||||||
/* Insert .pad sections before every section which has
|
/* Insert .pad sections before every section which has
|
||||||
contents and is loaded, if it is preceded by some other
|
contents and is loaded, if it is preceded by some other
|
||||||
section which has contents and is loaded. */
|
section which has contents and is loaded. */
|
||||||
saw_contents = true;
|
saw_contents = true;
|
||||||
for (op = &abfd->sections; *op != NULL; op = &(*op)->next)
|
for (op = &abfd->sections, prev = NULL;
|
||||||
|
*op != NULL; prev = op, op = &(*op)->next)
|
||||||
{
|
{
|
||||||
if (strcmp ((*op)->name, ".pad") == 0)
|
if (strcmp ((*op)->name, ".pad") == 0)
|
||||||
saw_contents = false;
|
saw_contents = false;
|
||||||
@ -3674,15 +3675,34 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
|||||||
saw_contents = true;
|
saw_contents = true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
asection *n, *hold;
|
asection *n, *hold, **st;
|
||||||
|
|
||||||
|
/* Create a pad section and place it before the section
|
||||||
|
that needs padding. This requires unlinking and
|
||||||
|
relinking the bfd's sections list.
|
||||||
|
|
||||||
|
sections = S1
|
||||||
|
. S1.next = S2
|
||||||
|
. S2.next = S3
|
||||||
|
. S3.next = NULL
|
||||||
|
section_tail = &S3.next */
|
||||||
|
|
||||||
hold = *op;
|
hold = *op;
|
||||||
*op = NULL;
|
st = abfd->section_tail;
|
||||||
|
|
||||||
n = bfd_make_section_anyway (abfd, ".pad");
|
n = bfd_make_section_anyway (abfd, ".pad");
|
||||||
BFD_ASSERT (*op == n);
|
|
||||||
n->next = hold;
|
|
||||||
n->flags = SEC_HAS_CONTENTS;
|
n->flags = SEC_HAS_CONTENTS;
|
||||||
n->alignment_power = 0;
|
n->alignment_power = 0;
|
||||||
|
|
||||||
|
if (NULL == prev)
|
||||||
|
abfd->sections = n;
|
||||||
|
else
|
||||||
|
(*prev)->next = n;
|
||||||
|
|
||||||
|
n->next = hold;
|
||||||
|
*st = NULL;
|
||||||
|
abfd->section_tail = st;
|
||||||
|
|
||||||
saw_contents = false;
|
saw_contents = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3958,17 +3978,6 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
|||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init-fini */
|
|
||||||
if (info->init_function || info->fini_function)
|
|
||||||
{
|
|
||||||
struct xcoff_link_hash_entry *hrtinit;
|
|
||||||
|
|
||||||
hrtinit = xcoff_link_hash_lookup (xcoff_hash_table (info),
|
|
||||||
"__rtinit",
|
|
||||||
false, false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Write out all the global symbols which do not come from XCOFF
|
/* Write out all the global symbols which do not come from XCOFF
|
||||||
input files. */
|
input files. */
|
||||||
xcoff_link_hash_traverse (xcoff_hash_table (info),
|
xcoff_link_hash_traverse (xcoff_hash_table (info),
|
||||||
|
Reference in New Issue
Block a user