X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Fvms.em;h=fffbf122381939bc4277bae6193ed8efd49d6fc1;hb=7e56227dfffddbbb5b648c386c85345929fa0529;hp=6107c56870e859a1b839076604f641eb3d768551;hpb=45cfb56cf4e3043616ea2aca7e32d8aed0feb65c;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/vms.em b/ld/emultempl/vms.em index 6107c56870..fffbf12238 100644 --- a/ld/emultempl/vms.em +++ b/ld/emultempl/vms.em @@ -1,6 +1,5 @@ # This shell script emits a C file. -*- C -*- -# Copyright 2010 -# Free Software Foundation, Inc. +# Copyright (C) 2010-2020 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -29,8 +28,12 @@ static void gld${EMULATION_NAME}_before_parse (void) { ldfile_set_output_arch ("${ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); - config.dynamic_link = TRUE; + input_flags.dynamic = TRUE; config.has_shared = FALSE; /* Not yet. */ + + /* For ia64, harmless for alpha. */ + link_info.emit_hash = FALSE; + link_info.spare_dynamic_tags = 0; } /* This is called before the input files are opened. We add the @@ -49,12 +52,12 @@ gld${EMULATION_NAME}_create_output_section_statements (void) static bfd_boolean gld${EMULATION_NAME}_open_dynamic_archive (const char *arch ATTRIBUTE_UNUSED, - search_dirs_type *search, - lang_input_statement_type *entry) + search_dirs_type *search, + lang_input_statement_type *entry) { char *string; - if (! entry->maybe_archive) + if (! entry->flags.maybe_archive || entry->flags.full_name_provided) return FALSE; string = (char *) xmalloc (strlen (search->name) @@ -82,7 +85,7 @@ gld${EMULATION_NAME}_find_potential_libraries } /* Place an orphan section. We use this to put random OVR sections. - Much borrowed from elf32.em. */ + Much borrowed from elf.em. */ static lang_output_section_statement_type * vms_place_orphan (asection *s, @@ -98,7 +101,7 @@ vms_place_orphan (asection *s, /* We have nothing to say for anything other than a final link or an excluded section. */ - if (link_info.relocatable + if (bfd_link_relocatable (&link_info) || (s->flags & (SEC_EXCLUDE | SEC_LOAD)) != SEC_LOAD) return NULL; @@ -113,7 +116,7 @@ vms_place_orphan (asection *s, if (hold_data.os != NULL) { - lang_add_section (&hold_data.os->children, s, hold_data.os); + lang_add_section (&hold_data.os->children, s, NULL, hold_data.os); return hold_data.os; } else @@ -132,7 +135,8 @@ gld${EMULATION_NAME}_add_options int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED) { - static const struct option xtra_long[] = { + static const struct option xtra_long[] = + { {"identification", required_argument, NULL, OPTION_IDENTIFICATION}, {NULL, no_argument, NULL, 0} }; @@ -166,6 +170,67 @@ gld${EMULATION_NAME}_handle_option (int optc) EOF +if test "$OUTPUT_FORMAT" = "elf64-ia64-vms"; then + +fragment <dynamic_sections_created + && bed->elf_backend_size_dynamic_sections + && ! (*bed->elf_backend_size_dynamic_sections) (link_info.output_bfd, + &link_info)) + einfo (_("%F%P: failed to set dynamic section sizes: %E\n")); + + before_allocation_default (); +} + +static void +gld${EMULATION_NAME}_after_allocation (void) +{ + int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info); + + if (need_layout < 0) + einfo (_("%X%P: .eh_frame/.stab edit: %E\n")); + else + ldelf_map_segments (need_layout); +} + +static void +gld${EMULATION_NAME}_after_parse (void) +{ + link_info.relax_pass = 2; + after_parse_default (); +} +EOF + +LDEMUL_BEFORE_ALLOCATION=gld"$EMULATION_NAME"_before_allocation +LDEMUL_AFTER_ALLOCATION=gld"$EMULATION_NAME"_after_allocation + +LDEMUL_AFTER_PARSE=gld${EMULATION_NAME}_after_parse +source_em ${srcdir}/emultempl/needrelax.em +fi + LDEMUL_PLACE_ORPHAN=vms_place_orphan LDEMUL_BEFORE_PARSE=gld"$EMULATION_NAME"_before_parse LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=gld"$EMULATION_NAME"_create_output_section_statements