* mpw-config.in (i386-unknown-aout): Change to i386-unknown-go32.
authorStan Shebs <shebs@codesourcery.com>
Sat, 18 Mar 1995 00:13:26 +0000 (00:13 +0000)
committerStan Shebs <shebs@codesourcery.com>
Sat, 18 Mar 1995 00:13:26 +0000 (00:13 +0000)
(i386-unknown-coff): Remove.
(sh-hitachi-hms): New target.
(emulation_ofiles): Set correctly for each target.
(version, TDEFINES): Add to makefile fragment.
* mpw-make.in (BISON): Use byacc instead of bison.
(em_*.c): Replace with e*.c everywhere.
(ldgram.h): Separate action from ldgram.c generation.
(LD_PROG): Depend on Version.r.
(Version.r): generate from version info.
* mpw-em.c: Remove.
* mpw-emipsidt.c: New file, modified for MPW from emipsidt.c.

ld/ChangeLog.mpw
ld/mpw-config.in
ld/mpw-em.c [deleted file]
ld/mpw-emipsidt.c [new file with mode: 0644]
ld/mpw-make.in

index cc5538bfa9407aa68d0e35f605875acf726103be..f422678a2299911fca27b29516fb128345a73567 100644 (file)
@@ -1,3 +1,18 @@
+Fri Mar 17 15:42:33 1995  Stan Shebs  <shebs@andros.cygnus.com>
+
+       * mpw-config.in (i386-unknown-aout): Change to i386-unknown-go32.
+       (i386-unknown-coff): Remove.
+       (sh-hitachi-hms): New target.
+       (emulation_ofiles): Set correctly for each target.
+       (version, TDEFINES): Add to makefile fragment.
+       * mpw-make.in (BISON): Use byacc instead of bison.
+       (em_*.c): Replace with e*.c everywhere.
+       (ldgram.h): Separate action from ldgram.c generation.
+       (LD_PROG): Depend on Version.r.
+       (Version.r): generate from version info.
+       * mpw-em.c: Remove.
+       * mpw-emipsidt.c: New file, modified for MPW from emipsidt.c.
+
 Wed Dec 14 13:29:52 1994  Stan Shebs  <shebs@andros.cygnus.com>
 
        * mpw-config.in (m68k-apple-macos, ppc-apple-macos,
index 44e34111c2680f1dd836b691f96048ab93d10796..928e903aa209ed7913a0714aa9db84a5314723cf 100644 (file)
@@ -2,26 +2,38 @@
 
 If "{target_canonical}" =~ /m68k-apple-macos/
        Set emulname m68kcoff
+       forward-include "{srcdir}"mpw-em68kcoff.c em68kcoff.c
+       Set emulation_ofiles "{o}"em68kcoff.c.o
 Else If "{target_canonical}" =~ /ppc-apple-macos/
-       Set emulname ppcelf
-Else If "{target_canonical}" =~ /i386-unknown-aout/
-       Set emulname i386aout
-Else If "{target_canonical}" =~ /i386-unknown-coff/
-       Set emulname i386coff
+       Set emulname xcoff
+       forward-include "{srcdir}"mpw-excoff.c excoff.c
+       Set emulation_ofiles "{o}"excoff.c.o
+Else If "{target_canonical}" =~ /i386-unknown-go32/
+       Set emulname i386go32
+       forward-include "{srcdir}"mpw-ei386go32.c ei386go32.c
+       Set emulation_ofiles "{o}"ei386go32.c.o
 Else If "{target_canonical}" =~ /mips-idt-ecoff/
        Set emulname mipsidt
-       forward-include "{srcdir}"mpw-em.c em_mipsidt.c
+       forward-include "{srcdir}"mpw-emipsidt.c emipsidt.c
+       Set emulation_ofiles "{o}"emipsidt.c.o
+Else If "{target_canonical}" =~ /sh-hitachi-hms/
+       Set emulname sh
+       forward-include "{srcdir}"mpw-esh.c esh.c
+       Set emulation_ofiles "{o}"esh.c.o
 End If
 
-Echo '/* This file is automatically generated.  DO NOT EDIT! */' >ldemul-tmp.h
-Echo "extern ld_emulation_xfer_type ld_{emulname}_emulation;" >>ldemul-tmp.h
-Echo '#define EMULATION_LIST \' >>ldemul-tmp.h
-Echo "  &ld_{emulname}_emulation, \" >>ldemul-tmp.h
-Echo '  0' >>ldemul-tmp.h
-MoveIfChange ldemul-tmp.h ldemul-list.h
+Echo '/* This file is automatically generated.  DO NOT EDIT! */' > "{o}"ldemul-tmp.h
+Echo "extern ld_emulation_xfer_type ld_{emulname}_emulation;" >> "{o}"ldemul-tmp.h
+Echo '#define EMULATION_LIST \'                                >> "{o}"ldemul-tmp.h
+Echo "  &ld_{emulname}_emulation, \"                   >> "{o}"ldemul-tmp.h
+Echo '  0'                                             >> "{o}"ldemul-tmp.h
+MoveIfChange "{o}"ldemul-tmp.h "{o}"ldemul-list.h
 
-Echo '# From mpw-config.in'       > "{o}"mk.tmp
+Echo '# From mpw-config.in'      > "{o}"mk.tmp
 
-Echo "EMUL = " {emulname} >> "{o}"mk.tmp
+Echo "EMUL = " {emulname}      >> "{o}"mk.tmp
+Echo "EMULATION_OFILES = " {emulation_ofiles} >> "{o}"mk.tmp
+Echo 'version = ' `Search 'ld version ' {srcdir}ldver.c | sed -e 's/.*ld version \([^ ]*\).*/\1/'` >> "{o}"mk.tmp
+Echo "TDEFINES = "             >> "{o}"mk.tmp
 
-Echo '# End from mpw-config.in'  >> "{o}"mk.tmp
+Echo '# End from mpw-config.in'        >> "{o}"mk.tmp
diff --git a/ld/mpw-em.c b/ld/mpw-em.c
deleted file mode 100644 (file)
index 665dfac..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/* This file is is generated by a shell script.  DO NOT EDIT! */
-
-/* emulate the original gld for the given mipsidt
-   Copyright (C) 1991, 1993 Free Software Foundation, Inc.
-  Written by Steve Chamberlain steve@cygnus.com
-
-This file is part of GLD, the Gnu Linker.
-
-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
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-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., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#define TARGET_IS_mipsidt
-
-#include "bfd.h"
-#include "sysdep.h"
-#include "bfdlink.h"
-
-#include "ld.h"
-#include "config.h"
-#include "ldmain.h"
-#include "ldemul.h"
-#include "ldfile.h"
-#include "ldmisc.h"
-
-static void gldmipsidt_before_parse PARAMS ((void));
-static char *gldmipsidt_get_script PARAMS ((int *isfile));
-
-static void
-gldmipsidt_before_parse()
-{
-#ifndef TARGET_                        /* I.e., if not generic. */
- ldfile_output_architecture = bfd_arch_mips;
-#endif /* not TARGET_ */
-}
-
-static char *
-gldmipsidt_get_script(isfile)
- int *isfile;
-{                       
- *isfile = 0;
-
- if (link_info.relocateable == true && config.build_constructors == true)
- return "OUTPUT_FORMAT(\"ecoff-bigmips\")\n\
-ENTRY(start)\n\
-SECTIONS\n\
-{\n\
- .text : {\n\
- ;\n\
- *(.init)\n\
- ;\n\
- *(.text)\n\
- *(.fini)\n\
- ;\n\
- ;\n\
- }\n\
- .rdata : {\n\
- *(.rdata)\n\
- }\n\
- .data : {\n\
- *(.data)\n\
- CONSTRUCTORS\n\
- }\n\
- .lit8 : {\n\
- *(.lit8)\n\
- }\n\
- .lit4 : {\n\
- *(.lit4)\n\
- }\n\
- .sdata : {\n\
- *(.sdata)\n\
- }\n\
- .sbss : {\n\
- *(.sbss)\n\
- *(.scommon)\n\
- }\n\
- .bss : {\n\
- *(.bss)\n\
- *(COMMON)\n\
- }\n\
-}\n\n";
- else if (link_info.relocateable == true)
- return "OUTPUT_FORMAT(\"ecoff-bigmips\")\n\
-ENTRY(start)\n\
-SECTIONS\n\
-{\n\
- .text : {\n\
- ;\n\
- *(.init)\n\
- ;\n\
- *(.text)\n\
- *(.fini)\n\
- ;\n\
- ;\n\
- }\n\
- .rdata : {\n\
- *(.rdata)\n\
- }\n\
- .data : {\n\
- *(.data)\n\
- }\n\
- .lit8 : {\n\
- *(.lit8)\n\
- }\n\
- .lit4 : {\n\
- *(.lit4)\n\
- }\n\
- .sdata : {\n\
- *(.sdata)\n\
- }\n\
- .sbss : {\n\
- *(.sbss)\n\
- *(.scommon)\n\
- }\n\
- .bss : {\n\
- *(.bss)\n\
- *(COMMON)\n\
- }\n\
-}\n\n";
- else if (!config.text_read_only)
- return "OUTPUT_FORMAT(\"ecoff-bigmips\")\n\
-ENTRY(start)\n\
-SECTIONS\n\
-{\n\
- .text 0xa0012000 : {\n\
- _ftext = . ;\n\
- *(.init)\n\
- eprol = .;\n\
- *(.text)\n\
- *(.fini)\n\
- etext = .;\n\
- _etext = .;\n\
- }\n\
- .rdata . : {\n\
- *(.rdata)\n\
- }\n\
-  _fdata = .;\n\
- .data . : {\n\
- *(.data)\n\
- CONSTRUCTORS\n\
- }\n\
-  _gp = . + 0x8000;\n\
- .lit8 . : {\n\
- *(.lit8)\n\
- }\n\
- .lit4 . : {\n\
- *(.lit4)\n\
- }\n\
- .sdata . : {\n\
- *(.sdata)\n\
- }\n\
-  edata = .;\n\
-  _edata = .;\n\
-  _fbss = .;\n\
- .sbss . : {\n\
- *(.sbss)\n\
- *(.scommon)\n\
- }\n\
- .bss . : {\n\
- *(.bss)\n\
- *(COMMON)\n\
- }\n\
-  end = .;\n\
-  _end = .;\n\
-}\n\n";
- else if (!config.magic_demand_paged)
- return "OUTPUT_FORMAT(\"ecoff-bigmips\")\n\
-ENTRY(start)\n\
-SECTIONS\n\
-{\n\
- .text 0xa0012000 : {\n\
- _ftext = . ;\n\
- *(.init)\n\
- eprol = .;\n\
- *(.text)\n\
- *(.fini)\n\
- etext = .;\n\
- _etext = .;\n\
- }\n\
- .rdata . : {\n\
- *(.rdata)\n\
- }\n\
-  _fdata = .;\n\
- .data . : {\n\
- *(.data)\n\
- CONSTRUCTORS\n\
- }\n\
-  _gp = . + 0x8000;\n\
- .lit8 . : {\n\
- *(.lit8)\n\
- }\n\
- .lit4 . : {\n\
- *(.lit4)\n\
- }\n\
- .sdata . : {\n\
- *(.sdata)\n\
- }\n\
-  edata = .;\n\
-  _edata = .;\n\
-  _fbss = .;\n\
- .sbss . : {\n\
- *(.sbss)\n\
- *(.scommon)\n\
- }\n\
- .bss . : {\n\
- *(.bss)\n\
- *(COMMON)\n\
- }\n\
-  end = .;\n\
-  _end = .;\n\
-}\n\n";
- else
- return "OUTPUT_FORMAT(\"ecoff-bigmips\")\n\
-ENTRY(start)\n\
-SECTIONS\n\
-{\n\
- .text 0xa0012000 : {\n\
- _ftext = . ;\n\
- *(.init)\n\
- eprol = .;\n\
- *(.text)\n\
- *(.fini)\n\
- etext = .;\n\
- _etext = .;\n\
- }\n\
- .rdata . : {\n\
- *(.rdata)\n\
- }\n\
-  _fdata = .;\n\
- .data . : {\n\
- *(.data)\n\
- CONSTRUCTORS\n\
- }\n\
-  _gp = . + 0x8000;\n\
- .lit8 . : {\n\
- *(.lit8)\n\
- }\n\
- .lit4 . : {\n\
- *(.lit4)\n\
- }\n\
- .sdata . : {\n\
- *(.sdata)\n\
- }\n\
-  edata = .;\n\
-  _edata = .;\n\
-  _fbss = .;\n\
- .sbss . : {\n\
- *(.sbss)\n\
- *(.scommon)\n\
- }\n\
- .bss . : {\n\
- *(.bss)\n\
- *(COMMON)\n\
- }\n\
-  end = .;\n\
-  _end = .;\n\
-}\n\n";
-}
-
-struct ld_emulation_xfer_struct ld_mipsidt_emulation = 
-{
- gldmipsidt_before_parse,
- syslib_default,
- hll_default,
- after_parse_default,
- after_allocation_default,
- set_output_arch_default,
- ldemul_default_target,
- before_allocation_default,
- gldmipsidt_get_script,
- "mipsidt",
- "ecoff-bigmips"
-};
diff --git a/ld/mpw-emipsidt.c b/ld/mpw-emipsidt.c
new file mode 100644 (file)
index 0000000..2a791bf
--- /dev/null
@@ -0,0 +1,431 @@
+/* This file is is generated by a shell script.  DO NOT EDIT! */
+
+/* Handle embedded relocs for MIPS.
+   Copyright 1994 Free Software Foundation, Inc.
+   Written by Ian Lance Taylor <ian@cygnus.com> based on generic.em.
+
+This file is part of GLD, the Gnu Linker.
+
+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
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#define TARGET_IS_mipsidt
+
+#include "libiberty.h"
+#include "bfd.h"
+#include "sysdep.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "config.h"
+#include "ldmain.h"
+#include "ldemul.h"
+#include "ldfile.h"
+#include "ldmisc.h"
+
+static void gldmipsidt_before_parse PARAMS ((void));
+static void gldmipsidt_after_open PARAMS ((void));
+static void check_sections PARAMS ((bfd *, asection *, PTR));
+static void gldmipsidt_after_allocation PARAMS ((void));
+static char *gldmipsidt_get_script PARAMS ((int *isfile));
+
+static void
+gldmipsidt_before_parse()
+{
+#ifndef TARGET_                        /* I.e., if not generic.  */
+  ldfile_output_architecture = bfd_arch_mips;
+#endif /* not TARGET_ */
+}
+
+/* This function is run after all the input files have been opened.
+   We create a .rel.sdata section for each input file with a non zero
+   .sdata section.  The BFD backend will fill in these sections with
+   magic numbers which can be used to relocate the data section at run
+   time.  This will only do the right thing if all the input files
+   have been compiled using -membedded-pic.  */
+
+static void
+gldmipsidt_after_open ()
+{
+  bfd *abfd;
+
+  if (! command_line.embedded_relocs
+      || link_info.relocateable)
+    return;
+
+  for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+    {
+      asection *datasec;
+
+      datasec = bfd_get_section_by_name (abfd, ".sdata");
+
+      /* Note that we assume that the reloc_count field has already
+         been set up.  We could call bfd_get_reloc_upper_bound, but
+         that returns the size of a memory buffer rather than a reloc
+         count.  We do not want to call bfd_canonicalize_reloc,
+         because although it would always work it would force us to
+         read in the relocs into BFD canonical form, which would waste
+         a significant amount of time and memory.  */
+      if (datasec != NULL && datasec->reloc_count > 0)
+       {
+         asection *relsec;
+
+         relsec = bfd_make_section (abfd, ".rel.sdata");
+         if (relsec == NULL
+             || ! bfd_set_section_flags (abfd, relsec,
+                                         (SEC_ALLOC
+                                          | SEC_LOAD
+                                          | SEC_HAS_CONTENTS
+                                          | SEC_IN_MEMORY))
+             || ! bfd_set_section_alignment (abfd, relsec, 2)
+             || ! bfd_set_section_size (abfd, relsec,
+                                        datasec->reloc_count * 4))
+           einfo ("%F%B: can not create .rel.sdata section: %E");
+       }
+
+      /* Double check that all other data sections are empty, as is
+         required for embedded PIC code.  */
+      bfd_map_over_sections (abfd, check_sections, (PTR) datasec);
+    }
+}
+
+/* Check that of the data sections, only the .sdata section has
+   relocs.  This is called via bfd_map_over_sections.  */
+
+static void
+check_sections (abfd, sec, sdatasec)
+     bfd *abfd;
+     asection *sec;
+     PTR sdatasec;
+{
+  if ((bfd_get_section_flags (abfd, sec) & SEC_CODE) == 0
+      && sec != (asection *) sdatasec
+      && sec->reloc_count != 0)
+    einfo ("%F%X: section %s has relocs; can not use --embedded-relocs",
+          abfd, bfd_get_section_name (abfd, sec));
+}
+
+/* This function is called after the section sizes and offsets have
+   been set.  If we are generating embedded relocs, it calls a special
+   BFD backend routine to do the work.  */
+
+static void
+gldmipsidt_after_allocation ()
+{
+  bfd *abfd;
+
+  if (! command_line.embedded_relocs
+      || link_info.relocateable)
+    return;
+
+  for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)
+    {
+      asection *datasec, *relsec;
+      char *errmsg;
+
+      datasec = bfd_get_section_by_name (abfd, ".sdata");
+
+      if (datasec == NULL || datasec->reloc_count == 0)
+       continue;
+
+      relsec = bfd_get_section_by_name (abfd, ".rel.sdata");
+      ASSERT (relsec != NULL);
+
+      if (! bfd_mips_ecoff_create_embedded_relocs (abfd, &link_info,
+                                                  datasec, relsec,
+                                                  &errmsg))
+       {
+         if (errmsg == NULL)
+           einfo ("%B%X: can not create runtime reloc information: %E",
+                  abfd);
+         else
+           einfo ("%X%B: can not create runtime reloc information: %s",
+                  abfd, errmsg);
+       }
+    }
+}
+
+static char *
+gldmipsidt_get_script(isfile)
+     int *isfile;
+{                           
+  *isfile = 0;
+
+  if (link_info.relocateable == true && config.build_constructors == true)
+    return
+concat(
+"OUTPUT_FORMAT(\"ecoff-bigmips\", \"ecoff-bigmips\",\n\
+             \"ecoff-littlemips\")\n\
+ SEARCH_DIR(/usr/local/mips-idt-ecoff/lib);\n\
+ENTRY(start)\n\
+SECTIONS\n\
+{\n\
+  .text : {\n\
+    ;\n\
+    *(.init)\n\
+    ;\n\
+    *(.text)\n\
+    *(.rel.sdata)\n\
+    *(.fini)\n\
+    ;\n\
+    ;\n\
+  }\n\
+ ","  .rdata : {\n\
+    *(.rdata)\n\
+  }\n\
+  .data : {\n\
+    *(.data)\n\
+    CONSTRUCTORS\n\
+  }\n\
+  .lit8 : {\n\
+    *(.lit8)\n\
+  }\n\
+  .lit4 : {\n\
+    *(.lit4)\n\
+  }\n\
+ ","  .sdata : {\n\
+    *(.sdata)\n\
+  }\n\
+  .sbss : {\n\
+    *(.sbss)\n\
+    *(.scommon)\n\
+  }\n\
+  .bss : {\n\
+    *(.bss)\n\
+    *(COMMON)\n\
+  }\n\
+}\n\n", NULL)
+  ; else if (link_info.relocateable == true) return
+"OUTPUT_FORMAT(\"ecoff-bigmips\", \"ecoff-bigmips\",\n\
+             \"ecoff-littlemips\")\n\
+ SEARCH_DIR(/usr/local/mips-idt-ecoff/lib);\n\
+ENTRY(start)\n\
+SECTIONS\n\
+{\n\
+  .text : {\n\
+    ;\n\
+    *(.init)\n\
+    ;\n\
+    *(.text)\n\
+    *(.rel.sdata)\n\
+    *(.fini)\n\
+    ;\n\
+    ;\n\
+  }\n\
+  .rdata : {\n\
+    *(.rdata)\n\
+  }\n\
+  .data : {\n\
+    *(.data)\n\
+  }\n\
+  .lit8 : {\n\
+    *(.lit8)\n\
+  }\n\
+  .lit4 : {\n\
+    *(.lit4)\n\
+  }\n\
+  .sdata : {\n\
+    *(.sdata)\n\
+  }\n\
+  .sbss : {\n\
+    *(.sbss)\n\
+    *(.scommon)\n\
+  }\n\
+  .bss : {\n\
+    *(.bss)\n\
+    *(COMMON)\n\
+  }\n\
+}\n\n"
+  ; else if (!config.text_read_only) return
+concat(
+"OUTPUT_FORMAT(\"ecoff-bigmips\", \"ecoff-bigmips\",\n\
+             \"ecoff-littlemips\")\n\
+ SEARCH_DIR(/usr/local/mips-idt-ecoff/lib);\n\
+ENTRY(start)\n\
+SECTIONS\n\
+{\n\
+  . = 0xa0012000;\n\
+  .text : {\n\
+     _ftext = . ;\n\
+    *(.init)\n\
+     eprol  =  .;\n\
+    *(.text)\n\
+    PROVIDE (__runtime_reloc_start = .);\n\
+    *(.rel.sdata)\n\
+    PROVIDE (__runtime_reloc_stop = .);\n\
+    *(.fini)\n\
+     etext  =  .;\n\
+     _etext  =  .;\n\
+","  }\n\
+  . = .;\n\
+  .rdata : {\n\
+    *(.rdata)\n\
+  }\n\
+   _fdata = ALIGN(16);\n\
+  .data : {\n\
+    *(.data)\n\
+    CONSTRUCTORS\n\
+  }\n\
+   _gp = ALIGN(16) + 0x8000;\n\
+  .lit8 : {\n\
+    *(.lit8)\n\
+  }\n\
+  .lit4 : {\n\
+    *(.lit4)\n\
+  }\n\
+  .sdata : {\n\
+    *(.sdata)\n\
+  }\n\
+","   edata  =  .;\n\
+   _edata  =  .;\n\
+   _fbss = .;\n\
+  .sbss : {\n\
+    *(.sbss)\n\
+    *(.scommon)\n\
+  }\n\
+  .bss : {\n\
+    *(.bss)\n\
+    *(COMMON)\n\
+  }\n\
+   end = .;\n\
+   _end = .;\n\
+}\n\n"
+, NULL)
+  ; else if (!config.magic_demand_paged) return
+concat (
+"OUTPUT_FORMAT(\"ecoff-bigmips\", \"ecoff-bigmips\",\n\
+             \"ecoff-littlemips\")\n\
+ SEARCH_DIR(/usr/local/mips-idt-ecoff/lib);\n\
+ENTRY(start)\n\
+SECTIONS\n\
+{\n\
+  . = 0xa0012000;\n\
+  .text : {\n\
+     _ftext = . ;\n\
+    *(.init)\n\
+     eprol  =  .;\n\
+    *(.text)\n\
+    PROVIDE (__runtime_reloc_start = .);\n\
+    *(.rel.sdata)\n\
+    PROVIDE (__runtime_reloc_stop = .);\n\
+    *(.fini)\n\
+     etext  =  .;\n\
+     _etext  =  .;\n\
+ ","  }\n\
+  . = .;\n\
+  .rdata : {\n\
+    *(.rdata)\n\
+  }\n\
+   _fdata = ALIGN(16);\n\
+  .data : {\n\
+    *(.data)\n\
+    CONSTRUCTORS\n\
+  }\n\
+   _gp = ALIGN(16) + 0x8000;\n\
+  .lit8 : {\n\
+    *(.lit8)\n\
+ ","  }\n\
+  .lit4 : {\n\
+    *(.lit4)\n\
+  }\n\
+  .sdata : {\n\
+    *(.sdata)\n\
+  }\n\
+   edata  =  .;\n\
+   _edata  =  .;\n\
+   _fbss = .;\n\
+  .sbss : {\n\
+    *(.sbss)\n\
+    *(.scommon)\n\
+ ","  }\n\
+  .bss : {\n\
+    *(.bss)\n\
+    *(COMMON)\n\
+  }\n\
+   end = .;\n\
+   _end = .;\n\
+}\n\n"
+, NULL)
+  ; else return
+concat (
+"OUTPUT_FORMAT(\"ecoff-bigmips\", \"ecoff-bigmips\",\n\
+             \"ecoff-littlemips\")\n\
+ SEARCH_DIR(/usr/local/mips-idt-ecoff/lib);\n\
+ENTRY(start)\n\
+SECTIONS\n\
+{\n\
+  . = 0xa0012000;\n\
+  .text : {\n\
+     _ftext = . ;\n\
+    *(.init)\n\
+     eprol  =  .;\n\
+    *(.text)\n\
+    PROVIDE (__runtime_reloc_start = .);\n\
+    *(.rel.sdata)\n\
+    PROVIDE (__runtime_reloc_stop = .);\n\
+    *(.fini)\n\
+     etext  =  .;\n\
+     _etext  =  .;\n\
+ ","  }\n\
+  . = .;\n\
+  .rdata : {\n\
+    *(.rdata)\n\
+  }\n\
+   _fdata = ALIGN(16);\n\
+  .data : {\n\
+    *(.data)\n\
+    CONSTRUCTORS\n\
+  }\n\
+   _gp = ALIGN(16) + 0x8000;\n\
+  .lit8 : {\n\
+    *(.lit8)\n\
+  }\n\
+  .lit4 : {\n\
+    *(.lit4)\n\
+ ","  }\n\
+  .sdata : {\n\
+    *(.sdata)\n\
+  }\n\
+   edata  =  .;\n\
+   _edata  =  .;\n\
+   _fbss = .;\n\
+  .sbss : {\n\
+    *(.sbss)\n\
+    *(.scommon)\n\
+  }\n\
+  .bss : {\n\
+    *(.bss)\n\
+    *(COMMON)\n\
+  }\n\
+   end = .;\n\
+   _end = .;\n\
+}\n\n"
+, NULL)
+; }
+
+struct ld_emulation_xfer_struct ld_mipsidt_emulation = 
+{
+  gldmipsidt_before_parse,
+  syslib_default,
+  hll_default,
+  after_parse_default,
+  gldmipsidt_after_open,
+  gldmipsidt_after_allocation,
+  set_output_arch_default,
+  ldemul_default_target,
+  before_allocation_default,
+  gldmipsidt_get_script,
+  "mipsidt",
+  "ecoff-bigmips"
+};
index d268e830f8e13cce574460bc3e79b53d8c0d29c9..0e1361c1d0c399b634675278f1723f24a4cbde99 100644 (file)
@@ -76,7 +76,7 @@ MAKEINFO = makeinfo
 TEXI2DVI = texi2dvi
 RANLIB = ranlib
 CC_FOR_BUILD={CC}
-BISON = bison -y
+BISON = byacc
 LEX = flex
 
 # Seach path to override the default search path for -lfoo libraries.
@@ -178,20 +178,17 @@ ALL_CFLAGS={INCLUDES} {HDEFINES} {TDEFINES} {CDEFINES} {CFLAGS}
 BFDLIB = ::bfd:libbfd.o
 LIBIBERTY = ::libiberty:libiberty.o
 
-ALL_EMULATIONS = "{o}"em_lnk960.c.o "{o}"em_sun3.c.o "{o}"em_i386aout.c.o "{o}"em_go32.c.o "{o}"em_vsta.c.o \Option-d
-       "{o}"em_m88kbcs.c.o "{o}"em_a29k.c.o "{o}"em_news.c.o "{o}"em_hp300bsd.c.o "{o}"em_hp3hpux.c.o \Option-d
-       "{o}"em_h8300.c.o "{o}"em_h8300h.c.o "{o}"em_ebmon29k.c.o "{o}"em_sun4.c.o "{o}"em_gld960.c.o \Option-d
-       "{o}"em_m68kcoff.c.o "{o}"em_st2000.c.o "{o}"em_sa29200.c.o "{o}"em_i386mach.c.o \Option-d
-       "{o}"em_vanilla.c.o "{o}"em_i386coff.c.o "{o}"em_z8ksim.c.o "{o}"em_mipslit.c.o "{o}"em_i386bsd.c.o \Option-d
-       "{o}"em_mipsbig.c.o "{o}"em_mipsbsd.c.o "{o}"em_mipsidt.c.o "{o}"em_vax.c.o "{o}"em_h8500.c.o \Option-d
-       "{o}"em_hppaosf.c.o "{o}"em_mipsidtl.c.o "{o}"em_sh.c.o "{o}"em_elf_i386.c.o "{o}"em_alpha.c.o \Option-d
-       "{o}"em_i386lynx.c.o "{o}"em_m68klynx.c.o "{o}"em_sparclynx.c.o "{o}"em_coff_sparc.c.o \Option-d
-       "{o}"em_delta68.c.o \Option-d
+ALL_EMULATIONS = "{o}"elnk960.c.o "{o}"esun3.c.o "{o}"ei386aout.c.o "{o}"ego32.c.o "{o}"evsta.c.o \Option-d
+       "{o}"em88kbcs.c.o "{o}"ea29k.c.o "{o}"enews.c.o "{o}"ehp300bsd.c.o "{o}"ehp3hpux.c.o \Option-d
+       "{o}"eh8300.c.o "{o}"eh8300h.c.o "{o}"eebmon29k.c.o "{o}"esun4.c.o "{o}"egld960.c.o \Option-d
+       "{o}"em68kcoff.c.o "{o}"est2000.c.o "{o}"esa29200.c.o "{o}"ei386mach.c.o \Option-d
+       "{o}"evanilla.c.o "{o}"ei386coff.c.o "{o}"ez8ksim.c.o "{o}"emipslit.c.o "{o}"ei386bsd.c.o \Option-d
+       "{o}"emipsbig.c.o "{o}"emipsbsd.c.o "{o}"emipsidt.c.o "{o}"evax.c.o "{o}"eh8500.c.o \Option-d
+       "{o}"ehppaosf.c.o "{o}"emipsidtl.c.o "{o}"esh.c.o "{o}"eelf_i386.c.o "{o}"ealpha.c.o \Option-d
+       "{o}"ei386lynx.c.o "{o}"em68klynx.c.o "{o}"esparclynx.c.o "{o}"ecoff_sparc.c.o \Option-d
+       "{o}"edelta68.c.o \Option-d
        {OTHER_EMULATIONS}
 
-# This is now set by configure.in.
-EMULATION_OFILES = "{o}"em_mipsidt.c.o
-
 CFILES = "{s}"ldctor.c "{s}"ldemul.c "{s}"ldexp.c "{s}"ldfile.c "{s}"ldlang.c \Option-d
        ldmain.c "{s}"ldmisc.c "{s}"ldver.c "{s}"ldwrite.c "{s}"lexsup.c \Option-d
        mri.c
@@ -208,22 +205,25 @@ OFILES = "{o}"ldgram.c.o "{o}"ldlex.c.o "{o}"lexsup.c.o "{o}"ldlang.c.o "{o}"mri
        "{o}"ldwrite.c.o "{o}"ldexp.c.o  "{o}"ldemul.c.o "{o}"ldver.c.o "{o}"ldmisc.c.o \Option-d
        "{o}"ldfile.c.o {EMULATION_OFILES}
 
-LINTSOURCES = {CFILES} {GENERATED_CFILES} em_\Option-x.c
+LINTSOURCES = {CFILES} {GENERATED_CFILES} e\Option-x.c
 
-STAGESTUFF = "{o}"\Option-x.c.o ldscripts:\Option-x em_\Option-x.c {GENERATED_CFILES} {GENERATED_HFILES}
+STAGESTUFF = "{o}"\Option-x.c.o ldscripts:\Option-x e\Option-x.c {GENERATED_CFILES} {GENERATED_HFILES}
 
 info \Option-f  ld.info
 # .PHONY \Option-f  info
 
-:ldgram.h :ldgram.c \Option-f  "{s}"ldgram.y
+:ldgram.c \Option-f "{s}"ldgram.y
        {BISON} {BISONFLAGS} -d "{srcdir}"ldgram.y
        Rename -y y.tab.c :ldgram.c
        Rename -y y.tab.h :ldgram.h
 
+# Separate from ldgram.c so that a parallel make doesn't try to build
+# both ldgram.c and ldgram.h simultaneously.
+:ldgram.h \Option-f :ldgram.c
+
 # EMUL is the name of a file in the emulparams subdir, without the .sh.
 "{o}"ldmain.c.o \Option-f  "{s}"ldmain.c config.status 
        {CC} {INCLUDES} {HDEFINES} {TDEFINES} {CDEFINES} -d DEFAULT_EMULATION=\Option-d"{EMUL}\Option-d" -d SCRIPTDIR=\Option-d"{scriptdir}\Option-d" {CFLAGS} "{s}"ldmain.c -o "{o}"ldmain.c.o
-       fi
 
 # Use this when flex is working correctly.
 :ldlex.c \Option-f  "{s}"ldlex.l
@@ -234,135 +234,168 @@ info \Option-f  ld.info
 #:ldlex.c \Option-f  "{s}"mpw-ldlex.c
 #      Catenate "{s}"mpw-ldlex.c >:ldlex.c
 
-# These all start with em_ so 'make clean' can find them.
+# These all start with e so 'make clean' can find them.
 
 GENSCRIPTS = {SHELL} "{srcdir}"genscripts.sh {srcdir} {libdir} {host_alias} {target_alias} {EMUL} "{NATIVE_LIB_DIRS}"
 GEN_DEPENDS = "{srcdir}"genscripts.sh
 
-em_sun4.c \Option-f  "{srcdir}"emulparams:sun4.sh \Option-d
+esun4.c \Option-f  "{srcdir}"emulparams:sun4.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} sun4
-em_sun3.c \Option-f  "{srcdir}"emulparams:sun3.sh \Option-d
+esun3.c \Option-f  "{srcdir}"emulparams:sun3.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} sun3
-em_vsta.c \Option-f  "{srcdir}"emulparams:vsta.sh \Option-d
+evsta.c \Option-f  "{srcdir}"emulparams:vsta.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} vsta
-em_go32.c \Option-f  "{srcdir}"emulparams:go32.sh \Option-d
+ego32.c \Option-f  "{srcdir}"emulparams:go32.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} go32
-em_news.c \Option-f  "{srcdir}"emulparams:news.sh \Option-d
+enews.c \Option-f  "{srcdir}"emulparams:news.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} news
-em_vax.c \Option-f  "{srcdir}"emulparams:vax.sh \Option-d
+evax.c \Option-f  "{srcdir}"emulparams:vax.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} vax
-em_hp300bsd.c \Option-f  "{srcdir}"emulparams:hp300bsd.sh \Option-d
+ehp300bsd.c \Option-f  "{srcdir}"emulparams:hp300bsd.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} hp300bsd
-em_hp3hpux.c \Option-f  "{srcdir}"emulparams:hp3hpux.sh \Option-d
+ehp3hpux.c \Option-f  "{srcdir}"emulparams:hp3hpux.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} hp3hpux
-em_hppaosf.c \Option-f  "{srcdir}"emulparams:hppaosf.sh \Option-d
+ehppaosf.c \Option-f  "{srcdir}"emulparams:hppaosf.sh \Option-d
   "{srcdir}"emultempl:hppaosf.em "{srcdir}"scripttempl:hppaosf.sc {GEN_DEPENDS}
        {GENSCRIPTS} hppaosf
-em_i386aout.c \Option-f  "{srcdir}"emulparams:i386aout.sh \Option-d
+ei386aout.c \Option-f  "{srcdir}"emulparams:i386aout.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} i386aout
-em_i386mach.c \Option-f  "{srcdir}"emulparams:i386mach.sh \Option-d
+ei386mach.c \Option-f  "{srcdir}"emulparams:i386mach.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} i386mach
-em_ebmon29k.c \Option-f  "{srcdir}"emulparams:ebmon29k.sh \Option-d
+eebmon29k.c \Option-f  "{srcdir}"emulparams:ebmon29k.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:ebmon29k.sc {GEN_DEPENDS}
        {GENSCRIPTS} ebmon29k
-em_sa29200.c \Option-f  "{srcdir}"emulparams:sa29200.sh \Option-d
+esa29200.c \Option-f  "{srcdir}"emulparams:sa29200.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sa29200.sc {GEN_DEPENDS}
        {GENSCRIPTS} sa29200
-em_a29k.c \Option-f  "{srcdir}"emulparams:a29k.sh \Option-d
+ea29k.c \Option-f  "{srcdir}"emulparams:a29k.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:a29k.sc {GEN_DEPENDS}
        {GENSCRIPTS} a29k
-em_m88kbcs.c \Option-f  "{srcdir}"emulparams:m88kbcs.sh \Option-d
+em88kbcs.c \Option-f  "{srcdir}"emulparams:m88kbcs.sh \Option-d
   "{srcdir}"emultempl:m88kbcs.em "{srcdir}"scripttempl:m88kbcs.sc {GEN_DEPENDS}
        {GENSCRIPTS} m88kbcs
-em_h8300.c \Option-f  "{srcdir}"emulparams:h8300.sh \Option-d
+eh8300.c \Option-f  "{srcdir}"emulparams:h8300.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:h8300.sc {GEN_DEPENDS}
        {GENSCRIPTS} h8300
-em_h8300h.c \Option-f  "{srcdir}"emulparams:h8300h.sh \Option-d
+eh8300h.c \Option-f  "{srcdir}"emulparams:h8300h.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:h8300h.sc {GEN_DEPENDS}
        {GENSCRIPTS} h8300h
-em_h8500.c \Option-f  "{srcdir}"emulparams:h8500.sh \Option-d
+eh8500.c \Option-f  "{srcdir}"emulparams:h8500.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:h8500.sc {GEN_DEPENDS}
        {GENSCRIPTS} h8500
-em_sh.c \Option-f  "{srcdir}"emulparams:sh.sh \Option-d
+esh.c \Option-f  "{srcdir}"emulparams:sh.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sh.sc {GEN_DEPENDS}
        {GENSCRIPTS} sh
-em_st2000.c \Option-f  "{srcdir}"emulparams:st2000.sh \Option-d
+est2000.c \Option-f  "{srcdir}"emulparams:st2000.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:st2000.sc {GEN_DEPENDS}
        {GENSCRIPTS} st2000
-em_z8ksim.c \Option-f  "{srcdir}"emulparams:z8ksim.sh \Option-d
+ez8ksim.c \Option-f  "{srcdir}"emulparams:z8ksim.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:z8ksim.sc {GEN_DEPENDS}
        {GENSCRIPTS} z8ksim
-em_vanilla.c \Option-f  "{srcdir}"emulparams:vanilla.sh \Option-d
+evanilla.c \Option-f  "{srcdir}"emulparams:vanilla.sh \Option-d
   "{srcdir}"emultempl:vanilla.em "{srcdir}"scripttempl:vanilla.sc {GEN_DEPENDS}
        {GENSCRIPTS} vanilla
-em_lnk960.c \Option-f  "{srcdir}"emulparams:lnk960.sh \Option-d
+elnk960.c \Option-f  "{srcdir}"emulparams:lnk960.sh \Option-d
   "{srcdir}"emultempl:lnk960.em "{srcdir}"scripttempl:i960.sc {GEN_DEPENDS}
        {GENSCRIPTS} lnk960
-em_gld960.c \Option-f  "{srcdir}"emulparams:gld960.sh \Option-d
+egld960.c \Option-f  "{srcdir}"emulparams:gld960.sh \Option-d
   "{srcdir}"emultempl:gld960.em "{srcdir}"scripttempl:i960.sc {GEN_DEPENDS}
        {GENSCRIPTS} gld960
-em_m68kcoff.c \Option-f  "{srcdir}"emulparams:m68kcoff.sh \Option-d
+em68kcoff.c \Option-f  "{srcdir}"emulparams:m68kcoff.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:m68kcoff.sc {GEN_DEPENDS}
        {GENSCRIPTS} m68kcoff
-em_delta68.c \Option-f  "{srcdir}"emulparams:delta68.sh \Option-d
+edelta68.c \Option-f  "{srcdir}"emulparams:delta68.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:delta68.sc {GEN_DEPENDS}
        {GENSCRIPTS} delta68
-em_m68klynx.c \Option-f  "{srcdir}"emulparams:m68klynx.sh \Option-d
+em68klynx.c \Option-f  "{srcdir}"emulparams:m68klynx.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:m68kcoff.sc {GEN_DEPENDS}
        {GENSCRIPTS} m68klynx
-em_i386coff.c \Option-f  "{srcdir}"emulparams:i386coff.sh \Option-d
+ei386coff.c \Option-f  "{srcdir}"emulparams:i386coff.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:i386coff.sc {GEN_DEPENDS}
        {GENSCRIPTS} i386coff
-em_i386lynx.c \Option-f  "{srcdir}"emulparams:i386lynx.sh \Option-d
+ei386lynx.c \Option-f  "{srcdir}"emulparams:i386lynx.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:i386coff.sc {GEN_DEPENDS}
        {GENSCRIPTS} i386lynx
-em_sparclynx.c \Option-f  "{srcdir}"emulparams:sparclynx.sh \Option-d
+esparclynx.c \Option-f  "{srcdir}"emulparams:sparclynx.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sparccoff.sc {GEN_DEPENDS}
        {GENSCRIPTS} sparclynx
-em_mipslit.c \Option-f   "{srcdir}"emulparams:mipslit.sh \Option-d
+emipslit.c \Option-f   "{srcdir}"emulparams:mipslit.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
        {GENSCRIPTS} mipslit
-em_i386bsd.c \Option-f  "{srcdir}"emulparams:i386bsd.sh \Option-d
+ei386bsd.c \Option-f  "{srcdir}"emulparams:i386bsd.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} i386bsd
-em_mipsbig.c \Option-f   "{srcdir}"emulparams:mipsbig.sh \Option-d
+emipsbig.c \Option-f   "{srcdir}"emulparams:mipsbig.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
        {GENSCRIPTS} mipsbig
-em_mipsbsd.c \Option-f  "{srcdir}"emulparams:mipsbsd.sh \Option-d
+emipsbsd.c \Option-f  "{srcdir}"emulparams:mipsbsd.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:aout.sc {GEN_DEPENDS}
        {GENSCRIPTS} mipsbsd
-em_mipsidt.c \Option-f  "{srcdir}"emulparams:mipsidt.sh \Option-d
+emipsidt.c \Option-f  "{srcdir}"emulparams:mipsidt.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
        {GENSCRIPTS} mipsidt
-em_mipsidtl.c \Option-f  "{srcdir}"emulparams:mipsidtl.sh \Option-d
+emipsidtl.c \Option-f  "{srcdir}"emulparams:mipsidtl.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:mips.sc {GEN_DEPENDS}
        {GENSCRIPTS} mipsidtl
-em_elf_i386.c \Option-f  "{srcdir}"emulparams:elf_i386.sh \Option-d
+eelf_i386.c \Option-f  "{srcdir}"emulparams:elf_i386.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:elf.sc {GEN_DEPENDS}
        {GENSCRIPTS} elf_i386
-em_elf32mipb.c \Option-f  "{srcdir}"emulparams:elf32mipb.sh \Option-d
+eelf32mipb.c \Option-f  "{srcdir}"emulparams:elf32mipb.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:elf.sc {GEN_DEPENDS}
        {GENSCRIPTS} elf32mipb
-em_alpha.c \Option-f  "{srcdir}"emulparams:alpha.sh \Option-d
+ealpha.c \Option-f  "{srcdir}"emulparams:alpha.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:alpha.sc {GEN_DEPENDS}
        {GENSCRIPTS} alpha
-em_coff_sparc.c \Option-f  "{srcdir}"emulparams:coff_sparc.sh \Option-d
+ecoff_sparc.c \Option-f  "{srcdir}"emulparams:coff_sparc.sh \Option-d
   "{srcdir}"emultempl:generic.em "{srcdir}"scripttempl:sparccoff.sc {GEN_DEPENDS}
        {GENSCRIPTS} coff_sparc
 
-{LD_PROG} \Option-f  {OFILES} {BFDLIB} {LIBIBERTY}
+{LD_PROG} \Option-f  {OFILES} {BFDLIB} {LIBIBERTY} "{o}"Version.r
+       Rez -rd -o {LD_PROG} "{o}"Version.r -append
        Link    {LDFLAGS} -o {LD_PROG} {OFILES} {BFDLIB} {LIBIBERTY} {EXTRALIBS}
 
+"{o}"Version.r \Option-f "{o}"version-stamp
+
+"{o}"version-stamp \Option-f Makefile
+       Delete -i -y "{o}"version.new "{o}"version-stamp
+       Set major `Search 'ld version ' {srcdir}ldver.c | sed -e 's/.*ld version [^0-9]*\([0-9]*\)\.\([0-9]*\)\..*/\1/'`
+       Set minor `Search 'ld version ' {srcdir}ldver.c | sed -e 's/.*ld version [^0-9]*\([0-9]*\)\.\([0-9]*\)\..*/\2/'`
+       Set release 0
+       Echo '/* Version resources. */'                  > "{o}"version.new
+       Echo '#include "SysTypes.r"'                    >> "{o}"version.new
+       Echo ''                                         >> "{o}"version.new
+       Echo "resource 'vers' (1) " `open-brace`        >> "{o}"version.new
+       Echo "  {major},"                               >> "{o}"version.new
+       Echo "  {minor},"                               >> "{o}"version.new
+       Echo "  {release},"                             >> "{o}"version.new
+       Echo '  0,'                                     >> "{o}"version.new
+       Echo '  verUs,'                                 >> "{o}"version.new
+       Echo '  "{version}",'                           >> "{o}"version.new
+       Echo '  "{version} (c) 1986-95 FSF, Inc. "'     >> "{o}"version.new
+       Echo '};'                                       >> "{o}"version.new
+       Echo ''                                         >> "{o}"version.new
+       Echo "resource 'vers' (2, purgeable) " `open-brace`  >> "{o}"version.new
+       Echo "  {major},"                               >> "{o}"version.new
+       Echo "  {minor},"                               >> "{o}"version.new
+       Echo "  {release},"                             >> "{o}"version.new
+       Echo '  0,'                                     >> "{o}"version.new
+       Echo '  verUs,'                                 >> "{o}"version.new
+       Echo '  "{version}",'                           >> "{o}"version.new
+       Echo '  "GNU LD for MPW"'                       >> "{o}"version.new
+       Echo '};'                                       >> "{o}"version.new
+       MoveIfChange "{o}"version.new "{o}"Version.r
+       Echo ' ' > "{o}"version-stamp
+
 # The generated emulation files mostly have the same dependencies.
 {EMULATION_OFILES} \Option-f  ::bfd:bfd.h ::bfd:sysdep.h "{INCDIR}":bfdlink.h \Option-d
   "{s}"ld.h "{s}"ldmain.h "{s}"ldemul.h "{s}"ldfile.h "{s}"ldmisc.h "{s}"ldexp.h "{s}"ldlang.h "{s}"config.h "{s}"ldctor.h