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 /* This file is is generated by a shell script.  DO NOT EDIT! */
      5 
      6 /* emulate the original gld for the given ${EMULATION_NAME}
      7    Copyright (C) 1991-2014 Free Software Foundation, Inc.
      8    Written by Steve Chamberlain steve (a] cygnus.com
      9 
     10    This file is part of the GNU Binutils.
     11 
     12    This program is free software; you can redistribute it and/or modify
     13    it under the terms of the GNU General Public License as published by
     14    the Free Software Foundation; either version 3 of the License, or
     15    (at your option) any later version.
     16 
     17    This program is distributed in the hope that it will be useful,
     18    but WITHOUT ANY WARRANTY; without even the implied warranty of
     19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     20    GNU General Public License for more details.
     21 
     22    You should have received a copy of the GNU General Public License
     23    along with this program; if not, write to the Free Software
     24    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     25    MA 02110-1301, USA.  */
     26 
     27 #define TARGET_IS_${EMULATION_NAME}
     28 
     29 #include "sysdep.h"
     30 #include "bfd.h"
     31 #include "bfdlink.h"
     32 
     33 #include "ld.h"
     34 #include "ldmain.h"
     35 #include "ldmisc.h"
     36 
     37 #include "ldexp.h"
     38 #include "ldlang.h"
     39 #include "ldfile.h"
     40 #include "ldemul.h"
     41 
     42 EOF
     43 
     44 # Import any needed special functions and/or overrides.
     45 #
     46 if test -n "$EXTRA_EM_FILE" ; then
     47   source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
     48 fi
     49 
     50 if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
     51 fragment <<EOF
     52 
     53 static void
     54 gld${EMULATION_NAME}_before_parse (void)
     55 {
     56 #ifndef TARGET_			/* I.e., if not generic.  */
     57   ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
     58 #endif /* not TARGET_ */
     59 EOF
     60   # The MSP430 port *needs* linker relaxtion in order to cope with large
     61   # functions where conditional branches do not fit into a +/- 1024 byte range.
     62   case ${target} in
     63     msp430-*-* )
     64 fragment <<EOF
     65   if (! link_info.relocatable)
     66     TARGET_ENABLE_RELAXATION;
     67 EOF
     68     ;;
     69   esac
     70 fragment <<EOF
     71 }
     72 
     73 EOF
     74 fi
     75 
     76 if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
     77 fragment <<EOF
     78 
     79 static char *
     80 gld${EMULATION_NAME}_get_script (int *isfile)
     81 EOF
     82 
     83 if test x"$COMPILE_IN" = xyes
     84 then
     85 # Scripts compiled in.
     86 
     87 # sed commands to quote an ld script as a C string.
     88 sc="-f stringify.sed"
     89 
     90 fragment <<EOF
     91 {
     92   *isfile = 0;
     93 
     94   if (link_info.relocatable && config.build_constructors)
     95     return
     96 EOF
     97 sed $sc ldscripts/${EMULATION_NAME}.xu                 >> e${EMULATION_NAME}.c
     98 echo '  ; else if (link_info.relocatable) return'     >> e${EMULATION_NAME}.c
     99 sed $sc ldscripts/${EMULATION_NAME}.xr                 >> e${EMULATION_NAME}.c
    100 echo '  ; else if (!config.text_read_only) return'     >> e${EMULATION_NAME}.c
    101 sed $sc ldscripts/${EMULATION_NAME}.xbn                >> e${EMULATION_NAME}.c
    102 echo '  ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
    103 sed $sc ldscripts/${EMULATION_NAME}.xn                 >> e${EMULATION_NAME}.c
    104 echo '  ; else return'                                 >> e${EMULATION_NAME}.c
    105 sed $sc ldscripts/${EMULATION_NAME}.x                  >> e${EMULATION_NAME}.c
    106 echo '; }'                                             >> e${EMULATION_NAME}.c
    107 
    108 else
    109 # Scripts read from the filesystem.
    110 
    111 fragment <<EOF
    112 {
    113   *isfile = 1;
    114 
    115   if (link_info.relocatable && config.build_constructors)
    116     return "ldscripts/${EMULATION_NAME}.xu";
    117   else if (link_info.relocatable)
    118     return "ldscripts/${EMULATION_NAME}.xr";
    119   else if (!config.text_read_only)
    120     return "ldscripts/${EMULATION_NAME}.xbn";
    121   else if (!config.magic_demand_paged)
    122     return "ldscripts/${EMULATION_NAME}.xn";
    123   else
    124     return "ldscripts/${EMULATION_NAME}.x";
    125 }
    126 EOF
    127 fi
    128 fi
    129 
    130 fragment <<EOF
    131 
    132 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
    133 {
    134   ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
    135   ${LDEMUL_SYSLIB-syslib_default},
    136   ${LDEMUL_HLL-hll_default},
    137   ${LDEMUL_AFTER_PARSE-after_parse_default},
    138   ${LDEMUL_AFTER_OPEN-after_open_default},
    139   ${LDEMUL_AFTER_ALLOCATION-after_allocation_default},
    140   ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
    141   ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
    142   ${LDEMUL_BEFORE_ALLOCATION-before_allocation_default},
    143   ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
    144   "${EMULATION_NAME}",
    145   "${OUTPUT_FORMAT}",
    146   ${LDEMUL_FINISH-finish_default},
    147   ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
    148   ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-NULL},
    149   ${LDEMUL_PLACE_ORPHAN-NULL},
    150   ${LDEMUL_SET_SYMBOLS-NULL},
    151   ${LDEMUL_PARSE_ARGS-NULL},
    152   ${LDEMUL_ADD_OPTIONS-NULL},
    153   ${LDEMUL_HANDLE_OPTION-NULL},
    154   ${LDEMUL_UNRECOGNIZED_FILE-NULL},
    155   ${LDEMUL_LIST_OPTIONS-NULL},
    156   ${LDEMUL_RECOGNIZED_FILE-NULL},
    157   ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
    158   ${LDEMUL_NEW_VERS_PATTERN-NULL},
    159   ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL}
    160 };
    161 EOF
    162