genscripts.sh 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. #!/bin/sh
  2. # genscripts.sh - generate the ld-emulation-target specific files
  3. # Copyright (C) 2004-2022 Free Software Foundation, Inc.
  4. #
  5. # This file is part of the Gnu Linker.
  6. #
  7. # This program is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 3, or (at your option)
  10. # any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with GLD; see the file COPYING. If not, write to the Free
  19. # Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
  20. # 02110-1301, USA.
  21. #
  22. # Usage: genscripts_extra.sh \
  23. # srcdir \
  24. # libdir \
  25. # prefix \
  26. # exec_prefix \
  27. # host \
  28. # target \
  29. # target_alias \
  30. # default_emulation \
  31. # native_lib_dirs \
  32. # use_sysroot \
  33. # enable_initfini_array \
  34. # this_emulation \
  35. # optional:
  36. # tool_dir
  37. #
  38. # Sample usage:
  39. #
  40. # genscripts_extra.sh \
  41. # /sources/ld \
  42. # /usr/local/lib \
  43. # /usr/local \
  44. # /usr/local \
  45. # sparc-sun-sunos4.1.3 \
  46. # sparc-sun-sunos4.1.3 \
  47. # sparc-sun-sunos4.1.3 \
  48. # sun4 \
  49. # "" \
  50. # no \
  51. # sun3 \
  52. # sparc-sun-sunos4.1.3 \
  53. # sparc.sh
  54. #
  55. # produces the linker scripts:
  56. #
  57. # sun3.x [default linker script]
  58. # sun3.xbn [used when the linker is invoked with "-N"]
  59. # sun3.xn [used when the linker is invoked with "-n"]
  60. # sun3.xr [used when the linker is invoked with "-r"]
  61. # sun3.xu [used when the linker is invoked with "-Ur"]
  62. #
  63. # depending on platform specific settings linker scripts with the
  64. # following suffixes might be generated as well:
  65. #
  66. # xdwe: -pie -z combreloc -z separate-code -z relro -z now
  67. # xdw: -pie -z combreloc -z relro -z now
  68. # xdceo: -pie -z combreloc -z separate-code -z relro
  69. # xdce: -pie -z combreloc -z separate-code
  70. # xdco: -pie -z combreloc -z relro
  71. # xdc: -pie -z combreloc
  72. # xdeo: -pie -z separate-code -z relro
  73. # xde: -pie -z separate-code
  74. # xdo: -pie -z relro
  75. # xd: -pie
  76. #
  77. # xswe: -shared -z combreloc -z separate-code -z relro -z now
  78. # xsw: -shared -z combreloc -z relro -z now
  79. # xsceo: -shared -z combreloc -z separate-code -z relro
  80. # xsce: -shared -z combreloc -z separate-code
  81. # xsco: -shared -z combreloc -z relro
  82. # xsc: -shared -z combreloc
  83. # xseo: -shared -z separate-code -z relro
  84. # xse: -shared -z separate-code
  85. # xso: -shared -z relro
  86. # xs: -shared
  87. #
  88. # xwe: -z combreloc -z separate-code -z relro -z now
  89. # xw: -z combreloc -z relro -z now
  90. # xceo: -z combreloc -z separate-code -z relro
  91. # xce: -z combreloc -z separate-code
  92. # xco: -z combreloc -z relro
  93. # xc: -z combreloc
  94. # xeo: -z separate-code -z relro
  95. # xe: -z separate-code
  96. # xo: -z relro
  97. #
  98. #
  99. # It also produced the C source file:
  100. #
  101. # em_sun3.c
  102. #
  103. # which is then compiled into the linker.
  104. #
  105. # The linker scripts are created by running the shell script
  106. # /sources/ld/emulparams/sparc.sh to set the value of ${SCRIPT_NAME}
  107. # (and any other variables it wants to). ${SCRIPT_NAME} is then
  108. # invoked with a variable called ${LD_FLAG} to tell it which version
  109. # of the linker script to create.
  110. srcdir=$1
  111. libdir=$2
  112. prefix=$3
  113. exec_prefix=$4
  114. host=$5
  115. target=$6
  116. target_alias=$7
  117. DEPDIR=$8
  118. shift 8
  119. LIB_PATH=$1
  120. EMULATION_LIBPATH=$2
  121. NATIVE_LIB_DIRS=$3
  122. use_sysroot=$4
  123. ENABLE_INITFINI_ARRAY=$5
  124. shift 5
  125. EMULATION_NAME=$1
  126. TOOL_LIB=$2
  127. source_sh()
  128. {
  129. if test -n "${DEPDIR}"; then
  130. echo $1 >> ${DEPDIR}/e${EMULATION_NAME}.Tc
  131. fi
  132. . $1
  133. }
  134. if test -n "${DEPDIR}"; then
  135. rm -f ${DEPDIR}/e${EMULATION_NAME}.Tc
  136. fi
  137. # Include the emulation-specific parameters:
  138. CUSTOMIZER_SCRIPT="${srcdir}/emulparams/${EMULATION_NAME}.sh"
  139. source_sh ${CUSTOMIZER_SCRIPT}
  140. if test -d ldscripts; then
  141. true
  142. else
  143. mkdir ldscripts
  144. fi
  145. # Set some flags for the emultempl scripts. USE_LIBPATH will
  146. # be set for any libpath-using emulation; NATIVE will be set for a
  147. # libpath-using emulation where ${host} = ${target}. NATIVE
  148. # may already have been set by the emulparams file, but that's OK
  149. # (it'll just get set to "yes" twice).
  150. case " $EMULATION_LIBPATH " in
  151. *" ${EMULATION_NAME} "*)
  152. if [ "x${host}" = "x${target}" ] ; then
  153. NATIVE=yes
  154. USE_LIBPATH=yes
  155. elif [ "x${use_sysroot}" = "xyes" ] ; then
  156. USE_LIBPATH=yes
  157. fi
  158. ;;
  159. esac
  160. # If the emulparams file sets NATIVE, make sure USE_LIBPATH is set also.
  161. if test "x$NATIVE" = "xyes" ; then
  162. USE_LIBPATH=yes
  163. fi
  164. # Set the library search path, for libraries named by -lfoo.
  165. # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
  166. # Otherwise, the default is set here.
  167. #
  168. # The format is the usual list of colon-separated directories.
  169. # To force a logically empty LIB_PATH, do LIBPATH=":".
  170. #
  171. # If we are using a sysroot, prefix library paths with "=" to indicate this.
  172. #
  173. # If the emulparams file set LIBPATH_SUFFIX, prepend an extra copy of
  174. # the library path with the suffix applied.
  175. # Paths with LIBPATH_SUFFIX
  176. lib_path1=
  177. # Paths without LIBPATH_SUFFIX
  178. lib_path2=
  179. if [ "${LIB_PATH}" != ":" ] ; then
  180. lib_path2=${LIB_PATH}
  181. fi
  182. # Add args to lib_path1 and lib_path2, discarding any duplicates
  183. append_to_lib_path()
  184. {
  185. if [ $# != 0 ]; then
  186. for lib in "$@"; do
  187. # The "=" is harmless if we aren't using a sysroot, but also needless.
  188. if [ "x${use_sysroot}" = "xyes" ] ; then
  189. lib="=${lib}"
  190. fi
  191. skip_lib=no
  192. for libpath_suffix in ${LIBPATH_SUFFIX}; do
  193. case "${lib}" in
  194. *${libpath_suffix})
  195. case :${lib_path1}: in
  196. *:${lib}:*) ;;
  197. ::) lib_path1=${lib} ;;
  198. *) lib_path1=${lib_path1}:${lib} ;;
  199. esac ;;
  200. *)
  201. if test -n "${LIBPATH_SUFFIX_SKIP}"; then
  202. case "${lib}" in
  203. *${LIBPATH_SUFFIX_SKIP}) skip_lib=yes ;;
  204. esac
  205. fi
  206. if test "${skip_lib}" = "no"; then
  207. case :${lib_path1}: in
  208. *:${lib}${libpath_suffix}:*) ;;
  209. ::) lib_path1=${lib}${libpath_suffix} ;;
  210. *) lib_path1=${lib_path1}:${lib}${libpath_suffix} ;;
  211. esac
  212. fi ;;
  213. esac
  214. done
  215. if test "${skip_lib}" = "no"; then
  216. case :${lib_path1}:${lib_path2}: in
  217. *:${lib}:*) ;;
  218. *::) lib_path2=${lib} ;;
  219. *) lib_path2=${lib_path2}:${lib} ;;
  220. esac
  221. fi
  222. done
  223. fi
  224. }
  225. # Always search $(tooldir)/lib, aka /usr/local/TARGET/lib when native
  226. # except when LIBPATH=":".
  227. if [ "${LIB_PATH}" != ":" ] ; then
  228. libs=
  229. if [ "x${TOOL_LIB}" = "x" ] ; then
  230. if [ "x${NATIVE}" = "xyes" ] ; then
  231. libs="${exec_prefix}/${target_alias}/lib"
  232. fi
  233. else
  234. # For multilib'ed targets, ensure both ${target_alias}/lib${LIBPATH_SUFFIX}
  235. # and ${TOOL_LIB}/lib${LIBPATH_SUFFIX} are in the default search path,
  236. # because 64bit libraries may be in both places, depending on
  237. # cross-development setup method (e.g.: /usr/s390x-linux/lib64
  238. # vs. /usr/s390-linux/lib64)
  239. for libpath_suffix in ${LIBPATH_SUFFIX}; do
  240. case "${NATIVE}:${libpath_suffix}:${TOOL_LIB}" in
  241. :* | *::* | *:*:*${libpath_suffix}) ;;
  242. *) libs="${exec_prefix}/${target_alias}/lib${libpath_suffix}" ;;
  243. esac
  244. done
  245. libs="${exec_prefix}/${TOOL_LIB}/lib ${libs}"
  246. fi
  247. append_to_lib_path ${libs}
  248. fi
  249. if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
  250. libs=${NATIVE_LIB_DIRS}
  251. if [ "x${NATIVE}" = "xyes" ] ; then
  252. case " ${libs} " in
  253. *" ${libdir} "*) ;;
  254. *) libs="${libdir} ${libs}" ;;
  255. esac
  256. fi
  257. append_to_lib_path ${libs}
  258. fi
  259. case :${lib_path1}:${lib_path2}: in
  260. *:: | ::*) LIB_PATH=${lib_path1}${lib_path2} ;;
  261. *) LIB_PATH=${lib_path1}:${lib_path2} ;;
  262. esac
  263. LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
  264. # We need it for testsuite.
  265. set $EMULATION_LIBPATH
  266. if [ "x$1" = "x$EMULATION_NAME" ]; then
  267. test -d tmpdir || mkdir tmpdir
  268. rm -f tmpdir/libpath.exp
  269. echo "set libpath \"${LIB_PATH}\"" | sed -e 's/:/ /g' > tmpdir/libpath.exp
  270. fi
  271. if [ "x$SCRIPT_NAME" = "xelf" ]; then
  272. GENERATE_COMBRELOC_SCRIPT=yes
  273. fi
  274. SEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}}
  275. # Determine DATA_ALIGNMENT for the 5 variants, using
  276. # values specified in the emulparams/<script_to_run>.sh file or default.
  277. DATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}"
  278. DATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}"
  279. DATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}"
  280. DATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}"
  281. DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
  282. LD_FLAG=r
  283. DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
  284. DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
  285. ( echo "/* Script for -r */"
  286. source_sh ${CUSTOMIZER_SCRIPT}
  287. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  288. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xr
  289. LD_FLAG=u
  290. DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
  291. CONSTRUCTING=" "
  292. ( echo "/* Script for -Ur */"
  293. source_sh ${CUSTOMIZER_SCRIPT}
  294. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  295. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu
  296. DATA_ALIGNMENT=${DATA_ALIGNMENT_}
  297. RELOCATING=" "
  298. LD_FLAG=
  299. ( echo "/* Default linker script, for normal executables */"
  300. source_sh ${CUSTOMIZER_SCRIPT}
  301. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  302. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x
  303. LD_FLAG=textonly
  304. ( echo "/* Script for -z separate-code */"
  305. source_sh ${CUSTOMIZER_SCRIPT}
  306. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  307. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xe
  308. if test -n "$GENERATE_RELRO_SCRIPT"; then
  309. LD_FLAG=
  310. RELRO=" "
  311. ( echo "/* Script for -z relro */"
  312. source_sh ${CUSTOMIZER_SCRIPT}
  313. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  314. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xo
  315. LD_FLAG=textonly
  316. ( echo "/* Script for -z separate-code -z relro */"
  317. source_sh ${CUSTOMIZER_SCRIPT}
  318. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  319. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xeo
  320. unset RELRO
  321. fi
  322. LD_FLAG=n
  323. DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
  324. ( echo "/* Script for -n */"
  325. source_sh ${CUSTOMIZER_SCRIPT}
  326. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  327. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xn
  328. LD_FLAG=N
  329. DATA_ALIGNMENT=${DATA_ALIGNMENT_N}
  330. ( echo "/* Script for -N */"
  331. source_sh ${CUSTOMIZER_SCRIPT}
  332. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  333. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xbn
  334. if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
  335. DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}}
  336. LD_FLAG=c
  337. COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
  338. ( echo "/* Script for -z combreloc */"
  339. source_sh ${CUSTOMIZER_SCRIPT}
  340. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  341. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc
  342. rm -f ${COMBRELOC}
  343. LD_FLAG=ctextonly
  344. COMBRELOC=ldscripts/${EMULATION_NAME}.xce.tmp
  345. ( echo "/* Script for -z combreloc -z separate-code */"
  346. source_sh ${CUSTOMIZER_SCRIPT}
  347. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  348. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xce
  349. rm -f ${COMBRELOC}
  350. RELRO_NOW=" "
  351. LD_FLAG=w
  352. COMBRELOC=ldscripts/${EMULATION_NAME}.xw.tmp
  353. ( echo "/* Script for -z combreloc -z relro -z now */"
  354. source_sh ${CUSTOMIZER_SCRIPT}
  355. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  356. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xw
  357. rm -f ${COMBRELOC}
  358. LD_FLAG=wtextonly
  359. COMBRELOC=ldscripts/${EMULATION_NAME}.xwe.tmp
  360. ( echo "/* Script for -z combreloc -z separate-code -z relro -z now */"
  361. source_sh ${CUSTOMIZER_SCRIPT}
  362. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  363. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xwe
  364. rm -f ${COMBRELOC}
  365. COMBRELOC=
  366. unset RELRO_NOW
  367. if test -n "$GENERATE_RELRO_SCRIPT"; then
  368. LD_FLAG=c
  369. RELRO=" "
  370. COMBRELOC=ldscripts/${EMULATION_NAME}.xco.tmp
  371. ( echo "/* Script for -z combreloc -z relro */"
  372. source_sh ${CUSTOMIZER_SCRIPT}
  373. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  374. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xco
  375. rm -f ${COMBRELOC}
  376. LD_FLAG=ctextonly
  377. COMBRELOC=ldscripts/${EMULATION_NAME}.xceo.tmp
  378. ( echo "/* Script for -z combreloc -z separate-code -z relro */"
  379. source_sh ${CUSTOMIZER_SCRIPT}
  380. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  381. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xceo
  382. rm -f ${COMBRELOC}
  383. COMBRELOC=
  384. unset RELRO
  385. fi
  386. fi
  387. if test -n "$GENERATE_SHLIB_SCRIPT"; then
  388. DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
  389. CREATE_SHLIB=" "
  390. LD_FLAG=shared
  391. ( echo "/* Script for -shared */"
  392. source_sh ${CUSTOMIZER_SCRIPT}
  393. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  394. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs
  395. LD_FLAG=sharedtextonly
  396. ( echo "/* Script for -shared -z separate-code */"
  397. source_sh ${CUSTOMIZER_SCRIPT}
  398. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  399. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xse
  400. if test -n "$GENERATE_RELRO_SCRIPT"; then
  401. RELRO=" "
  402. LD_FLAG=shared
  403. ( echo "/* Script for -shared -z relro */"
  404. source_sh ${CUSTOMIZER_SCRIPT}
  405. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  406. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xso
  407. LD_FLAG=sharedtextonly
  408. ( echo "/* Script for -shared -z separate-code -z relro */"
  409. source_sh ${CUSTOMIZER_SCRIPT}
  410. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  411. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xseo
  412. unset RELRO
  413. fi
  414. if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
  415. DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
  416. LD_FLAG=cshared
  417. COMBRELOC=ldscripts/${EMULATION_NAME}.xsc.tmp
  418. ( echo "/* Script for -shared -z combreloc */"
  419. source_sh ${CUSTOMIZER_SCRIPT}
  420. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  421. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc
  422. rm -f ${COMBRELOC}
  423. LD_FLAG=csharedtextonly
  424. COMBRELOC=ldscripts/${EMULATION_NAME}.xsce.tmp
  425. ( echo "/* Script for -shared -z combreloc -z separate-code */"
  426. source_sh ${CUSTOMIZER_SCRIPT}
  427. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  428. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsce
  429. rm -f ${COMBRELOC}
  430. RELRO_NOW=" "
  431. LD_FLAG=wshared
  432. COMBRELOC=ldscripts/${EMULATION_NAME}.xsw.tmp
  433. ( echo "/* Script for -shared -z combreloc -z relro -z now */"
  434. source_sh ${CUSTOMIZER_SCRIPT}
  435. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  436. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsw
  437. rm -f ${COMBRELOC}
  438. LD_FLAG=wsharedtextonly
  439. COMBRELOC=ldscripts/${EMULATION_NAME}.xswe.tmp
  440. ( echo "/* Script for -shared -z combreloc -z separate-code -z relro -z now */"
  441. source_sh ${CUSTOMIZER_SCRIPT}
  442. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  443. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xswe
  444. rm -f ${COMBRELOC}
  445. unset RELRO_NOW
  446. if test -n "$GENERATE_RELRO_SCRIPT"; then
  447. LD_FLAG=wshared
  448. RELRO=" "
  449. COMBRELOC=ldscripts/${EMULATION_NAME}.xsco.tmp
  450. ( echo "/* Script for -shared -z combreloc -z relro */"
  451. source_sh ${CUSTOMIZER_SCRIPT}
  452. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  453. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsco
  454. rm -f ${COMBRELOC}
  455. LD_FLAG=wsharedtextonly
  456. COMBRELOC=ldscripts/${EMULATION_NAME}.xsceo.tmp
  457. ( echo "/* Script for -shared -z combreloc -z separate-code -z relro */"
  458. source_sh ${CUSTOMIZER_SCRIPT}
  459. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  460. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsceo
  461. rm -f ${COMBRELOC}
  462. unset RELRO
  463. fi
  464. COMBRELOC=
  465. fi
  466. unset CREATE_SHLIB
  467. fi
  468. if test -n "$GENERATE_PIE_SCRIPT"; then
  469. DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
  470. CREATE_PIE=" "
  471. LD_FLAG=pie
  472. ( echo "/* Script for -pie */"
  473. source_sh ${CUSTOMIZER_SCRIPT}
  474. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  475. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xd
  476. LD_FLAG=pietextonly
  477. ( echo "/* Script for -pie -z separate-code */"
  478. source_sh ${CUSTOMIZER_SCRIPT}
  479. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  480. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xde
  481. if test -n "$GENERATE_RELRO_SCRIPT"; then
  482. RELRO=" "
  483. LD_FLAG=pie
  484. ( echo "/* Script for -pie -z relro */"
  485. source_sh ${CUSTOMIZER_SCRIPT}
  486. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  487. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdo
  488. LD_FLAG=pietextonly
  489. ( echo "/* Script for -pie -z separate-code -z relro */"
  490. source_sh ${CUSTOMIZER_SCRIPT}
  491. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  492. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdeo
  493. unset RELRO
  494. fi
  495. if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
  496. DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
  497. COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp
  498. LD_FLAG=cpie
  499. ( echo "/* Script for -pie -z combreloc */"
  500. source_sh ${CUSTOMIZER_SCRIPT}
  501. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  502. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdc
  503. rm -f ${COMBRELOC}
  504. LD_FLAG=cpietextonly
  505. COMBRELOC=ldscripts/${EMULATION_NAME}.xdce.tmp
  506. ( echo "/* Script for -pie -z combreloc -z separate-code */"
  507. source_sh ${CUSTOMIZER_SCRIPT}
  508. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  509. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdce
  510. rm -f ${COMBRELOC}
  511. RELRO_NOW=" "
  512. LD_FLAG=wpie
  513. COMBRELOC=ldscripts/${EMULATION_NAME}.xdw.tmp
  514. ( echo "/* Script for -pie -z combreloc -z relro -z now */"
  515. source_sh ${CUSTOMIZER_SCRIPT}
  516. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  517. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdw
  518. rm -f ${COMBRELOC}
  519. LD_FLAG=wpietextonly
  520. COMBRELOC=ldscripts/${EMULATION_NAME}.xdwe.tmp
  521. ( echo "/* Script for -pie -z combreloc -z separate-code -z relro -z now */"
  522. source_sh ${CUSTOMIZER_SCRIPT}
  523. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  524. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdwe
  525. rm -f ${COMBRELOC}
  526. unset RELRO_NOW
  527. if test -n "$GENERATE_RELRO_SCRIPT"; then
  528. LD_FLAG=wpie
  529. RELRO=" "
  530. COMBRELOC=ldscripts/${EMULATION_NAME}.xdco.tmp
  531. ( echo "/* Script for -pie -z combreloc -z relro */"
  532. source_sh ${CUSTOMIZER_SCRIPT}
  533. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  534. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdco
  535. rm -f ${COMBRELOC}
  536. LD_FLAG=wpietextonly
  537. COMBRELOC=ldscripts/${EMULATION_NAME}.xdceo.tmp
  538. ( echo "/* Script for -pie -z combreloc -z separate-code -z relro */"
  539. source_sh ${CUSTOMIZER_SCRIPT}
  540. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  541. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdceo
  542. rm -f ${COMBRELOC}
  543. unset RELRO
  544. fi
  545. COMBRELOC=
  546. fi
  547. unset CREATE_PIE
  548. fi
  549. if test -n "$GENERATE_AUTO_IMPORT_SCRIPT"; then
  550. LD_FLAG=auto_import
  551. DATA_ALIGNMENT=${DATA_ALIGNMENT_}
  552. ( echo "/* Script for --enable-auto-import */"
  553. source_sh ${CUSTOMIZER_SCRIPT}
  554. source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
  555. ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xa
  556. fi
  557. case "$COMPILE_IN: $EMULATION_LIBPATH " in
  558. :*" ${EMULATION_NAME} "*) COMPILE_IN=yes;;
  559. esac
  560. # PR ld/5652:
  561. # Determine if the shell has support for the variable BASH_LINENO.
  562. # When it is the case, it is only available inside functions.
  563. has_lineno()
  564. {
  565. test "x$BASH_LINENO" != "x"
  566. }
  567. # Enable accruate error source in the compiler error messages, if possible.
  568. if has_lineno; then
  569. . ${srcdir}/genscrba.sh
  570. else
  571. source_em()
  572. {
  573. source_sh $1
  574. }
  575. fragment()
  576. {
  577. cat >> e${EMULATION_NAME}.c
  578. }
  579. fi
  580. # Generate e${EMULATION_NAME}.c.
  581. # Start with an empty file, then the sourced .em script
  582. # can use the "fragment" function to append.
  583. > e${EMULATION_NAME}.c
  584. source_em ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em
  585. if test -n "${DEPDIR}"; then
  586. ecdeps=
  587. for dep in `cat ${DEPDIR}/e${EMULATION_NAME}.Tc`; do
  588. case " $ecdeps " in
  589. *" $dep "*): ;;
  590. *) ecdeps="$ecdeps $dep" ;;
  591. esac
  592. done
  593. rm -f ${DEPDIR}/e${EMULATION_NAME}.Tc
  594. echo "e${EMULATION_NAME}.c:${ecdeps}" > ${DEPDIR}/e${EMULATION_NAME}.Pc
  595. fi