* emultempl/elf32.em (gld${EMULATION_NAME}_check_ld_so_conf): Replace
[deliverable/binutils-gdb.git] / ld / emultempl / vms.em
index 164f2e19038506f447ec3bd6733faa9f7fa558f3..30c1a1602c7e1e5671079eec0068ac4af8109775 100644 (file)
@@ -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
@@ -113,7 +117,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 +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
This page took 0.025025 seconds and 4 git commands to generate.