source: branches/libc-0.6/src/binutils/ld/genscripts.sh

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 7.9 KB
Line 
1#!/bin/sh
2# genscripts.sh - generate the ld-emulation-target specific files
3#
4# Usage: genscripts.sh srcdir libdir exec_prefix \
5# host target target_alias default_emulation \
6# native_lib_dirs use_sysroot this_emulation tool_dir
7#
8# Sample usage:
9# genscripts.sh /djm/ld-devo/devo/ld /usr/local/lib /usr/local \
10# sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sun4 \
11# "" no sun3 sparc-sun-sunos4.1.3
12# produces sun3.x sun3.xbn sun3.xn sun3.xr sun3.xu em_sun3.c
13
14srcdir=$1
15libdir=$2
16exec_prefix=$3
17host=$4
18target=$5
19target_alias=$6
20EMULATION_LIBPATH=$7
21NATIVE_LIB_DIRS=$8
22use_sysroot=$9
23shift 9
24EMULATION_NAME=$1
25shift
26# Can't use ${1:-$target_alias} here due to an Ultrix shell bug.
27if [ "x$1" = "x" ] ; then
28 tool_lib=${exec_prefix}/${target_alias}/lib
29else
30 tool_lib=${exec_prefix}/$1/lib
31fi
32
33# Include the emulation-specific parameters:
34. ${srcdir}/emulparams/${EMULATION_NAME}.sh
35
36if test -d ldscripts; then
37 true
38else
39 mkdir ldscripts
40fi
41
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
64# Set the library search path, for libraries named by -lfoo.
65# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
66# Otherwise, the default is set here.
67#
68# The format is the usual list of colon-separated directories.
69# To force a logically empty LIB_PATH, do LIBPATH=":".
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 ;;
91 esac
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'`
121
122# Generate 5 or 6 script files from a master script template in
123# ${srcdir}/scripttempl/${SCRIPT_NAME}.sh. Which one of the 5 or 6
124# script files is actually used depends on command line options given
125# to ld. (SCRIPT_NAME was set in the emulparams_file.)
126#
127# A .x script file is the default script.
128# A .xr script is for linking without relocation (-r flag).
129# A .xu script is like .xr, but *do* create constructors (-Ur flag).
130# A .xn script is for linking with -n flag (mix text and data on same page).
131# A .xbn script is for linking with -N flag (mix text and data on same page).
132# A .xs script is for generating a shared library with the --shared
133# flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the
134# emulation parameters.
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}}}
148
149# Determine DATA_ALIGNMENT for the 5 variants, using
150# values specified in the emulparams/<emulation>.sh file or default.
151
152DATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}"
153DATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}"
154DATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}"
155DATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}"
156DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
157
158LD_FLAG=r
159DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
160DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
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
165
166LD_FLAG=u
167DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
168CONSTRUCTING=" "
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
173
174LD_FLAG=
175DATA_ALIGNMENT=${DATA_ALIGNMENT_}
176RELOCATING=" "
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
181
182LD_FLAG=n
183DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
184TEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}}
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
189
190LD_FLAG=N
191DATA_ALIGNMENT=${DATA_ALIGNMENT_N}
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
208
209if test -n "$GENERATE_SHLIB_SCRIPT"; then
210 LD_FLAG=shared
211 DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
212 CREATE_SHLIB=" "
213 # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR.
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
235
236# Generate e${EMULATION_NAME}.c.
237. ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em
Note: See TracBrowser for help on using the repository browser.