From: Nathan Sidwell Date: Thu, 26 Aug 2010 10:32:26 +0000 (+0000) Subject: * elf32-arm.c (elf32_arm_final_link): Process stub sections X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cdb21a0a5b4c8b3a437f515879767e24bf38e6e0;p=binutils-gdb.git * elf32-arm.c (elf32_arm_final_link): Process stub sections exactly once. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a8433860885..003f0920f32 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2010-08-26 Nathan Sidwell + + * elf32-arm.c (elf32_arm_final_link): Process stub sections + exactly once. + 2010-08-25 H.J. Lu PR ld/11939 diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index f81831995a3..74fb8557639 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -9443,16 +9443,19 @@ elf32_arm_final_link (bfd *abfd, struct bfd_link_info *info) /* Process stub sections (eg BE8 encoding, ...). */ struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info); int i; - for(i=0; itop_id; i++) { - sec = htab->stub_group[i].stub_sec; - if (sec) { - osec = sec->output_section; - elf32_arm_write_section (abfd, info, sec, sec->contents); - if (! bfd_set_section_contents (abfd, osec, sec->contents, - sec->output_offset, sec->size)) - return FALSE; + for (i=0; itop_id; i++) + { + sec = htab->stub_group[i].stub_sec; + /* Only process it once, in its link_sec slot. */ + if (sec && i == htab->stub_group[i].link_sec->id) + { + osec = sec->output_section; + elf32_arm_write_section (abfd, info, sec, sec->contents); + if (! bfd_set_section_contents (abfd, osec, sec->contents, + sec->output_offset, sec->size)) + return FALSE; + } } - } /* Write out any glue sections now that we have created all the stubs. */