X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Falphaelf.em;h=c2660b7b548dd2a7cd5d2ae5ff949ae8ee91846c;hb=f809832224cc45eb58812f6d4bb03cbf52fad980;hp=81bb377d730392fda2dc8a79f8c02aec4030245f;hpb=f13a99db51c0ca487f4a0a41b14dc255d386c4ff;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/alphaelf.em b/ld/emultempl/alphaelf.em index 81bb377d73..c2660b7b54 100644 --- a/ld/emultempl/alphaelf.em +++ b/ld/emultempl/alphaelf.em @@ -1,5 +1,5 @@ # This shell script emits a C file. -*- C -*- -# Copyright 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Copyright (C) 2003-2020 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -19,7 +19,7 @@ # MA 02110-1301, USA. # -# This file is sourced from elf32.em, and defines extra alpha +# This file is sourced from elf.em, and defines extra alpha # specific routines. # fragment <xvec == &bfd_elf64_alpha_vec - || link_info.output_bfd->xvec == &bfd_elf64_alpha_freebsd_vec) + if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour + && elf_object_id (link_info.output_bfd) == ALPHA_ELF_DATA) { unsigned int num_plt; lang_output_section_statement_type *os; lang_output_section_statement_type *plt_os[2]; num_plt = 0; - for (os = &lang_output_section_statement.head->output_section_statement; + for (os = (void *) lang_os_list.head; os != NULL; os = os->next) { @@ -75,12 +72,17 @@ alpha_after_open (void) static void alpha_after_parse (void) { - if (limit_32bit && !link_info.shared && !link_info.relocatable) + link_info.relax_pass = 2; + if (limit_32bit + && !bfd_link_pic (&link_info) + && !bfd_link_relocatable (&link_info)) lang_section_start (".interp", exp_binop ('+', exp_intop (ALPHA_TEXT_START_32BIT), exp_nameop (SIZEOF_HEADERS, NULL)), NULL); + + ldelf_after_parse (); } static void @@ -90,8 +92,10 @@ alpha_before_allocation (void) gld${EMULATION_NAME}_before_allocation (); /* Add -relax if -O, not -r, and not explicitly disabled. */ - if (link_info.optimize && !link_info.relocatable && !disable_relaxation) - command_line.relax = TRUE; + if (link_info.optimize + && !bfd_link_relocatable (&link_info) + && ! RELAXATION_DISABLED_BY_USER) + ENABLE_RELAXATION; } static void @@ -100,7 +104,7 @@ alpha_finish (void) if (limit_32bit) elf_elfheader (link_info.output_bfd)->e_flags |= EF_ALPHA_32BIT; - gld${EMULATION_NAME}_finish (); + finish_default (); } EOF @@ -109,14 +113,12 @@ EOF # PARSE_AND_LIST_PROLOGUE=' #define OPTION_TASO 300 -#define OPTION_NO_RELAX (OPTION_TASO + 1) -#define OPTION_SECUREPLT (OPTION_NO_RELAX + 1) +#define OPTION_SECUREPLT (OPTION_TASO + 1) #define OPTION_NO_SECUREPLT (OPTION_SECUREPLT + 1) ' PARSE_AND_LIST_LONGOPTS=' { "taso", no_argument, NULL, OPTION_TASO }, - { "no-relax", no_argument, NULL, OPTION_NO_RELAX }, { "secureplt", no_argument, NULL, OPTION_SECUREPLT }, { "no-secureplt", no_argument, NULL, OPTION_NO_SECUREPLT }, ' @@ -124,20 +126,17 @@ PARSE_AND_LIST_LONGOPTS=' PARSE_AND_LIST_OPTIONS=' fprintf (file, _("\ --taso Load executable in the lower 31-bit addressable\n\ - virtual address range.\n\ - --no-relax Do not relax call and gp sequences.\n\ - --secureplt Force PLT in text segment.\n\ - --no-secureplt Force PLT in data segment.\n\ -")); + virtual address range\n")); + fprintf (file, _("\ + --secureplt Force PLT in text segment\n")); + fprintf (file, _("\ + --no-secureplt Force PLT in data segment\n")); ' PARSE_AND_LIST_ARGS_CASES=' case OPTION_TASO: limit_32bit = 1; break; - case OPTION_NO_RELAX: - disable_relaxation = TRUE; - break; case OPTION_SECUREPLT: elf64_alpha_use_secureplt = TRUE; break;