diff options
author | Yuri Gribov <y.gribov@samsung.com> | 2014-02-27 14:35:37 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2014-02-27 14:35:37 +0000 |
commit | 1db37fe62781b677a37acbe801c1e69d8912a124 (patch) | |
tree | 48caffe8619eea72d91b80bb71ca0a6632bc5a63 /ld/emultempl | |
parent | fa96cb382c12b099675c5cc238aaa7352a3fd3d7 (diff) | |
download | gdb-1db37fe62781b677a37acbe801c1e69d8912a124.zip gdb-1db37fe62781b677a37acbe801c1e69d8912a124.tar.gz gdb-1db37fe62781b677a37acbe801c1e69d8912a124.tar.bz2 |
This patch adds support for ARM PLT entries that support a full 32-bit offset range.
Enabled via the use of a new linker command line option: --long-plt.
* bfd-in.h: Add export of bfd_elf32_arm_use_long_plt.
* bfd-in2.h: Regenerate.
* elf32-arm.c (elf32_arm_plt_entry_long): New array.
(elf32_arm_link_hash_table_create): Set plt_entry_size to 16 if
using long PLT entries.
(bfd_elf32_arm_use_long_plt): New function.
(elf32_arm_populate_plt_entry): Add support for long PLT entries.
* emultempl/armelf.em (OPTION_LONG_PLT): Define.
(PARSE_AND_LIST_LONGOPTS): Add long-plt.
(PARSE_AND_LIST_OPTIONS): Likewise.
(PARSE_AND_LIST_ARGS_CASES): Handle long-plt.
* ld.texinfo: Document --long-plt.
* ld-arm/long-plt-format.s: New test case.
* ld-arm/long-plt-format.d: Expected disassembly.
* ld-arm/arm-elf.exp: Run the new test.
Diffstat (limited to 'ld/emultempl')
-rw-r--r-- | ld/emultempl/armelf.em | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em index 85e924f..6a64793 100644 --- a/ld/emultempl/armelf.em +++ b/ld/emultempl/armelf.em @@ -1,5 +1,5 @@ # This shell script emits a C file. -*- C -*- -# Copyright 1991-2013 Free Software Foundation, Inc. +# Copyright 1991-2014 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -28,10 +28,10 @@ fragment <<EOF #include "ldctor.h" #include "elf/arm.h" -static char *thumb_entry_symbol = NULL; +static char * thumb_entry_symbol = NULL; static int byteswap_code = 0; static int target1_is_rel = 0${TARGET1_IS_REL}; -static char *target2_type = "${TARGET2_TYPE}"; +static char * target2_type = "${TARGET2_TYPE}"; static int fix_v4bx = 0; static int use_blx = 0; static bfd_arm_vfp11_fix vfp11_denorm_fix = BFD_ARM_VFP11_FIX_DEFAULT; @@ -531,6 +531,7 @@ PARSE_AND_LIST_PROLOGUE=' #define OPTION_NO_MERGE_EXIDX_ENTRIES 316 #define OPTION_FIX_ARM1176 317 #define OPTION_NO_FIX_ARM1176 318 +#define OPTION_LONG_PLT 319 ' PARSE_AND_LIST_SHORTOPTS=p @@ -555,6 +556,7 @@ PARSE_AND_LIST_LONGOPTS=' { "no-merge-exidx-entries", no_argument, NULL, OPTION_NO_MERGE_EXIDX_ENTRIES }, { "fix-arm1176", no_argument, NULL, OPTION_FIX_ARM1176 }, { "no-fix-arm1176", no_argument, NULL, OPTION_NO_FIX_ARM1176 }, + { "long-plt", no_argument, NULL, OPTION_LONG_PLT }, ' PARSE_AND_LIST_OPTIONS=' @@ -572,6 +574,8 @@ PARSE_AND_LIST_OPTIONS=' fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n" " wchar_t sizes\n")); fprintf (file, _(" --pic-veneer Always generate PIC interworking veneers\n")); + fprintf (file, _(" --long-plt Generate long .plt entries\n" + " to handle large .plt/.got displacements\n")); fprintf (file, _("\ --stub-group-size=N Maximum size of a group of input sections that\n\ can be handled by one stub section. A negative\n\ @@ -675,6 +679,10 @@ PARSE_AND_LIST_ARGS_CASES=' case OPTION_NO_FIX_ARM1176: fix_arm1176 = 0; break; + + case OPTION_LONG_PLT: + bfd_elf32_arm_use_long_plt (); + break; ' # We have our own before_allocation etc. functions, but they call |