diff options
author | Nick Clifton <nickc@redhat.com> | 2012-04-12 07:35:07 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2012-04-12 07:35:07 +0000 |
commit | 202e23565d36f4696d5e836ec06d4c685c30fb16 (patch) | |
tree | a6fc6863b9383d5611012636e9fc80c58c2330e6 /ld/emultempl/vms.em | |
parent | 81eb0a20fcefcddb5863de3b53ffdc93df2881be (diff) | |
download | fsf-binutils-gdb-202e23565d36f4696d5e836ec06d4c685c30fb16.zip fsf-binutils-gdb-202e23565d36f4696d5e836ec06d4c685c30fb16.tar.gz fsf-binutils-gdb-202e23565d36f4696d5e836ec06d4c685c30fb16.tar.bz2 |
* configure.ac (ia64*-*-*vms*): Add support for ld.
* configure: Regenerate.
* scripttempl/ia64vms.sc: New file.
* emultempl/vms.em (_before_parse): Support for ia64.
(elf64-ia64-vms): New fragment for ia64.
* emulparams/elf64_ia64_vms.sh: New file.
* configure.tgt (ia64-*-*vms*): Add.
* Makefile.am (ALL_64_EMULATION_SOURCES): Add eelf64_ia64_vms.c
(eelf64_ia64_vms.c): New rule.
* Makefile.in: Regenerate.
* elflink.c (elf_link_output_extsym): Add a guard.
(bfd_elf_final_link): Remove assertion.
(bfd_elf_final_link): Add a guard.
* elfnn-ia64.c (INCLUDE_IA64_VMS): Removed.
(elfNN_vms_section_from_shdr, elfNN_vms_object_p)
(elfNN_vms_post_process_headers, elfNN_vms_section_processing)
(elfNN_vms_final_write_processing, elfNN_vms_close_and_cleanup):
Remove.
(elfNN-ia64-vms target): Move to ...
* elf64-ia64-vms.c: New file.
* configure.in (bfd_elf64_ia64_vms_vec): Add elf64-ia64-vms.lo
* Makefile.am (BFD64_BACKENDS): Add elf64-ia64-vms.lo.
(BFD64_BACKENDS_CFILES): Ad elf64-ia64-vms.c.
* configure: Regenerate.
* Makefile.in: Regenerate.
Diffstat (limited to 'ld/emultempl/vms.em')
-rw-r--r-- | ld/emultempl/vms.em | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/ld/emultempl/vms.em b/ld/emultempl/vms.em index 164f2e1..98837e3 100644 --- a/ld/emultempl/vms.em +++ b/ld/emultempl/vms.em @@ -31,6 +31,10 @@ gld${EMULATION_NAME}_before_parse (void) ldfile_set_output_arch ("${ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); 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 @@ -132,7 +136,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 +171,63 @@ gld${EMULATION_NAME}_handle_option (int optc) EOF +if test "$OUTPUT_FORMAT" = "elf64-ia64-vms"; then + +fragment <<EOF +#include "elf-bfd.h" +EOF + +source_em ${srcdir}/emultempl/elf-generic.em + +fragment <<EOF + +/* This is called after the sections have been attached to output + sections, but before any sizes or addresses have been set. */ + +static void +gld${EMULATION_NAME}_before_allocation (void) +{ + const struct elf_backend_data *bed; + + if (!is_elf_hash_table (link_info.hash)) + return; + + bed = get_elf_backend_data (link_info.output_bfd); + + /* The backend must work out the sizes of all the other dynamic + sections. */ + if (elf_hash_table (&link_info)->dynamic_sections_created + && bed->elf_backend_size_dynamic_sections + && ! (*bed->elf_backend_size_dynamic_sections) (link_info.output_bfd, + &link_info)) + einfo ("%P%F: failed to set dynamic section sizes: %E\n"); + + before_allocation_default (); +} + +static void +gld${EMULATION_NAME}_after_allocation (void) +{ + bfd_boolean need_layout = bfd_elf_discard_info (link_info.output_bfd, + &link_info); + gld${EMULATION_NAME}_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 |