1#!/bin/sh
2#	$NetBSD: mkldscript.sh,v 1.3 2014/11/12 13:23:41 christos Exp $
3#
4#	This script is used by cats, luna68k and shark to produce
5#	a kernel linker script that merges link sets for a.out kernels
6#	(without -t). It is also used for the same reason by kernel modules
7#	(with -t).
8
9PROG="$(basename "$0")"
10TEMPLATE=
11
12mksets() {
13    "${OBJDUMP:-objdump}" -x "$@" | fgrep "RELOCATION RECORDS FOR [link_set" | \
14        sort -u | sed 's/^.*\[\(.*\)\]:$/\1/'
15}
16
17while getopts "t:" f; do
18	case "$f" in
19	t)
20		TEMPLATE=${OPTARG};;
21	*)
22		echo "Usage: $PROG [-t <template>] objs" 1>^&2
23		exit 1;;
24	esac
25done
26
27shift $((OPTIND - 1))
28
29SETS=$(mksets "$@")
30
31if [ -n "${TEMPLATE}" ]; then
32	grep -v '^}$' "${TEMPLATE}"
33fi
34
35for s in $SETS; do
36        printf '   . = ALIGN(4);\n'
37        printf '   PROVIDE (__start_%s = .);\n' $s
38	if [ -n "${TEMPLATE}" ]; then
39		printf '   %s : { *(%s) }\n' $s $s
40	else
41		printf '   *(%s)\n' $s
42	fi
43        printf '   PROVIDE (__stop_%s = .);\n' $s
44done
45
46if [ -n "${TEMPLATE}" ]; then
47	printf '}\n'
48fi
49