summaryrefslogtreecommitdiff
path: root/ld/emultempl/armelf.em
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2010-04-21 16:32:25 +0000
committerAndrew Haley <aph@redhat.com>2010-04-21 16:32:25 +0000
commit9a37e9a2d9f7743b3b9fbc97489b2b90f9ce3cc2 (patch)
tree7e763e0580da3f52225eb7e9dc80dfd94586f665 /ld/emultempl/armelf.em
parentf9dbf6b97afd18543920af1f71df74dcf71e931b (diff)
downloadbinutils-redhat-9a37e9a2d9f7743b3b9fbc97489b2b90f9ce3cc2.tar.gz
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 'ld/emultempl/armelf.em')
-rw-r--r--ld/emultempl/armelf.em12
1 files changed, 11 insertions, 1 deletions
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em
index 4783bf89d0..6c4c78d504 100644
--- a/ld/emultempl/armelf.em
+++ b/ld/emultempl/armelf.em
@@ -41,6 +41,7 @@ static int fix_cortex_a8 = -1;
static int no_enum_size_warning = 0;
static int no_wchar_size_warning = 0;
static int pic_veneer = 0;
+static int merge_exidx_entries = -1;
static void
gld${EMULATION_NAME}_before_parse (void)
@@ -314,7 +315,8 @@ gld${EMULATION_NAME}_after_allocation (void)
qsort (sec_list, sec_count, sizeof (asection *), &compare_output_sec_vma);
- if (elf32_arm_fix_exidx_coverage (sec_list, sec_count, &link_info))
+ if (elf32_arm_fix_exidx_coverage (sec_list, sec_count, &link_info,
+ merge_exidx_entries))
need_laying_out = 1;
free (sec_list);
@@ -526,6 +528,7 @@ PARSE_AND_LIST_PROLOGUE='
#define OPTION_NO_WCHAR_SIZE_WARNING 313
#define OPTION_FIX_CORTEX_A8 314
#define OPTION_NO_FIX_CORTEX_A8 315
+#define OPTION_NO_MERGE_EXIDX_ENTRIES 316
'
PARSE_AND_LIST_SHORTOPTS=p
@@ -547,6 +550,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-wchar-size-warning", no_argument, NULL, OPTION_NO_WCHAR_SIZE_WARNING},
{ "fix-cortex-a8", no_argument, NULL, OPTION_FIX_CORTEX_A8 },
{ "no-fix-cortex-a8", no_argument, NULL, OPTION_NO_FIX_CORTEX_A8 },
+ { "no-merge-exidx-entries", no_argument, NULL, OPTION_NO_MERGE_EXIDX_ENTRIES },
'
PARSE_AND_LIST_OPTIONS='
@@ -574,6 +578,8 @@ PARSE_AND_LIST_OPTIONS='
the linker should choose suitable defaults.\n"
));
fprintf (file, _(" --[no-]fix-cortex-a8 Disable/enable Cortex-A8 Thumb-2 branch erratum fix\n"));
+ fprintf (file, _(" --no-merge-exidx-entries Disable merging exidx entries\n"));
+
'
PARSE_AND_LIST_ARGS_CASES='
@@ -653,6 +659,10 @@ PARSE_AND_LIST_ARGS_CASES='
case OPTION_NO_FIX_CORTEX_A8:
fix_cortex_a8 = 0;
break;
+
+ case OPTION_NO_MERGE_EXIDX_ENTRIES:
+ merge_exidx_entries = 0;
+
'
# We have our own before_allocation etc. functions, but they call