Home | History | Annotate | Download | only in emultempl
      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