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