Avoid ubsan bug complaining about &p->field
[deliverable/binutils-gdb.git] / ld / emultempl / mmix-elfnmmo.em
index 4afa7ed7b08a9410969da83832e2f426b1921645..7cb4087a935f200d0ad2f05ad4fd96aaa5ce2a63 100644 (file)
@@ -1,11 +1,11 @@
 # This shell script emits a C file. -*- C -*-
-#   Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+#   Copyright (C) 2001-2019 Free Software Foundation, Inc.
 #
-# This file is part of GLD, the Gnu Linker.
+# This file is part of the GNU Binutils.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
 #
 
-# This file is sourced from elf32.em and mmo.em, used to define
+# This file is sourced from elf.em and mmo.em, used to define
 # MMIX-specific things common to ELF and MMO.
 
-cat >>e${EMULATION_NAME}.c <<EOF
+fragment <<EOF
 #include "elf/mmix.h"
 
+static void gld${EMULATION_NAME}_before_parse (void);
+
+static void
+mmix_before_parse (void)
+{
+  link_info.check_relocs_after_open_input = TRUE;
+  gld${EMULATION_NAME}_before_parse ();
+}
+
 /* Set up handling of linker-allocated global registers.  */
 
 static void
@@ -40,10 +50,10 @@ mmix_before_allocation (void)
 
   /* Force -relax on (regardless of whether we're doing a relocatable
      link).  */
-  command_line.relax = TRUE;
+  ENABLE_RELAXATION;
 
-  if (!_bfd_mmix_before_linker_allocation (output_bfd, &link_info))
-    einfo ("%X%P: Internal problems setting up section %s",
+  if (!_bfd_mmix_before_linker_allocation (link_info.output_bfd, &link_info))
+    einfo (_("%X%P: internal problems setting up section %s"),
           MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
 }
 
@@ -54,10 +64,11 @@ mmix_before_allocation (void)
 static void
 mmix_after_allocation (void)
 {
-  asection *sec
-    = bfd_get_section_by_name (output_bfd, MMIX_REG_CONTENTS_SECTION_NAME);
+  asection *sec;
   bfd_signed_vma regvma;
 
+  gld${EMULATION_NAME}_after_allocation ();
+
   /* If there's no register section, we don't need to do anything.  On the
      other hand, if there's a non-standard linker-script without a mapping
      from MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME when that section is
@@ -69,9 +80,11 @@ mmix_after_allocation (void)
      that's expected when you play tricks with linker scripts.  The
      "NOCROSSREFS 2" test does not run the output so it does not matter
      there.  */
+  sec = bfd_get_section_by_name (link_info.output_bfd,
+                                MMIX_REG_CONTENTS_SECTION_NAME);
   if (sec == NULL)
     sec
-      = bfd_get_section_by_name (output_bfd,
+      = bfd_get_section_by_name (link_info.output_bfd,
                                 MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
   if (sec == NULL)
     return;
@@ -84,28 +97,29 @@ mmix_after_allocation (void)
      as an undefined symbol.  */
   if (regvma < 32 * 8)
     {
-      einfo ("%X%P: Too many global registers: %u, max 223\n",
+      einfo (_("%X%P: too many global registers: %u, max 223\n"),
             (unsigned) sec->size / 8);
       regvma = 32 * 8;
     }
 
   /* Set vma to correspond to first such register number * 8.  */
-  bfd_set_section_vma (output_bfd, sec, (bfd_vma) regvma);
+  bfd_set_section_vma (sec, (bfd_vma) regvma);
 
   /* Simplify symbol output for the register section (without contents;
      created for register symbols) by setting the output offset to 0.
      This section is only present when there are register symbols.  */
-  sec = bfd_get_section_by_name (output_bfd, MMIX_REG_SECTION_NAME);
+  sec = bfd_get_section_by_name (link_info.output_bfd, MMIX_REG_SECTION_NAME);
   if (sec != NULL)
-    bfd_set_section_vma (abfd, sec, 0);
+    bfd_set_section_vma (sec, 0);
 
-  if (!_bfd_mmix_after_linker_allocation (output_bfd, &link_info))
+  if (!_bfd_mmix_after_linker_allocation (link_info.output_bfd, &link_info))
     {
       /* This is a fatal error; make einfo call not return.  */
-      einfo ("%F%P: Can't finalize linker-allocated global registers\n");
+      einfo (_("%F%P: can't finalize linker-allocated global registers\n"));
     }
 }
 EOF
 
+LDEMUL_BEFORE_PARSE=mmix_before_parse
 LDEMUL_AFTER_ALLOCATION=mmix_after_allocation
 LDEMUL_BEFORE_ALLOCATION=mmix_before_allocation
This page took 0.02585 seconds and 4 git commands to generate.