diff options
author | Andrew Haley <aph@redhat.com> | 2010-04-21 16:32:31 +0000 |
---|---|---|
committer | Andrew Haley <aph@redhat.com> | 2010-04-21 16:32:31 +0000 |
commit | 85fdf9067facc06446531798a158b53c03c1373c (patch) | |
tree | 812878934b79e19dd3c22fd67069c92f9c2c3900 /bfd/elf32-arm.c | |
parent | a8ae7dc0fb885e983d813eec04a6a4d67e454baf (diff) | |
download | gdb-85fdf9067facc06446531798a158b53c03c1373c.zip gdb-85fdf9067facc06446531798a158b53c03c1373c.tar.gz gdb-85fdf9067facc06446531798a158b53c03c1373c.tar.bz2 |
2010-04-15 Andrew Haley <aph@redhat.com>
* emultempl/armelf.em (merge_exidx_entries): New variable.
(OPTION_NO_MERGE_EXIDX_ENTRIES): New definition.
("no-merge-exidx-entries"): New option.
* ld.texinfo (merge-exidx-entries): Document this option.
2010-04-15 Andrew Haley <aph@redhat.com>
* bfd-in.h (elf32_arm_fix_exidx_coverage): Add new flag:
merge_exidx_entries.
* bfd-in2.h: Likewise.
* elf32-arm.c (elf32_arm_fix_exidx_coverage): Likewise. Use it to
control merging of exidx entries.
2010-04-15 Andrew Haley <aph@redhat.com>
* options.h (merge_exidx_entries): New option.
* arm.cc (class Arm_exidx_fixup): Add new arg, merge_exidx_entries.
(class Arm_exidx_fixup::merge_exidx_entries_): New member.
(Output_section::fix_exidx_coverage): Add new arg, merge_exidx_entries.
(Target_arm::merge_exidx_entries): New function.
(process_exidx_entry): Don't merge if merge_exidx_entries_ is false.
(Arm_output_section::fix_exidx_coverage): Pass merge_exidx_entries
to Arm_exidx_fixup constructor.
Add new arg, merge_exidx_entries.
(Target_arm::fix_exidx_coverage): pass merge_exidx_entries to
Arm_output_section::fix_exidx_coverage.
Diffstat (limited to 'bfd/elf32-arm.c')
-rw-r--r-- | bfd/elf32-arm.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 2ebbb79..2c24bdd 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -9215,6 +9215,8 @@ insert_cantunwind_after(asection *text_sec, asection *exidx_sec) 2. Duplicate entries are merged together (EXIDX_CANTUNWIND, or unwind codes which have been inlined into the index). + If MERGE_EXIDX_ENTRIES is false, duplicate entries are not merged. + The edits are applied when the tables are written (in elf32_arm_write_section). */ @@ -9222,7 +9224,8 @@ insert_cantunwind_after(asection *text_sec, asection *exidx_sec) bfd_boolean elf32_arm_fix_exidx_coverage (asection **text_section_order, unsigned int num_text_sections, - struct bfd_link_info *info) + struct bfd_link_info *info, + bfd_boolean merge_exidx_entries) { bfd *inp; unsigned int last_second_word = 0, i; @@ -9334,7 +9337,8 @@ elf32_arm_fix_exidx_coverage (asection **text_section_order, /* Inlined unwinding data. Merge if equal to previous. */ else if ((second_word & 0x80000000) != 0) { - if (last_second_word == second_word && last_unwind_type == 1) + if (merge_exidx_entries + && last_second_word == second_word && last_unwind_type == 1) elide = 1; unwind_type = 1; last_second_word = second_word; |