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 "safe-ctype.h"
     30 #include "bfdlink.h"
     31 
     32 #include "ld.h"
     33 #include "ldmisc.h"
     34 #include "ldmain.h"
     35 
     36 #include "ldexp.h"
     37 #include "ldlang.h"
     38 #include "ldfile.h"
     39 #include "ldemul.h"
     40 
     41 static void gld960_before_parse (void)
     42 {
     43   char *env ;
     44   env =  getenv("G960LIB");
     45   if (env) {
     46     ldfile_add_library_path(env, FALSE);
     47   }
     48   env = getenv("G960BASE");
     49   if (env)
     50     ldfile_add_library_path (concat (env, "/lib", (const char *) NULL),
     51 			     FALSE);
     52   ldfile_output_architecture = bfd_arch_i960;
     53 }
     54 
     55 static void
     56 gld960_set_output_arch (void)
     57 {
     58   if (ldfile_output_machine_name != NULL
     59       && *ldfile_output_machine_name != '\0')
     60     {
     61       char *s, *s1;
     62 
     63       s = concat ("i960:", ldfile_output_machine_name, (char *) NULL);
     64       for (s1 = s; *s1 != '\0'; s1++)
     65 	*s1 = TOLOWER (*s1);
     66       ldfile_set_output_arch (s, bfd_arch_unknown);
     67       free (s);
     68     }
     69 
     70   set_output_arch_default ();
     71 }
     72 
     73 static char *
     74 gld960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
     75 {
     76   char *from_outside = getenv(TARGET_ENVIRON);
     77   output_filename = "b.out";
     78 
     79   if (from_outside != (char *)NULL)
     80     return from_outside;
     81 
     82   return "coff-Intel-little";
     83 }
     84 
     85 static char *
     86 gld960_get_script (int *isfile)
     87 EOF
     88 
     89 if test x"$COMPILE_IN" = xyes
     90 then
     91 # Scripts compiled in.
     92 
     93 # sed commands to quote an ld script as a C string.
     94 sc="-f stringify.sed"
     95 
     96 fragment <<EOF
     97 {
     98   *isfile = 0;
     99 
    100   if (link_info.relocatable && config.build_constructors)
    101     return
    102 EOF
    103 sed $sc ldscripts/${EMULATION_NAME}.xu                 >> e${EMULATION_NAME}.c
    104 echo '  ; else if (link_info.relocatable) return'     >> e${EMULATION_NAME}.c
    105 sed $sc ldscripts/${EMULATION_NAME}.xr                 >> e${EMULATION_NAME}.c
    106 echo '  ; else if (!config.text_read_only) return'     >> e${EMULATION_NAME}.c
    107 sed $sc ldscripts/${EMULATION_NAME}.xbn                >> e${EMULATION_NAME}.c
    108 echo '  ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
    109 sed $sc ldscripts/${EMULATION_NAME}.xn                 >> e${EMULATION_NAME}.c
    110 echo '  ; else return'                                 >> e${EMULATION_NAME}.c
    111 sed $sc ldscripts/${EMULATION_NAME}.x                  >> e${EMULATION_NAME}.c
    112 echo '; }'                                             >> e${EMULATION_NAME}.c
    113 
    114 else
    115 # Scripts read from the filesystem.
    116 
    117 fragment <<EOF
    118 {
    119   *isfile = 1;
    120 
    121   if (link_info.relocatable && config.build_constructors)
    122     return "ldscripts/${EMULATION_NAME}.xu";
    123   else if (link_info.relocatable)
    124     return "ldscripts/${EMULATION_NAME}.xr";
    125   else if (!config.text_read_only)
    126     return "ldscripts/${EMULATION_NAME}.xbn";
    127   else if (!config.magic_demand_paged)
    128     return "ldscripts/${EMULATION_NAME}.xn";
    129   else
    130     return "ldscripts/${EMULATION_NAME}.x";
    131 }
    132 EOF
    133 
    134 fi
    135 
    136 fragment <<EOF
    137 
    138 struct ld_emulation_xfer_struct ld_gld960coff_emulation =
    139 {
    140   gld960_before_parse,
    141   syslib_default,
    142   hll_default,
    143   after_parse_default,
    144   after_open_default,
    145   after_allocation_default,
    146   gld960_set_output_arch,
    147   gld960_choose_target,
    148   before_allocation_default,
    149   gld960_get_script,
    150   "960coff",
    151   "",
    152   finish_default,
    153   NULL,	/* create output section statements */
    154   NULL,	/* open dynamic archive */
    155   NULL,	/* place orphan */
    156   NULL,	/* set symbols */
    157   NULL,	/* parse args */
    158   NULL,	/* add_options */
    159   NULL,	/* handle_option */
    160   NULL,	/* unrecognized file */
    161   NULL,	/* list options */
    162   NULL,	/* recognized file */
    163   NULL,	/* find_potential_libraries */
    164   NULL,	/* new_vers_pattern */
    165   NULL	/* extra_map_file_text */
    166 };
    167 EOF
    168