Ignore:
Timestamp:
Aug 16, 2003, 6:59:22 PM (22 years ago)
Author:
bird
Message:

binutils v2.14 - offical sources.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GNU/src/binutils/ld/genscripts.sh

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.1.1.2
    r608 r609  
    44# Usage: genscripts.sh srcdir libdir exec_prefix \
    55#        host target target_alias default_emulation \
    6 #        native_lib_dirs this_emulation tool_dir
     6#        native_lib_dirs use_sysroot this_emulation tool_dir
    77#
    88# Sample usage:
    99# genscripts.sh /djm/ld-devo/devo/ld /usr/local/lib /usr/local \
    1010#  sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sun4 \
    11 #  "" sun3 sparc-sun-sunos4.1.3
     11#  "" no sun3 sparc-sun-sunos4.1.3
    1212# produces sun3.x sun3.xbn sun3.xn sun3.xr sun3.xu em_sun3.c
    1313
     
    2020EMULATION_LIBPATH=$7
    2121NATIVE_LIB_DIRS=$8
    22 EMULATION_NAME=$9
     22use_sysroot=$9
    2323shift 9
     24EMULATION_NAME=$1
     25shift
    2426# Can't use ${1:-$target_alias} here due to an Ultrix shell bug.
    2527if [ "x$1" = "x" ] ; then
     
    3840fi
    3941
     42# Set some flags for the emultempl scripts.  USE_LIBPATH will
     43# be set for any libpath-using emulation; NATIVE will be set for a
     44# libpath-using emulation where ${host} = ${target}.  NATIVE
     45# may already have been set by the emulparams file, but that's OK
     46# (it'll just get set to "yes" twice).
     47
     48case " $EMULATION_LIBPATH " in
     49  *" ${EMULATION_NAME} "*)
     50    if [ "x${host}" = "x${target}" ] ; then
     51      NATIVE=yes
     52      USE_LIBPATH=yes
     53    elif [ "x${use_sysroot}" = "xyes" ] ; then
     54      USE_LIBPATH=yes
     55    fi
     56    ;;
     57esac
     58
     59# If the emulparams file sets NATIVE, make sure USE_LIBPATH is set also.
     60if test "x$NATIVE" = "xyes" ; then
     61  USE_LIBPATH=yes
     62fi
     63
    4064# Set the library search path, for libraries named by -lfoo.
    4165# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
     
    4468# The format is the usual list of colon-separated directories.
    4569# To force a logically empty LIB_PATH, do LIBPATH=":".
    46 
    47 if [ "x${LIB_PATH}" = "x" ] ; then
    48   # Cross, or native non-default emulation not requesting LIB_PATH.
    49   LIB_PATH=
    50 
    51   if [ "x${host}" = "x${target}" ] ; then
    52     case " $EMULATION_LIBPATH " in
    53       *" ${EMULATION_NAME} "*)
    54         # Native, and default or emulation requesting LIB_PATH.
    55         LIB_PATH=/lib:/usr/lib
    56         if [ -n "${NATIVE_LIB_DIRS}" ]; then
    57           LIB_PATH=${LIB_PATH}:${NATIVE_LIB_DIRS}
    58         fi
    59         if [ "${libdir}" != /usr/lib ]; then
    60           LIB_PATH=${LIB_PATH}:${libdir}
    61         fi
    62         if [ "${libdir}" != /usr/local/lib ] ; then
    63           LIB_PATH=${LIB_PATH}:/usr/local/lib
    64         fi
     70#
     71# If we are using a sysroot, prefix library paths with "=" to indicate this.
     72#
     73# If the emulparams file set LIBPATH_SUFFIX, prepend an extra copy of
     74# the library path with the suffix applied.
     75
     76if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
     77  if [ x"$use_sysroot" != xyes ] ; then
     78    LIB_PATH=${libdir}
     79  fi
     80  LIB_PATH2=""
     81  for lib in ${NATIVE_LIB_DIRS}; do
     82    # The "=" is harmless if we aren't using a sysroot, but also needless.
     83    if [ "x${use_sysroot}" = "xyes" ] ; then
     84      lib="=${lib}"
     85    fi
     86    addsuffix=
     87    case "${LIBPATH_SUFFIX}:${lib}" in
     88      :*) ;;
     89      *:*${LIBPATH_SUFFIX}) ;;
     90      *) addsuffix=yes ;;
    6591    esac
    66   fi
    67 fi
    68 
    69 # Always search $(tooldir)/lib, aka /usr/local/TARGET/lib.
    70 LIB_PATH=${LIB_PATH}:${tool_lib}
    71 
    72 LIB_SEARCH_DIRS=`echo ${LIB_PATH} | tr ':' ' ' | sed -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\1);/g'`
     92    if test -n "$addsuffix"; then
     93      case :${LIB_PATH}: in
     94        *:${lib}${LIBPATH_SUFFIX}:*) ;;
     95        ::) LIB_PATH=${lib}${LIBPATH_SUFFIX} ;;
     96        *) LIB_PATH=${LIB_PATH}:${lib}${LIBPATH_SUFFIX} ;;
     97      esac
     98      case :${LIB_PATH}${LIB_PATH2}: in
     99        *:${lib}:*) ;;
     100        *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
     101      esac
     102    else
     103      case :${LIB_PATH}: in
     104        *:${lib}:*) ;;
     105        ::) LIB_PATH=${lib} ;;
     106        *) LIB_PATH=${LIB_PATH}:${lib} ;;
     107      esac
     108    fi
     109  done
     110  LIB_PATH=${LIB_PATH}${LIB_PATH2}
     111fi
     112
     113
     114# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib, except for
     115# sysrooted configurations.
     116if [ "x${use_sysroot}" != "xyes" ] ; then
     117  LIB_PATH=${tool_lib}:${LIB_PATH}
     118fi
     119
     120LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
    73121
    74122# Generate 5 or 6 script files from a master script template in
     
    85133#   flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the
    86134#   emulation parameters.
    87 
    88 SEGMENT_SIZE=${SEGMENT_SIZE-${TARGET_PAGE_SIZE}}
     135# A .xc script is for linking with -z combreloc; it is only generated if
     136#   $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
     137#   $SCRIPT_NAME is "elf".
     138# A .xsc script is for linking with --shared -z combreloc; it is generated
     139#   if $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
     140#   $SCRIPT_NAME is "elf" and $GENERATE_SHLIB_SCRIPT is set by the emulation
     141#   parameters too.
     142
     143if [ "x$SCRIPT_NAME" = "xelf" ]; then
     144  GENERATE_COMBRELOC_SCRIPT=yes
     145fi
     146
     147SEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}}
    89148
    90149# Determine DATA_ALIGNMENT for the 5 variants, using
     
    100159DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
    101160DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
    102 (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
    103   ldscripts/${EMULATION_NAME}.xr
     161( echo "/* Script for ld -r: link without relocation */"
     162  . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     163  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     164) | sed -e '/^ *$/d;s/[         ]*$//' > ldscripts/${EMULATION_NAME}.xr
    104165
    105166LD_FLAG=u
    106167DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
    107168CONSTRUCTING=" "
    108 (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
    109   ldscripts/${EMULATION_NAME}.xu
     169( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */"
     170  . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     171  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     172) | sed -e '/^ *$/d;s/[         ]*$//' > ldscripts/${EMULATION_NAME}.xu
    110173
    111174LD_FLAG=
    112175DATA_ALIGNMENT=${DATA_ALIGNMENT_}
    113176RELOCATING=" "
    114 (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
    115   ldscripts/${EMULATION_NAME}.x
     177( echo "/* Default linker script, for normal executables */"
     178  . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     179  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     180) | sed -e '/^ *$/d;s/[         ]*$//' > ldscripts/${EMULATION_NAME}.x
    116181
    117182LD_FLAG=n
    118183DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
    119184TEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}}
    120 (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
    121   ldscripts/${EMULATION_NAME}.xn
     185( echo "/* Script for -n: mix text and data on same page */"
     186  . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     187  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     188) | sed -e '/^ *$/d;s/[         ]*$//' > ldscripts/${EMULATION_NAME}.xn
    122189
    123190LD_FLAG=N
    124191DATA_ALIGNMENT=${DATA_ALIGNMENT_N}
    125 (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
    126   ldscripts/${EMULATION_NAME}.xbn
     192( echo "/* Script for -N: mix text and data on same page; don't align data */"
     193  . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     194  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     195) | sed -e '/^ *$/d;s/[         ]*$//' > ldscripts/${EMULATION_NAME}.xbn
     196
     197if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
     198  DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}}
     199  LD_FLAG=c
     200  COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
     201  ( echo "/* Script for -z combreloc: combine and sort reloc sections */"
     202    . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     203    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     204  ) | sed -e '/^ *$/d;s/[       ]*$//' > ldscripts/${EMULATION_NAME}.xc
     205  rm -f ${COMBRELOC}
     206  COMBRELOC=
     207fi
    127208
    128209if test -n "$GENERATE_SHLIB_SCRIPT"; then
     
    131212  CREATE_SHLIB=" "
    132213  # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR.
    133   (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' > \
    134     ldscripts/${EMULATION_NAME}.xs
    135 fi
    136 
    137 for i in $EMULATION_LIBPATH ; do
    138   test "$i" = "$EMULATION_NAME" && COMPILE_IN=true
    139 done
     214  (
     215    echo "/* Script for ld --shared: link shared library */"
     216    . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     217    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     218  ) | sed -e '/^ *$/d;s/[       ]*$//' > ldscripts/${EMULATION_NAME}.xs
     219  if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
     220    LD_FLAG=cshared
     221    DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
     222    COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
     223    ( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */"
     224      . ${srcdir}/emulparams/${EMULATION_NAME}.sh
     225      . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
     226    ) | sed -e '/^ *$/d;s/[     ]*$//' > ldscripts/${EMULATION_NAME}.xsc
     227    rm -f ${COMBRELOC}
     228    COMBRELOC=
     229  fi
     230fi
     231
     232case " $EMULATION_LIBPATH " in
     233    *" ${EMULATION_NAME} "*) COMPILE_IN=true;;
     234esac
    140235
    141236# Generate e${EMULATION_NAME}.c.
Note: See TracChangeset for help on using the changeset viewer.