mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-29 15:00:34 +00:00
Fix xcoff linker's ordering of pad sections
This commit is contained in:
parent
741247bffa
commit
04b5af89ea
@ -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>
|
||||
|
||||
* elf32-arm.h (elf32_arm_final_link_relocate): Handle
|
||||
|
@ -3656,14 +3656,15 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
||||
{
|
||||
boolean saw_contents;
|
||||
int indx;
|
||||
asection **op;
|
||||
asection **op, **prev;
|
||||
file_ptr sofar;
|
||||
|
||||
|
||||
/* Insert .pad sections before every section which has
|
||||
contents and is loaded, if it is preceded by some other
|
||||
section which has contents and is loaded. */
|
||||
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)
|
||||
saw_contents = false;
|
||||
@ -3674,20 +3675,39 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
||||
saw_contents = true;
|
||||
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;
|
||||
*op = NULL;
|
||||
st = abfd->section_tail;
|
||||
|
||||
n = bfd_make_section_anyway (abfd, ".pad");
|
||||
BFD_ASSERT (*op == n);
|
||||
n->next = hold;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Reset the section indices after inserting the new
|
||||
sections. */
|
||||
indx = 0;
|
||||
@ -3958,17 +3978,6 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
||||
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
|
||||
input files. */
|
||||
xcoff_link_hash_traverse (xcoff_hash_table (info),
|
||||
|
Loading…
Reference in New Issue
Block a user