1 # This shell script emits a C file. -*- C -*- 2 # It does some substitutions. 3 fragment <<EOF 4 /* Copyright (C) 1991-2014 Free Software Foundation, Inc. 5 6 This file is part of the GNU Binutils. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21 MA 02110-1301, USA. */ 22 23 24 /* Emulate the Intel's port of gld. */ 25 26 #include "sysdep.h" 27 #include "bfd.h" 28 #include "libiberty.h" 29 #include "bfdlink.h" 30 31 #include "ld.h" 32 #include "ldmisc.h" 33 #include "ldmain.h" 34 35 #include "ldexp.h" 36 #include "ldlang.h" 37 #include "ldfile.h" 38 #include "ldemul.h" 39 40 static void gld960_before_parse (void) 41 { 42 char *env ; 43 env = getenv("G960LIB"); 44 if (env) { 45 ldfile_add_library_path(env, FALSE); 46 } 47 env = getenv("G960BASE"); 48 if (env) 49 ldfile_add_library_path (concat (env, "/lib", (const char *) NULL), FALSE); 50 ldfile_output_architecture = bfd_arch_i960; 51 } 52 53 static void 54 gld960_set_output_arch (void) 55 { 56 bfd_set_arch_mach (link_info.output_bfd, 57 ldfile_output_architecture, bfd_mach_i960_core); 58 } 59 60 static char * 61 gld960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) 62 { 63 char *from_outside = getenv(TARGET_ENVIRON); 64 output_filename = "b.out"; 65 66 if (from_outside != (char *)NULL) 67 return from_outside; 68 69 return "b.out.little"; 70 } 71 72 static char * 73 gld960_get_script (int *isfile) 74 EOF 75 76 if test x"$COMPILE_IN" = xyes 77 then 78 # Scripts compiled in. 79 80 # sed commands to quote an ld script as a C string. 81 sc="-f stringify.sed" 82 83 fragment <<EOF 84 { 85 *isfile = 0; 86 87 if (link_info.relocatable && config.build_constructors) 88 return 89 EOF 90 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c 91 echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c 92 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c 93 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c 94 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c 95 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c 96 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c 97 echo ' ; else return' >> e${EMULATION_NAME}.c 98 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c 99 echo '; }' >> e${EMULATION_NAME}.c 100 101 else 102 # Scripts read from the filesystem. 103 104 fragment <<EOF 105 { 106 *isfile = 1; 107 108 if (link_info.relocatable && config.build_constructors) 109 return "ldscripts/${EMULATION_NAME}.xu"; 110 else if (link_info.relocatable) 111 return "ldscripts/${EMULATION_NAME}.xr"; 112 else if (!config.text_read_only) 113 return "ldscripts/${EMULATION_NAME}.xbn"; 114 else if (!config.magic_demand_paged) 115 return "ldscripts/${EMULATION_NAME}.xn"; 116 else 117 return "ldscripts/${EMULATION_NAME}.x"; 118 } 119 EOF 120 121 fi 122 123 fragment <<EOF 124 125 struct ld_emulation_xfer_struct ld_gld960_emulation = 126 { 127 gld960_before_parse, 128 syslib_default, 129 hll_default, 130 after_parse_default, 131 after_open_default, 132 after_allocation_default, 133 gld960_set_output_arch, 134 gld960_choose_target, 135 before_allocation_default, 136 gld960_get_script, 137 "960", 138 "", 139 finish_default, 140 NULL, /* create output section statements */ 141 NULL, /* open dynamic archive */ 142 NULL, /* place orphan */ 143 NULL, /* set symbols */ 144 NULL, /* parse args */ 145 NULL, /* add_options */ 146 NULL, /* handle_option */ 147 NULL, /* unrecognized file */ 148 NULL, /* list options */ 149 NULL, /* recognized file */ 150 NULL, /* find_potential_libraries */ 151 NULL, /* new_vers_pattern */ 152 NULL /* extra_map_file_text */ 153 }; 154 EOF 155