Initial revision
authorSteve Chamberlain <steve@cygnus>
Tue, 14 May 1991 17:32:59 +0000 (17:32 +0000)
committerSteve Chamberlain <steve@cygnus>
Tue, 14 May 1991 17:32:59 +0000 (17:32 +0000)
19 files changed:
ld/ldgld.c [new file with mode: 0755]
ld/ldgld.script [new file with mode: 0755]
ld/ldgld68k.c [new file with mode: 0755]
ld/ldgld68k.script [new file with mode: 0755]
ld/ldgld68kUr.script [new file with mode: 0755]
ld/ldgld68kr.script [new file with mode: 0755]
ld/ldgld960.c [new file with mode: 0755]
ld/ldgld960.script [new file with mode: 0755]
ld/ldgldUr.script [new file with mode: 0755]
ld/ldgldm88kbcs.c [new file with mode: 0755]
ld/ldgldm88kbcs.script [new file with mode: 0755]
ld/ldgldm88kbcsUr.script [new file with mode: 0755]
ld/ldgldm88kbcsr.script [new file with mode: 0755]
ld/ldgldr.script [new file with mode: 0755]
ld/ldlnk960.c [new file with mode: 0755]
ld/ldlnk960.script [new file with mode: 0755]
ld/ldlnk960r.script [new file with mode: 0755]
ld/ldvanilla.c [new file with mode: 0755]
ld/ldver.c [new file with mode: 0644]

diff --git a/ld/ldgld.c b/ld/ldgld.c
new file mode 100755 (executable)
index 0000000..e51d073
--- /dev/null
@@ -0,0 +1,145 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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 GLD; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+ *  $Id$ 
+ *
+*/
+
+/* 
+ * emulate the original gld
+ *
+ *  Written by Steve Chamberlain steve@cygnus.com
+ */
+
+
+#include "sysdep.h"
+#include "bfd.h"
+
+
+#include "ld.h"
+#include "config.h"
+#include "ldemul.h"
+#include "ldfile.h"
+#include "ldmisc.h"
+
+extern  boolean lang_float_flag;
+
+
+extern enum bfd_architecture ldfile_output_architecture;
+extern unsigned long ldfile_output_machine;
+extern char *ldfile_output_machine_name;
+
+extern bfd *output_bfd;
+
+
+
+static void gld_before_parse()
+{
+  ldfile_add_library_path("/lib");
+  ldfile_add_library_path("/usr/lib");
+  ldfile_add_library_path("/usr/local/lib/lib");
+}
+
+
+static void 
+gld_after_parse()
+{
+
+}
+
+static void
+gld_after_allocation()
+{
+
+}
+
+static void
+gld_before_allocation()
+{
+
+}
+
+
+static void
+gld_set_output_arch()
+{
+  /* Set the output architecture and machine if possible */
+  bfd_set_arch_mach(output_bfd, ldfile_output_architecture, ldfile_output_machine);
+}
+
+static char *
+gld_choose_target()
+{
+  char *from_outside = getenv(TARGET_ENVIRON);
+  if (from_outside != (char *)NULL)
+    return from_outside;
+  return GLD_TARGET;
+}
+
+static void
+gld_syslib()
+{
+  info("%S SYSLIB ignored\n");
+}
+
+static void
+gld_hll(ignore)
+char  *ignore;
+{
+  info("%S HLL ignored\n");
+}
+
+static char *gld_script = 
+#include "ldgld.x"
+;
+
+static char *gld_script_option_Ur  =  
+#include "ldgldUr.x"
+;
+
+static char *gld_script_option_r  =  
+#include "ldgldr.x"
+;           
+                            
+static char *gld_get_script()
+{                           
+  extern ld_config_type config;
+  if (config.relocateable_output == true &&
+      config.build_constructors == true) {
+    return gld_script_option_Ur;
+  }
+  if (config.relocateable_output) {
+    return gld_script_option_r;
+  }
+       
+  return gld_script;
+}
+struct ld_emulation_xfer_struct ld_gld_emulation = 
+{
+  gld_before_parse,
+  gld_syslib,
+  gld_hll,
+  gld_after_parse,
+  gld_after_allocation,
+  gld_set_output_arch,
+  gld_choose_target,
+  gld_before_allocation,
+  gld_get_script,
+};
+
diff --git a/ld/ldgld.script b/ld/ldgld.script
new file mode 100755 (executable)
index 0000000..2f402c1
--- /dev/null
@@ -0,0 +1,28 @@
+OUTPUT_ARCH(sparc)
+OUTPUT_FORMAT("a.out-sunos-big")
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+__DYNAMIC = 0;                                 
+SECTIONS                               
+{                                      
+  .text 0x2020 BLOCK(0x2000):          
+  {                                    
+   CREATE_OBJECT_SYMBOLS               
+    *(.text)                           
+    _etext = ALIGN( 0x2000);           
+    }                                          
+  .data  ALIGN(0x2000)  :              
+  {                                    
+    *(.data)                           
+      _edata  =  .;                    
+  }                                    
+  .bss   SIZEOF(.data) + ADDR(.data) : 
+  {                                    
+   *(.bss)                             
+   [COMMON]                            
+     _end = .;                         
+    }                                  
+}
+
+
diff --git a/ld/ldgld68k.c b/ld/ldgld68k.c
new file mode 100755 (executable)
index 0000000..f34e79d
--- /dev/null
@@ -0,0 +1,143 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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 GLD; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+ *  $Id:#
+*/
+
+/* 
+ * emulate the original gld running on a 68k system
+ *
+ *  Written by Steve Chamberlain steve@cygnus.com
+ */
+
+
+#include "sysdep.h"
+#include "bfd.h"
+
+#include "ld.h"
+#include "config.h"
+#include "ldemul.h"
+#include "ldfile.h"
+#include "ldmisc.h"
+
+extern  boolean lang_float_flag;
+
+
+extern enum bfd_architecture ldfile_output_architecture;
+extern unsigned long ldfile_output_machine;
+extern char *ldfile_output_machine_name;
+
+extern bfd *output_bfd;
+
+
+
+static void gld68k_before_parse()
+{
+  ldfile_add_library_path("/lib");
+  ldfile_add_library_path("/usr/lib");
+  ldfile_add_library_path("/usr/local/lib/lib");
+  ldfile_output_architecture = bfd_arch_m68k;
+}
+
+
+static void 
+gld68k_after_parse()
+{
+
+}
+
+static void
+gld68k_after_allocation()
+{
+
+}
+
+static void
+gld68k_before_allocation()
+{
+
+}
+
+
+static void
+gld68k_set_output_arch()
+{
+  /* Set the output architecture and machine if possible */
+  unsigned long  machine = 0;
+  bfd_set_arch_mach(output_bfd, ldfile_output_architecture, machine);
+}
+
+static char *
+gld68k_choose_target()
+{
+  char *from_outside = getenv(TARGET_ENVIRON);
+  if (from_outside != (char *)NULL)
+    return from_outside;
+  return GLD68K_TARGET;
+}
+
+static void
+gld68k_syslib()
+{
+  info("%S SYSLIB ignored\n");
+}
+
+static void
+gld68k_hll(ignore)
+char  *ignore;
+{
+  info("%S HLL ignored\n");
+}
+
+static char *gld68k_script  =  
+#include "ldgld68k.x"
+;
+
+static char *gld68k_script_option_Ur  =  
+#include "ldgld68kUr.x"
+;
+static char *gld68k_script_option_r  =  
+#include "ldgld68kr.x"
+;                           
+static char *gld68k_get_script()
+{                           
+  extern ld_config_type config;
+  if (config.relocateable_output == true &&
+      config.build_constructors == true) {
+    return gld68k_script_option_Ur;
+  }
+  if (config.relocateable_output) {
+    return gld68k_script_option_r;
+  }
+       
+  return gld68k_script;
+}
+struct ld_emulation_xfer_struct ld_gld68k_emulation = 
+{
+  gld68k_before_parse,
+  gld68k_syslib,
+  gld68k_hll,
+  gld68k_after_parse,
+  gld68k_after_allocation,
+  gld68k_set_output_arch,
+  gld68k_choose_target,
+  gld68k_before_allocation,
+  gld68k_get_script,
+};
+
diff --git a/ld/ldgld68k.script b/ld/ldgld68k.script
new file mode 100755 (executable)
index 0000000..be91d91
--- /dev/null
@@ -0,0 +1,28 @@
+OUTPUT_FORMAT("a.out-sunos-big")
+OUTPUT_ARCH(m68k)
+
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+__DYNAMIC  =  0;                               
+SECTIONS                               
+{                                      
+  .text 0x2020 BLOCK(0x2000):          
+  {                                    
+   CREATE_OBJECT_SYMBOLS               
+    *(.text)                           
+    _etext  =  ALIGN( 0x2000);         
+    }                                          
+  .data  ALIGN(0x20000)  :             
+  {                                    
+    *(.data)                           
+      _edata  =  .;                    
+  }                                    
+  .bss   SIZEOF(.data) + ADDR(.data) : 
+  {                                    
+   *(.bss)                             
+   [COMMON]                            
+     _end = .;                         
+    }                                  
+}
+
diff --git a/ld/ldgld68kUr.script b/ld/ldgld68kUr.script
new file mode 100755 (executable)
index 0000000..aa89c6a
--- /dev/null
@@ -0,0 +1,21 @@
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+SECTIONS                               
+{                                      
+  .text 0:                             
+    {                                  
+      CREATE_OBJECT_SYMBOLS                
+       *(.text)                                
+       }                                       
+  .data SIZEOF(.text) + ADDR(.text) :  
+    {                                  
+      *(.data)                                 
+    }                                  
+  .bss SIZEOF(.data) + ADDR(.data) :   
+    {                                  
+      *(.bss)                          
+       [COMMON]                                
+       }                                       
+}                                      
+
diff --git a/ld/ldgld68kr.script b/ld/ldgld68kr.script
new file mode 100755 (executable)
index 0000000..8cbc9dc
--- /dev/null
@@ -0,0 +1,22 @@
+
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+SECTIONS                               
+{                                      
+ .text 0:                              
+ {                                     
+ CREATE_OBJECT_SYMBOLS    
+ *(.text)                              
+ }                                     
+ .data SIZEOF(.text) + ADDR(.text) :   
+ {                                     
+ *(.data)                              
+ }                                     
+ .bss SIZEOF(.data) + ADDR(.data) :    
+ {                                     
+ *(.bss)                               
+ [COMMON]                              
+ }                                     
+}                                      
+
diff --git a/ld/ldgld960.c b/ld/ldgld960.c
new file mode 100755 (executable)
index 0000000..7e7e6e0
--- /dev/null
@@ -0,0 +1,171 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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 GLD; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+   $Id$ 
+*/
+
+/* 
+ * emulate the Intels port of  gld
+ */
+
+
+#include "sysdep.h"
+#include "bfd.h"
+
+
+#include "ld.h"
+#include "config.h"
+#include "ldemul.h"
+#include "ldfile.h"
+#include "ldmisc.h"
+
+
+/* IMPORTS */
+extern char *output_filename;
+extern  boolean lang_float_flag;
+
+
+extern enum bfd_architecture ldfile_output_architecture;
+extern unsigned long ldfile_output_machine;
+extern char *ldfile_output_machine_name;
+
+extern bfd *output_bfd;
+
+
+
+#ifdef GNU960
+
+static void
+gld960_before_parse()
+{
+  static char *env_variables[] = { "G960LIB", "G960BASE", 0 };
+  char **p;
+  char *env ;
+
+  for ( p = env_variables; *p; p++ ){
+    env =  (char *) getenv(*p);
+    if (env) {
+      ldfile_add_library_path(concat(env,"/lib/libbout",""));
+    }
+  }
+  ldfile_output_architecture = bfd_arch_i960;
+}
+
+#else  /* not GNU960 */
+
+static void gld960_before_parse()
+{
+  char *env ;
+  env =  getenv("G960LIB");
+  if (env) {
+    ldfile_add_library_path(env);
+  }
+  env = getenv("G960BASE");
+  if (env) {
+    ldfile_add_library_path(concat(env,"/lib",""));
+  }
+  ldfile_output_architecture = bfd_arch_i960;
+}
+
+#endif /* GNU960 */
+
+
+static void 
+gld960_after_parse()
+{
+
+}
+
+static void
+gld960_after_allocation()
+{
+
+}
+
+static void
+gld960_before_allocation()
+{
+
+}
+
+
+static void
+gld960_set_output_arch()
+{
+  /* Set the output architecture and machine if possible */
+  unsigned long  machine = 0;
+  bfd_set_arch_mach(output_bfd, ldfile_output_architecture, machine);
+}
+
+static char *
+gld960_choose_target()
+{
+#ifdef GNU960
+
+  output_filename = "b.out";
+  return bfd_make_targ_name(BFD_BOUT_FORMAT,HOST_BYTE_ORDER_BIG_P);
+
+#else
+
+  char *from_outside = getenv(TARGET_ENVIRON);
+  output_filename = "b.out";
+
+  if (from_outside != (char *)NULL)
+    return from_outside;
+  return GLD960_TARGET;
+
+#endif
+}
+
+static void
+gld960_syslib()
+{
+  info("%S SYSLIB ignored\n");
+}
+
+static void
+gld960_hll()
+{
+  info("%S HLL ignored\n");
+}
+
+
+static char *script = 
+#include "ldgld960.x"
+;
+
+
+static char *
+gld960_get_script()
+{
+return script;
+}
+
+struct ld_emulation_xfer_struct ld_gld960_emulation = 
+{
+  gld960_before_parse,
+  gld960_syslib,
+  gld960_hll,
+  gld960_after_parse,
+  gld960_after_allocation,
+  gld960_set_output_arch,
+  gld960_choose_target,
+  gld960_before_allocation,
+  gld960_get_script,
+};
diff --git a/ld/ldgld960.script b/ld/ldgld960.script
new file mode 100755 (executable)
index 0000000..1c40a73
--- /dev/null
@@ -0,0 +1,23 @@
+SECTIONS 
+{ 
+  .text : 
+  { 
+   CREATE_OBJECT_SYMBOLS 
+    *(.text) 
+      _etext = .;
+    }  
+  .data  SIZEOF(.text) + ADDR(.text):
+  { 
+    *(.data) 
+      _edata = .; 
+    }  
+  .bss   SIZEOF(.data) + ADDR(.data) :    
+  { 
+       _bss_start = .;
+       *(.bss)  
+       [COMMON] 
+       _end = . ; 
+   } 
+} 
diff --git a/ld/ldgldUr.script b/ld/ldgldUr.script
new file mode 100755 (executable)
index 0000000..3871454
--- /dev/null
@@ -0,0 +1,31 @@
+
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+SECTIONS                               
+{                                      
+  .text 0:                             
+  {                                    
+   CREATE_OBJECT_SYMBOLS                
+    *(.text)                           
+    }                                  
+  .data SIZEOF(.text) + ADDR(.text) :  
+  {                                    
+    *(.data)                           
+    ___DTOR_LIST__ = . ;                       
+    LONG((___CTOR_LIST__ - .) / 4 -2)          
+    *(___DTOR_LIST__)                   
+    LONG(0)                             
+    ___CTOR_LIST__ = . ;                       
+    LONG((___end_list__  - .) / 4 -2)     
+    *(___CTOR_LIST__)                   
+    LONG(0)                             
+    ___end_list__  =  . ;                      
+    }                                  
+  .bss SIZEOF(.data) + ADDR(.data) :   
+  {                                    
+    *(.bss)                            
+   [COMMON]                            
+    }                                  
+}                                      
+
diff --git a/ld/ldgldm88kbcs.c b/ld/ldgldm88kbcs.c
new file mode 100755 (executable)
index 0000000..c89b38d
--- /dev/null
@@ -0,0 +1,141 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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 GLD; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+ *  $Id$
+ *
+*/
+
+/* 
+ *  Written by Steve Chamberlain steve@cygnus.com
+ */
+
+
+#include "sysdep.h"
+#include "bfd.h"
+
+
+#include "ld.h"
+#include "config.h"
+#include "ldemul.h"
+#include "ldfile.h"
+#include "ldmisc.h"
+
+extern  boolean lang_float_flag;
+
+
+extern enum bfd_architecture ldfile_output_architecture;
+extern unsigned long ldfile_output_machine;
+extern char *ldfile_output_machine_name;
+
+extern bfd *output_bfd;
+
+
+
+static void gldm88kbcs_before_parse()
+{
+
+}
+
+
+static void 
+gldm88kbcs_after_parse()
+{
+
+}
+
+static void
+gldm88kbcs_after_allocation()
+{
+
+}
+
+static void
+gldm88kbcs_before_allocation()
+{
+
+}
+
+
+static void
+gldm88kbcs_set_output_arch()
+{
+  /* Set the output architecture and machine if possible */
+  bfd_set_arch_mach(output_bfd, ldfile_output_architecture, ldfile_output_machine);
+}
+
+static char *
+gldm88kbcs_choose_target()
+{
+  char *from_outside = getenv(TARGET_ENVIRON);
+  if (from_outside != (char *)NULL)
+    return from_outside;
+  return GLDM88KBCS_TARGET;
+}
+
+static void
+gldm88kbcs_syslib()
+{
+  info("%S SYSLIB ignored\n");
+}
+
+static void
+gldm88kbcs_hll(ignore)
+char  *ignore;
+{
+  info("%S HLL ignored\n");
+}
+
+static char *gldm88kbcs_script = 
+#include "ldgldm88kbcs.x"
+;
+
+static char *gldm88kbcs_script_option_Ur  =  
+#include "ldgldm88kbcsUr.x"
+;
+
+static char *gldm88kbcs_script_option_r  =  
+#include "ldgldm88kbcsr.x"
+;           
+                            
+static char *gldm88kbcs_get_script()
+{                           
+  extern ld_config_type config;
+  if (config.relocateable_output == true &&
+      config.build_constructors == true) {
+    return gldm88kbcs_script_option_Ur;
+  }
+  if (config.relocateable_output) {
+    return gldm88kbcs_script_option_r;
+  }
+       
+  return gldm88kbcs_script;
+}
+struct ld_emulation_xfer_struct ld_gldm88kbcs_emulation = 
+{
+  gldm88kbcs_before_parse,
+  gldm88kbcs_syslib,
+  gldm88kbcs_hll,
+  gldm88kbcs_after_parse,
+  gldm88kbcs_after_allocation,
+  gldm88kbcs_set_output_arch,
+  gldm88kbcs_choose_target,
+  gldm88kbcs_before_allocation,
+  gldm88kbcs_get_script,
+};
+
diff --git a/ld/ldgldm88kbcs.script b/ld/ldgldm88kbcs.script
new file mode 100755 (executable)
index 0000000..ae7cb85
--- /dev/null
@@ -0,0 +1,36 @@
+OUTPUT_FORMAT(m88kbcs)
+OUTPUT_ARCH(m88k)
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+__DYNAMIC = 0;                                 
+SECTIONS                               
+{                                      
+  .text 0x2020 BLOCK(0x2000):          
+  {                                    
+   CREATE_OBJECT_SYMBOLS               
+    *(.text)                           
+    _etext = ALIGN( 0x2000);           
+    }                                          
+  .data  ALIGN(0x2000)  :              
+  {                                    
+    *(.data)                           
+    ___DTOR_LIST__ = . ;                       
+    LONG((___CTOR_LIST__ - .) / 4 -2)          
+    *(___DTOR_LIST__)                   
+    LONG(0)                             
+    ___CTOR_LIST__ = . ;                       
+    LONG((_edata  - .) / 4 -2)            
+    *(___CTOR_LIST__)                   
+    LONG(0)                             
+      _edata  =  .;                    
+  }                                    
+  .bss   SIZEOF(.data) + ADDR(.data) : 
+  {                                    
+   *(.bss)                             
+   [COMMON]                            
+     _end = .;                         
+    }                                  
+}
+
+
diff --git a/ld/ldgldm88kbcsUr.script b/ld/ldgldm88kbcsUr.script
new file mode 100755 (executable)
index 0000000..8d3f12b
--- /dev/null
@@ -0,0 +1,31 @@
+SCRIPT 
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+SECTIONS                               
+{                                      
+  .text 0:                             
+  {                                    
+   CREATE_OBJECT_SYMBOLS                
+    *(.text)                           
+    }                                  
+  .data SIZEOF(.text) + ADDR(.text) :  
+  {                                    
+    *(.data)                           
+    ___DTOR_LIST__ = . ;                       
+    LONG((___CTOR_LIST__ - .) / 4 -2)          
+    *(___DTOR_LIST__)                   
+    LONG(0)                             
+    ___CTOR_LIST__ = . ;                       
+    LONG((___end_list__  - .) / 4 -2)     
+    *(___CTOR_LIST__)                   
+    LONG(0)                             
+    ___end_list__  =  . ;                      
+    }                                  
+  .bss SIZEOF(.data) + ADDR(.data) :   
+  {                                    
+    *(.bss)                            
+   [COMMON]                            
+    }                                  
+}                                      
+ENDSCRIPT 
diff --git a/ld/ldgldm88kbcsr.script b/ld/ldgldm88kbcsr.script
new file mode 100755 (executable)
index 0000000..a3b39fe
--- /dev/null
@@ -0,0 +1,20 @@
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+SECTIONS                               
+{                                      
+  .text 0:                             
+  {                                    
+   CREATE_OBJECT_SYMBOLS                
+    *(.text)                           
+    }                                  
+  .data SIZEOF(.text) + ADDR(.text) :  
+  {                                    
+    *(.data)                           
+    }                                  
+  .bss SIZEOF(.data) + ADDR(.data) :   
+  {                                    
+    *(.bss)                            
+   [COMMON]                            
+    }                                  
+}                                      
diff --git a/ld/ldgldr.script b/ld/ldgldr.script
new file mode 100755 (executable)
index 0000000..a3b39fe
--- /dev/null
@@ -0,0 +1,20 @@
+SEARCH_DIR(/lib)                       
+SEARCH_DIR(/usr/lib)                   
+SEARCH_DIR(/usr/local/lib)             
+SECTIONS                               
+{                                      
+  .text 0:                             
+  {                                    
+   CREATE_OBJECT_SYMBOLS                
+    *(.text)                           
+    }                                  
+  .data SIZEOF(.text) + ADDR(.text) :  
+  {                                    
+    *(.data)                           
+    }                                  
+  .bss SIZEOF(.data) + ADDR(.data) :   
+  {                                    
+    *(.bss)                            
+   [COMMON]                            
+    }                                  
+}                                      
diff --git a/ld/ldlnk960.c b/ld/ldlnk960.c
new file mode 100755 (executable)
index 0000000..f7f7259
--- /dev/null
@@ -0,0 +1,288 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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 GLD; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+   $Id$ 
+*/
+
+/* 
+
+   Written by Steve Chamberlain steve@cygnus.com
+
+ * intel coff loader emulation specific stuff
+ */
+
+#include "sysdep.h"
+#include "bfd.h"
+
+/*#include "archures.h"*/
+#include "ld.h"
+#include "config.h"
+#include "ldemul.h"
+#include "ldmisc.h"
+#include "ldlang.h"
+#include "ldfile.h"
+
+extern  boolean lang_float_flag;
+extern bfd *output_bfd;
+
+
+
+extern enum bfd_architecture ldfile_output_architecture;
+extern unsigned long ldfile_output_machine;
+extern char *ldfile_output_machine_name;
+
+
+typedef struct lib_list {
+  char *name;
+  struct lib_list *next;
+} lib_list_type;
+
+static lib_list_type *hll_list;
+static lib_list_type **hll_list_tail = &hll_list;
+
+static lib_list_type *syslib_list;
+static lib_list_type **syslib_list_tail = &syslib_list;
+
+
+static void
+append(list, name)
+lib_list_type ***list;
+char *name;
+{
+  lib_list_type *element = 
+    (lib_list_type *)(ldmalloc(sizeof(lib_list_type)));
+
+  element->name = name;
+  element->next = (lib_list_type *)NULL;
+  **list = element;
+  *list = &element->next;
+
+}
+
+static boolean had_hll = false;
+static boolean had_hll_name = false;
+static void
+lnk960_hll(name)
+char *name;
+{
+  had_hll = true;
+  if (name != (char *)NULL) {
+    had_hll_name = true;
+    append(&hll_list_tail, name);
+  }
+}
+
+static void 
+lnk960_syslib(name)
+char *name;
+{
+  append(&syslib_list_tail,name);
+}
+
+
+
+#ifdef GNU960
+
+static void 
+lnk960_before_parse()
+{
+  static char *env_variables[] = { "G960LIB", "G960BASE", 0 };
+  char **p;
+  char *env ;
+
+  for ( p = env_variables; *p; p++ ){
+    env =  (char *) getenv(*p);
+    if (env) {
+      ldfile_add_library_path(concat(env,"/lib/libcoff",""));
+    }
+  }
+
+  env= (char *) getenv("I960BASE");
+  if ( env ) {
+    ldfile_add_library_path(concat(env,"/lib",""));
+  }
+
+  ldfile_output_architecture = bfd_arch_i960;
+  ldfile_output_machine = bfd_mach_i960_core;
+}
+
+#else  /* not GNU960 */
+
+static void 
+lnk960_before_parse()
+{
+  char *name = getenv("I960BASE");
+
+  if (name == (char *)NULL) {
+    name = getenv("G960BASE");
+    if (name == (char *)NULL) {
+      info("%P%F I960BASE and G960BASE not set\n");
+    }
+  }
+
+
+  ldfile_add_library_path(concat(name,"/lib",""));
+  ldfile_output_architecture = bfd_arch_i960;
+  ldfile_output_machine = bfd_mach_i960_core;
+}
+
+#endif /* GNU960 */
+
+
+static void
+add_on(list, search)
+lib_list_type *list;
+lang_input_file_enum_type search;
+{
+  while (list) {
+    lang_add_input_file(list->name,
+                       search,
+                       (char *)NULL);
+    list = list->next;
+  }
+}
+static void lnk960_after_parse()
+{
+
+  /* If there has been no arch, default to -KB */
+  if (ldfile_output_machine_name[0] ==0) {
+    ldfile_add_arch("KB");
+  }
+
+  /* if there has been no hll list then add our own */
+  
+  if(had_hll && !had_hll_name) {
+    append(&hll_list_tail,"cg");
+    if (ldfile_output_machine == bfd_mach_i960_ka_sa ||
+       ldfile_output_machine == bfd_mach_i960_ca) {
+        {
+         append(&hll_list_tail,"fpg");
+        }
+    }
+  }
+  
+  add_on(hll_list, lang_input_file_is_l_enum);
+  add_on(syslib_list, lang_input_file_is_search_file_enum);
+}
+
+static void
+lnk960_before_allocation()
+{
+}
+static void
+lnk960_after_allocation()
+{
+  extern ld_config_type config;
+  if (config.relocateable_output == false) {
+    lang_abs_symbol_at_end_of(".text","_etext");
+    lang_abs_symbol_at_end_of(".data","_edata");
+    lang_abs_symbol_at_beginning_of(".bss","_bss_start");
+    lang_abs_symbol_at_end_of(".bss","_end");
+  }
+}
+
+
+static struct
+ {
+   unsigned  long number;
+   char *name; 
+ }
+machine_table[] = {
+       bfd_mach_i960_core      ,"CORE",
+       bfd_mach_i960_kb_sb     ,"KB",
+       bfd_mach_i960_kb_sb     ,"SB",
+       bfd_mach_i960_mc        ,"MC",
+       bfd_mach_i960_xa        ,"XA",
+       bfd_mach_i960_ca        ,"CA",
+       bfd_mach_i960_ka_sa     ,"KA",
+       bfd_mach_i960_ka_sa     ,"SA",
+
+       bfd_mach_i960_core      ,"core",
+       bfd_mach_i960_kb_sb     ,"kb",
+       bfd_mach_i960_kb_sb     ,"sb",
+       bfd_mach_i960_mc        ,"mc",
+       bfd_mach_i960_xa        ,"xa",
+       bfd_mach_i960_ca        ,"ca",
+       bfd_mach_i960_ka_sa     ,"ka",
+       bfd_mach_i960_ka_sa     ,"sa",
+       0,(char *)NULL
+};
+
+static void
+lnk960_set_output_arch()
+{
+  /* Set the output architecture and machine if possible */
+  unsigned int i;
+  ldfile_output_machine = bfd_mach_i960_core;
+  for (i= 0; machine_table[i].name != (char*)NULL; i++) {
+    if (strcmp(ldfile_output_machine_name,machine_table[i].name)==0) {
+      ldfile_output_machine = machine_table[i].number;
+      break;
+    }
+  }
+  bfd_set_arch_mach(output_bfd, ldfile_output_architecture, ldfile_output_machine);
+}
+
+static char *
+lnk960_choose_target()
+{
+#ifdef GNU960
+
+  return bfd_make_targ_name(BFD_COFF_FORMAT,HOST_BYTE_ORDER_BIG_P);
+
+#else
+
+  char *from_outside = getenv(TARGET_ENVIRON);
+  if (from_outside != (char *)NULL)
+    return from_outside;
+  return LNK960_TARGET;
+
+#endif
+}
+
+/* The default script if none is offered */
+static char *lnk960_script = 
+#include "ldlnk960.x"
+;
+
+
+static char *lnk960_script_relocateable = 
+#include "ldlnk960r.x"
+;
+
+static char *lnk960_get_script()
+{
+  extern ld_config_type config;
+  if (config.relocateable_output) {
+    return lnk960_script_relocateable;
+  }
+  return lnk960_script;
+}
+struct ld_emulation_xfer_struct ld_lnk960_emulation = 
+{
+  lnk960_before_parse,
+  lnk960_syslib,
+  lnk960_hll,
+  lnk960_after_parse,
+  lnk960_after_allocation,
+  lnk960_set_output_arch,
+  lnk960_choose_target,
+  lnk960_before_allocation,
+  lnk960_get_script,
+};
diff --git a/ld/ldlnk960.script b/ld/ldlnk960.script
new file mode 100755 (executable)
index 0000000..f498412
--- /dev/null
@@ -0,0 +1,21 @@
+
+SECTIONS 
+{ 
+  .text : 
+  { 
+    *(.text) 
+    }  
+_etext = . ;
+  .data  SIZEOF(.text) + ADDR(.text):
+  { 
+    *(.data) 
+    }  
+_edata = .; 
+  .bss   SIZEOF(.data) + ADDR(.data) :    
+  { 
+   _bss_start = . ;
+   *(.bss)  
+   [COMMON] 
+    } 
+_end = . ; 
+} 
diff --git a/ld/ldlnk960r.script b/ld/ldlnk960r.script
new file mode 100755 (executable)
index 0000000..daf59bb
--- /dev/null
@@ -0,0 +1,17 @@
+SECTIONS 
+{ 
+  .text 0:
+  { 
+    *(.text) 
+    }  
+  .data SIZEOF(.text) + ADDR(.text):
+  { 
+    *(.data) 
+    }  
+  .bss   SIZEOF(.data) + ADDR(.data) :    
+  { 
+   *(.bss)  
+   [COMMON] 
+    } 
+} 
+
diff --git a/ld/ldvanilla.c b/ld/ldvanilla.c
new file mode 100755 (executable)
index 0000000..7c72cc3
--- /dev/null
@@ -0,0 +1,124 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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 GLD; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+ *  $Id$ 
+ *
+*/
+
+/* 
+ *  A vanilla emulation with no defaults
+ *
+ *  Written by Steve Chamberlain steve@cygnus.com
+ */
+
+
+#include "sysdep.h"
+#include "bfd.h"
+
+
+#include "ld.h"
+#include "config.h"
+#include "ldemul.h"
+#include "ldfile.h"
+#include "ldmisc.h"
+
+extern  boolean lang_float_flag;
+
+
+extern enum bfd_architecture ldfile_output_architecture;
+extern unsigned long ldfile_output_machine;
+extern char *ldfile_output_machine_name;
+
+extern bfd *output_bfd;
+
+
+
+static void vanilla_before_parse()
+{
+}
+
+
+static void 
+vanilla_after_parse()
+{
+
+}
+
+static void
+vanilla_after_allocation()
+{
+
+}
+
+static void
+vanilla_before_allocation()
+{
+
+}
+
+
+static void
+vanilla_set_output_arch()
+{
+  /* Set the output architecture and machine if possible */
+  unsigned long  machine = 0;
+  bfd_set_arch_mach(output_bfd, ldfile_output_architecture, machine);
+}
+
+static char *
+vanilla_choose_target()
+{
+  char *from_outside = getenv(TARGET_ENVIRON);
+  if (from_outside != (char *)NULL)
+    return from_outside;
+  return VANILLA_TARGET;
+}
+
+static void
+vanilla_syslib()
+{
+  info("%S SYSLIB ignored\n");
+}
+
+static void
+vanilla_hll(ignore)
+char  *ignore;
+{
+  info("%S HLL ignored\n");
+}
+
+                            
+static char *vanilla_get_script()
+{                           
+return "";
+}
+
+struct ld_emulation_xfer_struct ld_vanilla_emulation = 
+{
+  vanilla_before_parse,
+  vanilla_syslib,
+  vanilla_hll,
+  vanilla_after_parse,
+  vanilla_after_allocation,
+  vanilla_set_output_arch,
+  vanilla_choose_target,
+  vanilla_before_allocation,
+  vanilla_get_script,
+};
+
diff --git a/ld/ldver.c b/ld/ldver.c
new file mode 100644 (file)
index 0000000..c6465ed
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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 GLD; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+ * $Id$ 
+*/
+
+
+
+#include <stdio.h>
+#include "sysdep.h"
+#include "bfd.h"
+
+#include "ldversion.h"
+
+void
+ldversion()
+{
+  fprintf(stderr,"gld version BFD 0.16 \n");
+}