49 lines
1.0 KiB
Bash
49 lines
1.0 KiB
Bash
#!/bin/sh
|
|
# $NetBSD: mkldscript.sh,v 1.3 2014/11/12 13:23:41 christos Exp $
|
|
#
|
|
# This script is used by cats, luna68k and shark to produce
|
|
# a kernel linker script that merges link sets for a.out kernels
|
|
# (without -t). It is also used for the same reason by kernel modules
|
|
# (with -t).
|
|
|
|
PROG="$(basename "$0")"
|
|
TEMPLATE=
|
|
|
|
mksets() {
|
|
"${OBJDUMP:-objdump}" -x "$@" | fgrep "RELOCATION RECORDS FOR [link_set" | \
|
|
sort -u | sed 's/^.*\[\(.*\)\]:$/\1/'
|
|
}
|
|
|
|
while getopts "t:" f; do
|
|
case "$f" in
|
|
t)
|
|
TEMPLATE=${OPTARG};;
|
|
*)
|
|
echo "Usage: $PROG [-t <template>] objs" 1>^&2
|
|
exit 1;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
SETS=$(mksets "$@")
|
|
|
|
if [ -n "${TEMPLATE}" ]; then
|
|
grep -v '^}$' "${TEMPLATE}"
|
|
fi
|
|
|
|
for s in $SETS; do
|
|
printf ' . = ALIGN(4);\n'
|
|
printf ' PROVIDE (__start_%s = .);\n' $s
|
|
if [ -n "${TEMPLATE}" ]; then
|
|
printf ' %s : { *(%s) }\n' $s $s
|
|
else
|
|
printf ' *(%s)\n' $s
|
|
fi
|
|
printf ' PROVIDE (__stop_%s = .);\n' $s
|
|
done
|
|
|
|
if [ -n "${TEMPLATE}" ]; then
|
|
printf '}\n'
|
|
fi
|