1# This shell script emits a C file. -*- C -*- 2# It does some substitutions. 3fragment <<EOF 4/* Copyright (C) 1991-2016 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 40static 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 53static void 54gld960_set_output_arch (void) 55{ 56 bfd_set_arch_mach (link_info.output_bfd, 57 ldfile_output_architecture, bfd_mach_i960_core); 58} 59 60static char * 61gld960_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 72static char * 73gld960_get_script (int *isfile) 74EOF 75 76if test x"$COMPILE_IN" = xyes 77then 78# Scripts compiled in. 79 80# sed commands to quote an ld script as a C string. 81sc="-f stringify.sed" 82 83fragment <<EOF 84{ 85 *isfile = 0; 86 87 if (bfd_link_relocatable (&link_info) && config.build_constructors) 88 return 89EOF 90sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c 91echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c 92sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c 93echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c 94sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c 95echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c 96sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c 97echo ' ; else return' >> e${EMULATION_NAME}.c 98sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c 99echo '; }' >> e${EMULATION_NAME}.c 100 101else 102# Scripts read from the filesystem. 103 104fragment <<EOF 105{ 106 *isfile = 1; 107 108 if (bfd_link_relocatable (&link_info) && config.build_constructors) 109 return "ldscripts/${EMULATION_NAME}.xu"; 110 else if (bfd_link_relocatable (&link_info)) 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} 119EOF 120 121fi 122 123fragment <<EOF 124 125struct 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}; 154EOF 155