X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Farmelf.em;h=29e9902cb8c9251107fb2c3f73e10b39f94a3d7d;hb=83b94be54133a44825c4c33975d8fb72e286ed16;hp=8ce0dabaecbd446b3d93298b4b2dc68d06d0e146;hpb=92b93329b58c744ea269b50f6278ed99416941a9;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em index 8ce0dabaec..29e9902cb8 100644 --- a/ld/emultempl/armelf.em +++ b/ld/emultempl/armelf.em @@ -1,6 +1,6 @@ # This shell script emits a C file. -*- C -*- # Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -# 2004, 2005, 2007 +# 2004, 2005, 2007, 2008 # Free Software Foundation, Inc. # # This file is part of the GNU Binutils. @@ -53,7 +53,7 @@ gld${EMULATION_NAME}_before_parse (void) static void arm_elf_after_open (void) { - if (strstr (bfd_get_target (output_bfd), "arm") == NULL) + if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL) { /* The arm backend needs special fields in the output hash structure. These will only be created if the output format is an arm format, @@ -86,7 +86,7 @@ arm_elf_set_bfd_for_interworking (lang_statement_union_type *statement) { asection *output_section = i->output_section; - ASSERT (output_section->owner == output_bfd); + ASSERT (output_section->owner == link_info.output_bfd); /* Don't attach the interworking stubs to a dynamic object, to an empty section, etc. */ @@ -130,7 +130,7 @@ arm_elf_before_allocation (void) /* Choose type of VFP11 erratum fix, or warn if specified fix is unnecessary due to architecture version. */ - bfd_elf32_arm_set_vfp11_fix (output_bfd, &link_info); + bfd_elf32_arm_set_vfp11_fix (link_info.output_bfd, &link_info); /* We should be able to set the size of the interworking stub section. We can't do it until later if we have dynamic sections, though. */ @@ -212,7 +212,7 @@ arm_elf_finish (void) /* Special procesing is required for a Thumb entry symbol. The bottom bit of its address must be set. */ val = (h->u.def.value - + bfd_get_section_vma (output_bfd, + + bfd_get_section_vma (link_info.output_bfd, h->u.def.section->output_section) + h->u.def.section->output_offset); @@ -232,7 +232,7 @@ arm_elf_finish (void) entry_symbol.name = buffer; } else - einfo (_("%P: warning: connot find thumb start symbol %s\n"), + einfo (_("%P: warning: cannot find thumb start symbol %s\n"), thumb_entry_symbol); } @@ -241,7 +241,8 @@ arm_elf_finish (void) static void arm_elf_create_output_section_statements (void) { - bfd_elf32_arm_set_target_relocs (output_bfd, &link_info, target1_is_rel, + bfd_elf32_arm_set_target_relocs (link_info.output_bfd, &link_info, + target1_is_rel, target2_type, fix_v4bx, use_blx, vfp11_denorm_fix, no_enum_size_warning, pic_veneer); @@ -263,6 +264,7 @@ PARSE_AND_LIST_PROLOGUE=' #define OPTION_VFP11_DENORM_FIX 308 #define OPTION_NO_ENUM_SIZE_WARNING 309 #define OPTION_PIC_VENEER 310 +#define OPTION_FIX_V4BX_INTERWORKING 311 ' PARSE_AND_LIST_SHORTOPTS=p @@ -275,6 +277,7 @@ PARSE_AND_LIST_LONGOPTS=' { "target1-abs", no_argument, NULL, OPTION_TARGET1_ABS}, { "target2", required_argument, NULL, OPTION_TARGET2}, { "fix-v4bx", no_argument, NULL, OPTION_FIX_V4BX}, + { "fix-v4bx-interworking", no_argument, NULL, OPTION_FIX_V4BX_INTERWORKING}, { "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}, @@ -282,16 +285,18 @@ PARSE_AND_LIST_LONGOPTS=' ' PARSE_AND_LIST_OPTIONS=' - fprintf (file, _(" --thumb-entry= Set the entry point to be Thumb symbol \n")); - fprintf (file, _(" --be8 Oputput BE8 format image\n")); - fprintf (file, _(" --target1=rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n")); - fprintf (file, _(" --target1=abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n")); - fprintf (file, _(" --target2= Specify definition of R_ARM_TARGET2\n")); - fprintf (file, _(" --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n")); - 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")); + fprintf (file, _(" --thumb-entry= Set the entry point to be Thumb symbol \n")); + fprintf (file, _(" --be8 Oputput BE8 format image\n")); + fprintf (file, _(" --target1=rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n")); + fprintf (file, _(" --target1=abs Interpret R_ARM_TARGET1 as R_ARM_ABS32\n")); + fprintf (file, _(" --target2= Specify definition of R_ARM_TARGET2\n")); + fprintf (file, _(" --fix-v4bx Rewrite BX rn as MOV pc, rn for ARMv4\n")); + fprintf (file, _(" --fix-v4bx-interworking Rewrite BX rn branch to ARMv4 interworking veneer\n")); + 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=' @@ -323,6 +328,10 @@ PARSE_AND_LIST_ARGS_CASES=' fix_v4bx = 1; break; + case OPTION_FIX_V4BX_INTERWORKING: + fix_v4bx = 2; + break; + case OPTION_USE_BLX: use_blx = 1; break;