aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl/vms.em
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2012-04-12 07:35:07 +0000
committerNick Clifton <nickc@redhat.com>2012-04-12 07:35:07 +0000
commit202e23565d36f4696d5e836ec06d4c685c30fb16 (patch)
treea6fc6863b9383d5611012636e9fc80c58c2330e6 /ld/emultempl/vms.em
parent81eb0a20fcefcddb5863de3b53ffdc93df2881be (diff)
downloadfsf-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.em64
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