# This shell script emits a C file. -*- C -*-
# It does some substitutions.
-cat >em_${EMULATION_NAME}.c <<EOF
+cat >e${EMULATION_NAME}.c <<EOF
/* intel coff loader emulation specific stuff
- Copyright (C) 1991 Free Software Foundation, Inc.
+ Copyright (C) 1991, 93, 94, 95, 96, 1999 Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
This file is part of GLD, the Gnu Linker.
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. */
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+#include "libiberty.h"
#include "bfd.h"
#include "sysdep.h"
+#include "bfdlink.h"
/*#include "archures.h"*/
#include "ld.h"
-#include "config.h"
#include "ldemul.h"
#include "ldmisc.h"
+#include "ldexp.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;
-
+#include "ldmain.h"
typedef struct lib_list {
char *name;
static void
append(list, name)
-lib_list_type ***list;
-char *name;
+ lib_list_type ***list;
+ char *name;
{
lib_list_type *element =
- (lib_list_type *)(ldmalloc(sizeof(lib_list_type)));
+ (lib_list_type *)(xmalloc(sizeof(lib_list_type)));
element->name = name;
element->next = (lib_list_type *)NULL;
static boolean had_hll = false;
static boolean had_hll_name = false;
+
static void
lnk960_hll(name)
-char *name;
+ char *name;
{
had_hll = true;
if (name != (char *)NULL) {
static void
lnk960_syslib(name)
-char *name;
+ char *name;
{
append(&syslib_list_tail,name);
}
-
#ifdef GNU960
static void
for ( p = env_variables; *p; p++ ){
env = (char *) getenv(*p);
if (env) {
- ldfile_add_library_path(concat(env,"/lib/libcoff",""));
+ ldfile_add_library_path(concat(env,"/lib/libcoff",""), false);
}
}
env= (char *) getenv("I960BASE");
if ( env ) {
- ldfile_add_library_path(concat(env,"/lib",""));
+ ldfile_add_library_path(concat(env,"/lib",""), false);
}
ldfile_output_architecture = bfd_arch_i960;
}
- ldfile_add_library_path(concat(name,"/lib",""));
+ ldfile_add_library_path(concat(name,"/lib",""), false);
ldfile_output_architecture = bfd_arch_i960;
ldfile_output_machine = bfd_mach_i960_core;
}
static void
add_on(list, search)
-lib_list_type *list;
-lang_input_file_enum_type search;
+ lib_list_type *list;
+ lang_input_file_enum_type search;
{
while (list) {
lang_add_input_file(list->name,
list = list->next;
}
}
-static void lnk960_after_parse()
+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");
lnk960_before_allocation()
{
}
+
static void
lnk960_after_allocation()
{
- extern ld_config_type config;
- if (config.relocateable_output == false) {
+ if (link_info.relocateable == 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");
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
+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_jx ,"JX" },
+ { bfd_mach_i960_hx ,"HX" },
+
+ { 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_jx ,"jx" },
+ { bfd_mach_i960_hx ,"hx" },
+
+ { 0, (char *) NULL }
};
static void
int *isfile;
EOF
-if test "$DEFAULT_EMULATION" = "$EMULATION_NAME"
+if test -n "$COMPILE_IN"
then
# Scripts compiled in.
# sed commands to quote an ld script as a C string.
-sc='s/["\\]/\\&/g
-s/$/\\n\\/
-1s/^/"{/
-$s/$/n}"/
-'
-
-cat >>em_${EMULATION_NAME}.c <<EOF
- extern ld_config_type config;
+sc="-f stringify.sed"
+cat >>e${EMULATION_NAME}.c <<EOF
+{
*isfile = 0;
- if (config.relocateable_output == true && config.build_constructors == true)
- return `sed "$sc" ldscripts/${EMULATION_NAME}.xu`;
- else if (config.relocateable_output == true)
- return `sed "$sc" ldscripts/${EMULATION_NAME}.xr`;
- else if (!config.text_read_only)
- return `sed "$sc" ldscripts/${EMULATION_NAME}.xbn`;
- else if (!config.magic_demand_paged)
- return `sed "$sc" ldscripts/${EMULATION_NAME}.xn`;
- else
- return `sed "$sc" ldscripts/${EMULATION_NAME}.x`;
-}
+ if (link_info.relocateable == true && config.build_constructors == true)
+ return
EOF
+sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
+echo ' ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
+echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
+echo ' ; else return' >> e${EMULATION_NAME}.c
+sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
+echo '; }' >> e${EMULATION_NAME}.c
else
# Scripts read from the filesystem.
-cat >>em_${EMULATION_NAME}.c <<EOF
+cat >>e${EMULATION_NAME}.c <<EOF
{
- extern ld_config_type config;
-
*isfile = 1;
- if (config.relocateable_output == true && config.build_constructors == true)
+ if (link_info.relocateable == true && config.build_constructors == true)
return "ldscripts/${EMULATION_NAME}.xu";
- else if (config.relocateable_output == true)
+ else if (link_info.relocateable == true)
return "ldscripts/${EMULATION_NAME}.xr";
else if (!config.text_read_only)
return "ldscripts/${EMULATION_NAME}.xbn";
fi
-cat >>em_${EMULATION_NAME}.c <<EOF
+cat >>e${EMULATION_NAME}.c <<EOF
struct ld_emulation_xfer_struct ld_lnk960_emulation =
{
lnk960_syslib,
lnk960_hll,
lnk960_after_parse,
+ NULL, /* after_open */
lnk960_after_allocation,
lnk960_set_output_arch,
lnk960_choose_target,
lnk960_before_allocation,
lnk960_get_script,
"lnk960",
- ""
+ "",
+ NULL, /* finish */
+ NULL, /* create output section statements */
+ NULL, /* open dynamic archive */
+ NULL, /* place orphan */
+ NULL, /* set symbols */
+ NULL, /* parse args */
+ NULL, /* unrecognized file */
+ NULL, /* list options */
+ NULL /* recognized file */
};
EOF