From cdb21a0a5b4c8b3a437f515879767e24bf38e6e0 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 26 Aug 2010 10:32:26 +0000 Subject: [PATCH] * elf32-arm.c (elf32_arm_final_link): Process stub sections exactly once. --- bfd/ChangeLog | 5 +++++ bfd/elf32-arm.c | 21 ++++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) 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. */ -- 2.30.2