aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl/armelf.em
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2007-03-20 20:19:07 +0000
committerPaul Brook <paul@codesourcery.com>2007-03-20 20:19:07 +0000
commit27e55c4d0b94f5d358385b9641d26b84ee611768 (patch)
treeeaacfbddbcc1ecc50c48870fa35865384a46de2c /ld/emultempl/armelf.em
parentbf21ed7807b864b6f137d093bbf0164b443b504b (diff)
downloadgdb-27e55c4d0b94f5d358385b9641d26b84ee611768.zip
gdb-27e55c4d0b94f5d358385b9641d26b84ee611768.tar.gz
gdb-27e55c4d0b94f5d358385b9641d26b84ee611768.tar.bz2
2007-03-20 Paul Brook <paul@codesourcery.com>
ld/ * emultempl/armelf.em (pic_veneer): New variable. (PARSE_AND_LIST_PROLOGUE): Add OPTION_PIC_VENEER. (PARSE_AND_LIST_ARGS_CASES): Ditto. (PARSE_AND_LIST_LONGOPTS): Add "pic-veneer". (PARSE_AND_LIST_OPTIONS): Ditto. * ld.texinfo: Document --pic-veneer. ld/testsuite/ * ld-arm/arm-elf.exp (ld-arm/arm-elf.exp): Add arm-pic-veneer. * ld-arm/arm-pic-veneer.d: New test. * ld-arm/arm-pic-veneer.s: New test. bfd/ * bfd-in.h (bfd_elf32_arm_set_target_relocs): Update prototype. * bfd-in2.h: Regenerate. * elf32-arm.c (elf32_arm_link_hash_table): Add pic_veneer. (record_arm_to_thumb_glue): Use globals->pic_veneer. (elf32_arm_create_thumb_stub): Ditto. (bfd_elf32_arm_set_target_relocs): Set globals->pic_veneer.
Diffstat (limited to 'ld/emultempl/armelf.em')
-rw-r--r--ld/emultempl/armelf.em11
1 files changed, 10 insertions, 1 deletions
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em
index f1c797b..e9f663f 100644
--- a/ld/emultempl/armelf.em
+++ b/ld/emultempl/armelf.em
@@ -37,6 +37,7 @@ static int fix_v4bx = 0;
static int use_blx = 0;
static bfd_arm_vfp11_fix vfp11_denorm_fix = BFD_ARM_VFP11_FIX_DEFAULT;
static int no_enum_size_warning = 0;
+static int pic_veneer = 0;
static void
gld${EMULATION_NAME}_before_parse (void)
@@ -241,7 +242,8 @@ arm_elf_create_output_section_statements (void)
{
bfd_elf32_arm_set_target_relocs (output_bfd, &link_info, target1_is_rel,
target2_type, fix_v4bx, use_blx,
- vfp11_denorm_fix, no_enum_size_warning);
+ vfp11_denorm_fix, no_enum_size_warning,
+ pic_veneer);
}
EOF
@@ -259,6 +261,7 @@ PARSE_AND_LIST_PROLOGUE='
#define OPTION_USE_BLX 307
#define OPTION_VFP11_DENORM_FIX 308
#define OPTION_NO_ENUM_SIZE_WARNING 309
+#define OPTION_PIC_VENEER 310
'
PARSE_AND_LIST_SHORTOPTS=p
@@ -274,6 +277,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "use-blx", no_argument, NULL, OPTION_USE_BLX},
{ "vfp11-denorm-fix", required_argument, NULL, OPTION_VFP11_DENORM_FIX},
{ "no-enum-size-warning", no_argument, NULL, OPTION_NO_ENUM_SIZE_WARNING},
+ { "pic-veneer", no_argument, NULL, OPTION_PIC_VENEER},
'
PARSE_AND_LIST_OPTIONS='
@@ -286,6 +290,7 @@ PARSE_AND_LIST_OPTIONS='
fprintf (file, _(" --use-blx Enable use of BLX instructions\n"));
fprintf (file, _(" --vfp11-denorm-fix Specify how to fix VFP11 denorm erratum\n"));
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible enum sizes\n"));
+ fprintf (file, _(" --pic-veneer Always generate PIC interworking veneers\n"));
'
PARSE_AND_LIST_ARGS_CASES='
@@ -335,6 +340,10 @@ PARSE_AND_LIST_ARGS_CASES='
case OPTION_NO_ENUM_SIZE_WARNING:
no_enum_size_warning = 1;
break;
+
+ case OPTION_PIC_VENEER:
+ pic_veneer = 1;
+ break;
'
# We have our own after_open and before_allocation functions, but they call