1999-05-03 15:29:11 +08:00
#!/bin/sh
# genscripts.sh - generate the ld-emulation-target specific files
2018-01-03 13:17:27 +08:00
# Copyright (C) 2004-2018 Free Software Foundation, Inc.
2007-07-06 22:09:45 +08:00
#
# This file is part of the Gnu Linker.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GLD; see the file COPYING. If not, write to the Free
# Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
# 02110-1301, USA.
1999-05-03 15:29:11 +08:00
#
2003-10-16 16:46:35 +08:00
# Usage: genscripts_extra.sh \
# srcdir \
# libdir \
2006-04-05 23:40:40 +08:00
# prefix \
2003-10-16 16:46:35 +08:00
# exec_prefix \
# host \
# target \
# target_alias \
# default_emulation \
# native_lib_dirs \
# use_sysroot \
2010-12-15 22:56:40 +08:00
# enable_initfini_array \
2003-10-16 16:46:35 +08:00
# this_emulation \
# optional:
2014-06-02 12:24:54 +08:00
# tool_dir
1999-05-03 15:29:11 +08:00
#
# Sample usage:
2003-10-16 16:46:35 +08:00
#
# genscripts_extra.sh \
# /sources/ld \
# /usr/local/lib \
# /usr/local \
2006-04-05 23:40:40 +08:00
# /usr/local \
2003-10-16 16:46:35 +08:00
# sparc-sun-sunos4.1.3 \
# sparc-sun-sunos4.1.3 \
# sparc-sun-sunos4.1.3 \
# sun4 \
# "" \
# no \
# sun3 \
# sparc-sun-sunos4.1.3 \
# sparc.sh
#
# produces the linker scripts:
#
# sun3.x [default linker script]
# sun3.xbn [used when the linker is invoked with "-N"]
# sun3.xn [used when the linker is invoked with "-n"]
# sun3.xr [used when the linker is invoked with "-r"]
# sun3.xu [used when the linker is invoked with "-Ur"]
# and maybe:
# sun3.xc [used when the linker is invoked with "-z combreloc"]
# sun3.xsc [used when the linker is invoked with "--shared"]
# sun3.xdc [used when the linker is invoked with "-pie"]
2007-10-01 17:54:58 +08:00
# sun3.xa [used when the linker is invoked with "--enable-auto-import"]
2003-10-16 16:46:35 +08:00
#
# It also produced the C source file:
#
# em_sun3.c
#
# which is then compiled into the linker.
#
# The linker scripts are created by running the shell script
# /sources/ld/emulparams/sparc.sh to set the value of ${SCRIPT_NAME}
# (and any other variables it wants to). ${SCRIPT_NAME} is then
# invoked with a variable called ${LD_FLAG} to tell it which version
# of the linker script to create.
1999-05-03 15:29:11 +08:00
srcdir = $1
libdir = $2
2006-04-05 23:40:40 +08:00
prefix = $3
exec_prefix = $4
host = $5
target = $6
target_alias = $7
EMULATION_LIBPATH = $8
NATIVE_LIB_DIRS = $9
2001-01-22 21:50:17 +08:00
shift 9
2006-04-05 23:40:40 +08:00
use_sysroot = $1
2010-12-15 22:56:40 +08:00
ENABLE_INITFINI_ARRAY = $2
EMULATION_NAME = $3
TOOL_LIB = $4
1999-05-03 15:29:11 +08:00
# Include the emulation-specific parameters:
2014-06-02 12:24:54 +08:00
CUSTOMIZER_SCRIPT = " ${ srcdir } /emulparams/ ${ EMULATION_NAME } .sh "
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
1999-05-03 15:29:11 +08:00
if test -d ldscripts; then
true
else
mkdir ldscripts
fi
2003-01-07 00:14:01 +08:00
# Set some flags for the emultempl scripts. USE_LIBPATH will
# be set for any libpath-using emulation; NATIVE will be set for a
# libpath-using emulation where ${host} = ${target}. NATIVE
# may already have been set by the emulparams file, but that's OK
# (it'll just get set to "yes" twice).
case " $EMULATION_LIBPATH " in
*" ${ EMULATION_NAME } " *)
if [ " x ${ host } " = " x ${ target } " ] ; then
NATIVE = yes
USE_LIBPATH = yes
elif [ " x ${ use_sysroot } " = "xyes" ] ; then
USE_LIBPATH = yes
fi
; ;
esac
# If the emulparams file sets NATIVE, make sure USE_LIBPATH is set also.
if test " x $NATIVE " = "xyes" ; then
USE_LIBPATH = yes
fi
1999-05-03 15:29:11 +08:00
# Set the library search path, for libraries named by -lfoo.
# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
# Otherwise, the default is set here.
#
# The format is the usual list of colon-separated directories.
# To force a logically empty LIB_PATH, do LIBPATH=":".
2003-01-07 00:14:01 +08:00
#
# If we are using a sysroot, prefix library paths with "=" to indicate this.
#
# If the emulparams file set LIBPATH_SUFFIX, prepend an extra copy of
# the library path with the suffix applied.
1999-05-03 15:29:11 +08:00
2013-09-24 13:59:55 +08:00
# Paths with LIBPATH_SUFFIX
lib_path1 =
# Paths without LIBPATH_SUFFIX
lib_path2 =
if [ " ${ LIB_PATH } " != ":" ] ; then
lib_path2 = ${ LIB_PATH }
fi
2004-01-28 21:31:30 +08:00
2013-09-24 13:59:55 +08:00
# Add args to lib_path1 and lib_path2, discarding any duplicates
append_to_lib_path( )
{
if [ $# != 0 ] ; then
for lib in " $@ " ; do
# The "=" is harmless if we aren't using a sysroot, but also needless.
if [ " x ${ use_sysroot } " = "xyes" ] ; then
lib = " = ${ lib } "
fi
2014-01-16 04:53:04 +08:00
skip_lib = no
2013-09-24 13:59:55 +08:00
if test -n " ${ LIBPATH_SUFFIX } " ; then
case " ${ lib } " in
*${ LIBPATH_SUFFIX } )
case :${ lib_path1 } : in
*:${ lib } :*) ; ;
::) lib_path1 = ${ lib } ; ;
*) lib_path1 = ${ lib_path1 } :${ lib } ; ;
esac ; ;
*)
2014-01-16 04:53:04 +08:00
if test -n " ${ LIBPATH_SUFFIX_SKIP } " ; then
case " ${ lib } " in
*${ LIBPATH_SUFFIX_SKIP } ) skip_lib = yes ; ;
esac
fi
if test " ${ skip_lib } " = "no" ; then
case :${ lib_path1 } : in
*:${ lib } ${ LIBPATH_SUFFIX } :*) ; ;
::) lib_path1 = ${ lib } ${ LIBPATH_SUFFIX } ; ;
*) lib_path1 = ${ lib_path1 } :${ lib } ${ LIBPATH_SUFFIX } ; ;
esac
fi ; ;
esac
fi
if test " ${ skip_lib } " = "no" ; then
case :${ lib_path1 } :${ lib_path2 } : in
*:${ lib } :*) ; ;
*::) lib_path2 = ${ lib } ; ;
*) lib_path2 = ${ lib_path2 } :${ lib } ; ;
2013-09-24 13:59:55 +08:00
esac
fi
done
fi
}
# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib when native
# except when LIBPATH=":".
if [ " ${ LIB_PATH } " != ":" ] ; then
libs =
if [ " x ${ TOOL_LIB } " = "x" ] ; then
if [ " x ${ NATIVE } " = "xyes" ] ; then
libs = " ${ exec_prefix } / ${ target_alias } /lib "
2003-02-07 22:21:03 +08:00
fi
2013-09-24 13:59:55 +08:00
else
# For multilib'ed targets, ensure both ${target_alias}/lib${LIBPATH_SUFFIX}
# and ${TOOL_LIB}/lib${LIBPATH_SUFFIX} are in the default search path,
# because 64bit libraries may be in both places, depending on
# cross-development setup method (e.g.: /usr/s390x-linux/lib64
# vs. /usr/s390-linux/lib64)
case " ${ NATIVE } : ${ LIBPATH_SUFFIX } : ${ TOOL_LIB } " in
:* | *::* | *:*:*${ LIBPATH_SUFFIX } ) ; ;
*) libs = " ${ exec_prefix } / ${ target_alias } /lib ${ LIBPATH_SUFFIX } " ; ;
esac
libs = " ${ exec_prefix } / ${ TOOL_LIB } /lib ${ libs } "
fi
append_to_lib_path ${ libs }
1999-05-03 15:29:11 +08:00
fi
2013-09-24 13:59:55 +08:00
if [ " x ${ LIB_PATH } " = "x" ] && [ " x ${ USE_LIBPATH } " = xyes ] ; then
libs = ${ NATIVE_LIB_DIRS }
if [ " x ${ NATIVE } " = "xyes" ] ; then
case " ${ libs } " in
*" ${ libdir } " *) ; ;
*) libs = " ${ libdir } ${ libs } " ; ;
2006-10-07 04:10:37 +08:00
esac
fi
2013-09-24 13:59:55 +08:00
append_to_lib_path ${ libs }
2003-01-07 00:14:01 +08:00
fi
1999-05-03 15:29:11 +08:00
2013-09-24 13:59:55 +08:00
case :${ lib_path1 } :${ lib_path2 } : in
*:: | ::*) LIB_PATH = ${ lib_path1 } ${ lib_path2 } ; ;
*) LIB_PATH = ${ lib_path1 } :${ lib_path2 } ; ;
esac
2002-05-22 16:44:53 +08:00
LIB_SEARCH_DIRS = ` echo ${ LIB_PATH } | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g' `
1999-05-03 15:29:11 +08:00
2003-05-30 21:23:25 +08:00
# We need it for testsuite.
2004-10-21 23:20:35 +08:00
set $EMULATION_LIBPATH
if [ " x $1 " = " x $EMULATION_NAME " ] ; then
2003-05-30 21:23:25 +08:00
test -d tmpdir || mkdir tmpdir
2004-10-21 23:20:35 +08:00
rm -f tmpdir/libpath.exp
2003-05-30 21:23:25 +08:00
echo " set libpath \" ${ LIB_PATH } \" " | sed -e 's/:/ /g' > tmpdir/libpath.exp
2004-10-21 23:20:35 +08:00
fi
2003-05-30 21:23:25 +08:00
1999-05-03 15:29:11 +08:00
# Generate 5 or 6 script files from a master script template in
# ${srcdir}/scripttempl/${SCRIPT_NAME}.sh. Which one of the 5 or 6
# script files is actually used depends on command line options given
# to ld. (SCRIPT_NAME was set in the emulparams_file.)
#
# A .x script file is the default script.
# A .xr script is for linking without relocation (-r flag).
# A .xu script is like .xr, but *do* create constructors (-Ur flag).
# A .xn script is for linking with -n flag (mix text and data on same page).
# A .xbn script is for linking with -N flag (mix text and data on same page).
# A .xs script is for generating a shared library with the --shared
# flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the
# emulation parameters.
2001-08-23 23:14:18 +08:00
# A .xc script is for linking with -z combreloc; it is only generated if
# $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
# $SCRIPT_NAME is "elf".
# A .xsc script is for linking with --shared -z combreloc; it is generated
# if $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
# $SCRIPT_NAME is "elf" and $GENERATE_SHLIB_SCRIPT is set by the emulation
# parameters too.
if [ " x $SCRIPT_NAME " = "xelf" ] ; then
GENERATE_COMBRELOC_SCRIPT = yes
fi
1999-05-03 15:29:11 +08:00
2002-09-25 15:21:08 +08:00
SEGMENT_SIZE = ${ SEGMENT_SIZE - ${ MAXPAGESIZE - ${ TARGET_PAGE_SIZE } } }
1999-05-03 15:29:11 +08:00
# Determine DATA_ALIGNMENT for the 5 variants, using
2003-10-16 16:46:35 +08:00
# values specified in the emulparams/<script_to_run>.sh file or default.
1999-05-03 15:29:11 +08:00
DATA_ALIGNMENT_ = " ${ DATA_ALIGNMENT_ - ${ DATA_ALIGNMENT -ALIGN( ${ SEGMENT_SIZE } ) } } "
DATA_ALIGNMENT_n = " ${ DATA_ALIGNMENT_n - ${ DATA_ALIGNMENT_ } } "
DATA_ALIGNMENT_N = " ${ DATA_ALIGNMENT_N - ${ DATA_ALIGNMENT -. } } "
DATA_ALIGNMENT_r = " ${ DATA_ALIGNMENT_r - ${ DATA_ALIGNMENT - } } "
DATA_ALIGNMENT_u = " ${ DATA_ALIGNMENT_u - ${ DATA_ALIGNMENT_r } } "
LD_FLAG = r
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_r }
DEFAULT_DATA_ALIGNMENT = " ALIGN( ${ SEGMENT_SIZE } ) "
2001-10-04 05:36:43 +08:00
( echo "/* Script for ld -r: link without relocation */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-08 21:14:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xr
1999-05-03 15:29:11 +08:00
LD_FLAG = u
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_u }
CONSTRUCTING = " "
2001-10-04 05:36:43 +08:00
( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-08 21:14:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xu
1999-05-03 15:29:11 +08:00
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_ }
RELOCATING = " "
2018-01-12 11:01:39 +08:00
LD_FLAG =
2001-10-04 05:36:43 +08:00
( echo "/* Default linker script, for normal executables */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-08 21:14:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .x
1999-05-03 15:29:11 +08:00
2018-01-12 11:01:39 +08:00
LD_FLAG = textonly
( echo "/* Script for -z separate-code: generate normal executables with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xe
1999-05-03 15:29:11 +08:00
LD_FLAG = n
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_n }
2001-10-04 05:36:43 +08:00
( echo "/* Script for -n: mix text and data on same page */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-08 21:14:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xn
1999-05-03 15:29:11 +08:00
LD_FLAG = N
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_N }
2001-10-04 05:36:43 +08:00
( echo "/* Script for -N: mix text and data on same page; don't align data */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-08 21:14:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xbn
2001-08-23 23:14:18 +08:00
if test -n " $GENERATE_COMBRELOC_SCRIPT " ; then
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_c - ${ DATA_ALIGNMENT_ } }
LD_FLAG = c
COMBRELOC = ldscripts/${ EMULATION_NAME } .xc.tmp
2001-10-06 00:40:23 +08:00
( echo "/* Script for -z combreloc: combine and sort reloc sections */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-23 23:14:18 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xc
2001-08-23 23:14:18 +08:00
rm -f ${ COMBRELOC }
2018-01-12 11:01:39 +08:00
LD_FLAG = ctextonly
COMBRELOC = ldscripts/${ EMULATION_NAME } .xce.tmp
( echo "/* Script for -z combreloc -z separate-code: combine and sort reloc sections with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xce
rm -f ${ COMBRELOC }
2004-05-12 01:08:38 +08:00
RELRO_NOW = " "
2018-01-12 11:01:39 +08:00
LD_FLAG = w
2004-05-12 01:08:38 +08:00
COMBRELOC = ldscripts/${ EMULATION_NAME } .xw.tmp
( echo "/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2004-05-12 01:08:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xw
2004-05-12 01:08:38 +08:00
rm -f ${ COMBRELOC }
2018-01-12 11:01:39 +08:00
LD_FLAG = wtextonly
COMBRELOC = ldscripts/${ EMULATION_NAME } .xwe.tmp
( echo "/* Script for -z combreloc -z now -z relro -z separate-code: combine and sort reloc sections with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xwe
rm -f ${ COMBRELOC }
2001-08-23 23:14:18 +08:00
COMBRELOC =
2004-05-12 01:08:38 +08:00
unset RELRO_NOW
2001-08-23 23:14:18 +08:00
fi
1999-05-03 15:29:11 +08:00
if test -n " $GENERATE_SHLIB_SCRIPT " ; then
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_s - ${ DATA_ALIGNMENT_ } }
CREATE_SHLIB = " "
2018-01-12 11:01:39 +08:00
LD_FLAG = shared
2001-10-04 05:36:43 +08:00
(
echo "/* Script for ld --shared: link shared library */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-08 21:14:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xs
2018-01-12 11:01:39 +08:00
LD_FLAG = sharedtextonly
(
echo "/* Script for ld --shared -z separate-code: link shared library with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xse
2001-08-23 23:14:18 +08:00
if test -n " $GENERATE_COMBRELOC_SCRIPT " ; then
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_sc - ${ DATA_ALIGNMENT } }
2018-01-12 11:01:39 +08:00
LD_FLAG = cshared
2004-05-12 01:08:38 +08:00
COMBRELOC = ldscripts/${ EMULATION_NAME } .xsc.tmp
2001-10-04 05:36:43 +08:00
( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2001-08-23 23:14:18 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xsc
2001-08-23 23:14:18 +08:00
rm -f ${ COMBRELOC }
2018-01-12 11:01:39 +08:00
LD_FLAG = csharedtextonly
COMBRELOC = ldscripts/${ EMULATION_NAME } .xsce.tmp
( echo "/* Script for --shared -z combreloc -z separate-code: shared library, combine & sort relocs with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xsce
rm -f ${ COMBRELOC }
2004-05-12 01:08:38 +08:00
RELRO_NOW = " "
2018-01-12 11:01:39 +08:00
LD_FLAG = wshared
2004-05-12 01:08:38 +08:00
COMBRELOC = ldscripts/${ EMULATION_NAME } .xsw.tmp
( echo "/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2004-05-12 01:08:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xsw
2004-05-12 01:08:38 +08:00
rm -f ${ COMBRELOC }
2018-01-12 11:01:39 +08:00
LD_FLAG = wsharedtextonly
COMBRELOC = ldscripts/${ EMULATION_NAME } .xswe.tmp
( echo "/* Script for --shared -z combreloc -z now -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xswe
rm -f ${ COMBRELOC }
2001-08-23 23:14:18 +08:00
COMBRELOC =
2004-05-12 01:08:38 +08:00
unset RELRO_NOW
2001-08-23 23:14:18 +08:00
fi
2003-05-30 23:50:12 +08:00
unset CREATE_SHLIB
fi
if test -n " $GENERATE_PIE_SCRIPT " ; then
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_s - ${ DATA_ALIGNMENT_ } }
CREATE_PIE = " "
2018-01-12 11:01:39 +08:00
LD_FLAG = pie
2003-05-30 23:50:12 +08:00
(
echo "/* Script for ld -pie: link position independent executable */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2003-05-30 23:50:12 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xd
2018-01-12 11:01:39 +08:00
LD_FLAG = pietextonly
(
echo "/* Script for ld -pie -z separate-code: link position independent executable with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xde
2003-05-30 23:50:12 +08:00
if test -n " $GENERATE_COMBRELOC_SCRIPT " ; then
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_sc - ${ DATA_ALIGNMENT } }
2004-05-12 01:08:38 +08:00
COMBRELOC = ldscripts/${ EMULATION_NAME } .xdc.tmp
2018-01-12 11:01:39 +08:00
LD_FLAG = cpie
2003-05-30 23:50:12 +08:00
( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2003-05-30 23:50:12 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xdc
2003-05-30 23:50:12 +08:00
rm -f ${ COMBRELOC }
2018-01-12 11:01:39 +08:00
LD_FLAG = cpietextonly
COMBRELOC = ldscripts/${ EMULATION_NAME } .xdce.tmp
( echo "/* Script for -pie -z combreloc -z separate-code: position independent executable, combine & sort relocs with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xdce
rm -f ${ COMBRELOC }
2004-05-12 01:08:38 +08:00
RELRO_NOW = " "
2018-01-12 11:01:39 +08:00
LD_FLAG = wpie
2004-05-12 01:08:38 +08:00
COMBRELOC = ldscripts/${ EMULATION_NAME } .xdw.tmp
( echo "/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2004-05-12 01:08:38 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xdw
2004-05-12 01:08:38 +08:00
rm -f ${ COMBRELOC }
2018-01-12 11:01:39 +08:00
LD_FLAG = wpietextonly
COMBRELOC = ldscripts/${ EMULATION_NAME } .xdwe.tmp
( echo "/* Script for -pie -z combreloc -z now -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */"
. ${ CUSTOMIZER_SCRIPT }
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xdwe
rm -f ${ COMBRELOC }
2003-05-30 23:50:12 +08:00
COMBRELOC =
2004-05-12 01:08:38 +08:00
unset RELRO_NOW
2003-05-30 23:50:12 +08:00
fi
unset CREATE_PIE
1999-05-03 15:29:11 +08:00
fi
2007-10-01 17:54:58 +08:00
if test -n " $GENERATE_AUTO_IMPORT_SCRIPT " ; then
LD_FLAG = auto_import
DATA_ALIGNMENT = ${ DATA_ALIGNMENT_ }
(
echo "/* Script for ld --enable-auto-import: Like the default script except read only data is placed into .data */"
2009-04-24 23:06:15 +08:00
. ${ CUSTOMIZER_SCRIPT }
2007-10-01 17:54:58 +08:00
. ${ srcdir } /scripttempl/${ SCRIPT_NAME } .sc
2017-10-12 18:58:30 +08:00
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${ EMULATION_NAME } .xa
2007-10-01 17:54:58 +08:00
fi
2014-01-17 08:09:50 +08:00
case " $COMPILE_IN : $EMULATION_LIBPATH " in
:*" ${ EMULATION_NAME } " *) COMPILE_IN = yes; ;
2002-05-22 16:44:53 +08:00
esac
1999-05-03 15:29:11 +08:00
2008-01-28 19:07:44 +08:00
# PR ld/5652:
# Determine if the shell has support for the variable BASH_LINENO.
# When it is the case, it is only available inside functions.
has_lineno( )
{
test " x $BASH_LINENO " != "x"
}
# Enable accruate error source in the compiler error messages, if possible.
if has_lineno; then
2007-10-26 14:33:59 +08:00
. ${ srcdir } /genscrba.sh
2007-07-20 03:56:10 +08:00
else
source_em( )
{
. $1
}
fragment( )
{
cat >> e${ EMULATION_NAME } .c
}
fi
1999-05-03 15:29:11 +08:00
# Generate e${EMULATION_NAME}.c.
2007-07-20 03:56:10 +08:00
# Start with an empty file, then the sourced .em script
# can use the "fragment" function to append.
> e${ EMULATION_NAME } .c
source_em ${ srcdir } /emultempl/${ TEMPLATE_NAME -generic } .em