X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Faarch64elf.em;h=f4baf508958714c824b8670ee4a01dfe9a7d254f;hb=0b11474080800192797236e30857a42818f5560d;hp=b59623ec6533952734f400cc0165e59f94ac2b13;hpb=739b5c9c778dee9e2f54d864f83a81ecb0639535;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em index b59623ec65..f4baf50895 100644 --- a/ld/emultempl/aarch64elf.em +++ b/ld/emultempl/aarch64elf.em @@ -19,13 +19,14 @@ # see . # -# This file is sourced from elf32.em, and defines extra aarch64-elf +# This file is sourced from elf.em, and defines extra aarch64-elf # specific routines. # fragment <the_bfd, stub_sec_name, flags); @@ -178,7 +179,7 @@ elf${ELFSIZE}_aarch64_add_stub_section (const char *stub_sec_name, /* Long branch stubs contain a 64-bit address, so the section requires 8 byte alignment. */ - bfd_set_section_alignment (stub_file->the_bfd, stub_sec, 3); + bfd_set_section_alignment (stub_sec, 3); output_section = input_section->output_section; os = lang_output_section_get (output_section); @@ -206,7 +207,7 @@ gldaarch64_layout_sections_again (void) /* If we have changed sizes of the stub sections, then we need to recalculate all the section offsets. This may mean we need to add even more stubs. */ - gld${EMULATION_NAME}_map_segments (TRUE); + ldelf_map_segments (TRUE); need_laying_out = -1; } @@ -217,7 +218,7 @@ build_section_lists (lang_statement_union_type *statement) { asection *i = statement->input_section.section; - if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms + if (!bfd_input_just_syms (i->owner) && (i->flags & SEC_EXCLUDE) == 0 && i->output_section != NULL && i->output_section->owner == link_info.output_bfd) @@ -275,7 +276,7 @@ gld${EMULATION_NAME}_after_allocation (void) } if (need_laying_out != -1) - gld${EMULATION_NAME}_map_segments (need_laying_out); + ldelf_map_segments (need_laying_out); } static void @@ -339,26 +340,6 @@ aarch64_elf_create_output_section_statements (void) ldlang_add_file (stub_file); } -/* Avoid processing the fake stub_file in vercheck, stat_needed and - check_needed routines. */ - -static void (*real_func) (lang_input_statement_type *); - -static void aarch64_for_each_input_file_wrapper (lang_input_statement_type *l) -{ - if (l != stub_file) - (*real_func) (l); -} - -static void -aarch64_lang_for_each_input_file (void (*func) (lang_input_statement_type *)) -{ - real_func = func; - lang_for_each_input_file (&aarch64_for_each_input_file_wrapper); -} - -#define lang_for_each_input_file aarch64_lang_for_each_input_file - EOF # Define some shell vars to insert bits of code into the standard elf @@ -372,8 +353,6 @@ PARSE_AND_LIST_PROLOGUE=' #define OPTION_FIX_ERRATUM_835769 313 #define OPTION_FIX_ERRATUM_843419 314 #define OPTION_NO_APPLY_DYNAMIC_RELOCS 315 -#define OPTION_FORCE_BTI 316 -#define OPTION_PAC_PLT 317 ' PARSE_AND_LIST_SHORTOPTS=p @@ -387,8 +366,6 @@ PARSE_AND_LIST_LONGOPTS=' { "fix-cortex-a53-835769", no_argument, NULL, OPTION_FIX_ERRATUM_835769}, { "fix-cortex-a53-843419", optional_argument, NULL, OPTION_FIX_ERRATUM_843419}, { "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS}, - { "force-bti", no_argument, NULL, OPTION_FORCE_BTI}, - { "pac-plt", no_argument, NULL, OPTION_PAC_PLT}, ' PARSE_AND_LIST_OPTIONS=' @@ -419,9 +396,20 @@ PARSE_AND_LIST_OPTIONS=' instruction into an ADR. As such the workaround will always use a\n\ veneer and this will give you both a performance and size overhead.\n")); fprintf (file, _(" --no-apply-dynamic-relocs Do not apply link-time values for dynamic relocations\n")); - fprintf (file, _(" --force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n")); - fprintf (file, _(" --pac-plt Protect PLTs with Pointer Authentication.\n")); + fprintf (file, _(" -z force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n")); + fprintf (file, _(" -z pac-plt Protect PLTs with Pointer Authentication.\n")); +' + +PARSE_AND_LIST_ARGS_CASE_Z_AARCH64=' + else if (strcmp (optarg, "force-bti") == 0) + { + plt_type |= PLT_BTI; + bti_type = BTI_WARN; + } + else if (strcmp (optarg, "pac-plt") == 0) + plt_type |= PLT_PAC; ' +PARSE_AND_LIST_ARGS_CASE_Z="$PARSE_AND_LIST_ARGS_CASE_Z $PARSE_AND_LIST_ARGS_CASE_Z_AARCH64" PARSE_AND_LIST_ARGS_CASES=' case '\'p\'': @@ -464,15 +452,6 @@ PARSE_AND_LIST_ARGS_CASES=' no_apply_dynamic_relocs = 1; break; - case OPTION_FORCE_BTI: - plt_type |= PLT_BTI; - bti_type = BTI_WARN; - break; - - case OPTION_PAC_PLT: - plt_type |= PLT_PAC; - break; - case OPTION_STUBGROUP_SIZE: { const char *end;