xref: /netbsd-src/sys/conf/mkldscript.sh (revision f0d25730ac163f133807e3316b500d3b9559936d)
14f4391e3Stsutsui#!/bin/sh
2*f0d25730Schristos#	$NetBSD: mkldscript.sh,v 1.3 2014/11/12 13:23:41 christos Exp $
3*f0d25730Schristos#
4*f0d25730Schristos#	This script is used by cats, luna68k and shark to produce
5*f0d25730Schristos#	a kernel linker script that merges link sets for a.out kernels
6*f0d25730Schristos#	(without -t). It is also used for the same reason by kernel modules
7*f0d25730Schristos#	(with -t).
84f4391e3Stsutsui
9*f0d25730SchristosPROG="$(basename "$0")"
10*f0d25730SchristosTEMPLATE=
114f4391e3Stsutsui
120b973a3fSchristosmksets() {
130b973a3fSchristos    "${OBJDUMP:-objdump}" -x "$@" | fgrep "RELOCATION RECORDS FOR [link_set" | \
140b973a3fSchristos        sort -u | sed 's/^.*\[\(.*\)\]:$/\1/'
150b973a3fSchristos}
16*f0d25730Schristos
17*f0d25730Schristoswhile getopts "t:" f; do
18*f0d25730Schristos	case "$f" in
19*f0d25730Schristos	t)
20*f0d25730Schristos		TEMPLATE=${OPTARG};;
21*f0d25730Schristos	*)
22*f0d25730Schristos		echo "Usage: $PROG [-t <template>] objs" 1>^&2
23*f0d25730Schristos		exit 1;;
24*f0d25730Schristos	esac
25*f0d25730Schristosdone
26*f0d25730Schristos
27*f0d25730Schristosshift $((OPTIND - 1))
28*f0d25730Schristos
290b973a3fSchristosSETS=$(mksets "$@")
304f4391e3Stsutsui
31*f0d25730Schristosif [ -n "${TEMPLATE}" ]; then
32*f0d25730Schristos	grep -v '^}$' "${TEMPLATE}"
33*f0d25730Schristosfi
340b973a3fSchristos
354f4391e3Stsutsuifor s in $SETS; do
360b973a3fSchristos        printf '   . = ALIGN(4);\n'
370b973a3fSchristos        printf '   PROVIDE (__start_%s = .);\n' $s
38*f0d25730Schristos	if [ -n "${TEMPLATE}" ]; then
390b973a3fSchristos		printf '   %s : { *(%s) }\n' $s $s
40*f0d25730Schristos	else
41*f0d25730Schristos		printf '   *(%s)\n' $s
42*f0d25730Schristos	fi
430b973a3fSchristos        printf '   PROVIDE (__stop_%s = .);\n' $s
444f4391e3Stsutsuidone
45*f0d25730Schristos
46*f0d25730Schristosif [ -n "${TEMPLATE}" ]; then
470b973a3fSchristos	printf '}\n'
48*f0d25730Schristosfi
49