makerumpsyscalls.sh revision 1.2
11.1Spooka#!/bin/sh
21.1Spooka#
31.2Spooka#	$NetBSD: makerumpsyscalls.sh,v 1.2 2014/04/27 16:28:21 pooka Exp $
41.1Spooka#
51.1Spooka
61.1Spooka#
71.1Spooka# This utility generates component-specific initializers for the
81.1Spooka# rump kernel syscall vector.
91.1Spooka#
101.1Spooka# Procedure is:
111.1Spooka#   1) edit syscalls.master
121.1Spooka#   2) run makesyscalls.sh
131.1Spooka#   3) do a build in sys/rump
141.1Spooka#   4) run this script
151.1Spooka#   5) commit results
161.1Spooka#
171.1Spooka
181.1Spooka# default, override by giving argument
191.1SpookaLIBDIR=/usr/lib
201.1Spooka
211.1SpookaSYSCOMPONENT_librump=librump/rumpkern/rumpkern_syscalls.c
221.1SpookaSYSCOMPONENT_librumpnet=librump/rumpnet/rumpnet_syscalls.c
231.1SpookaSYSCOMPONENT_librumpvfs=librump/rumpvfs/rumpvfs_syscalls.c
241.1Spooka
251.1Spookadie ()
261.1Spooka{
271.1Spooka
281.1Spooka	echo '>> ERROR:' $*
291.1Spooka	exit 1
301.1Spooka}
311.1Spooka
321.1Spooka[ -f "./rump.sysmap" ] || die rump.sysmap not found
331.1Spooka[ -f "./Makefile.rump" ] || die run script in src/sys/rump
341.1Spooka[ -z "${1}" ] || LIBDIR=$1
351.1Spooka
361.1Spooka#
371.1Spooka# BEGIN
381.1Spooka#
391.1Spooka
401.1SpookaIFS=' '
411.1SpookaAWKPROG='BEGIN {
421.1Spooka	while ((getline < "rump.sysmap") == 1) {
431.1Spooka		if ($2 != "sys_nomodule")
441.1Spooka			syscalls[$2] = $1
451.1Spooka	}
461.1Spooka}
471.1Spooka
481.1Spooka$5 == "GLOBAL" && $7 != "UND" {
491.1Spooka	sub("rumpns_", "", $8)
501.1Spooka	if (syscalls[$8] != 0)
511.1Spooka		results[$8] = 1
521.1Spooka}
531.1Spooka
541.1SpookaEND {
551.1Spooka	for (res in results) {
561.1Spooka		printf "%d %s\n", syscalls[res], res | "sort -n"
571.1Spooka	}
581.1Spooka}
591.1Spooka'
601.1Spooka
611.2SpookaSYSCOMP_HDR='/*	$NetBSD: makerumpsyscalls.sh,v 1.2 2014/04/27 16:28:21 pooka Exp $	*/
621.1Spooka
631.1Spooka/* AUTOMATICALLY GENERATED BY makerumpsyscalls.sh */
641.1Spooka
651.1Spooka#include <sys/cdefs.h>
661.2Spooka__KERNEL_RCSID(0, "$NetBSD: makerumpsyscalls.sh,v 1.2 2014/04/27 16:28:21 pooka Exp $");
671.1Spooka
681.1Spooka#include <sys/param.h>
691.1Spooka
701.1Spooka#include "rump_private.h"
711.1Spooka'
721.1Spooka
731.1SpookaSYSCOMP_BODY='
741.1SpookaRUMP_COMPONENT(RUMP_COMPONENT_SYSCALL)
751.1Spooka{
761.1Spooka
771.1Spooka	rump_syscall_boot_establish(mysys, __arraycount(mysys));
781.1Spooka}'
791.1Spooka
801.1Spookamakesyscomponent ()
811.1Spooka{
821.1Spooka
831.1Spooka	echo Generating $1
841.1Spooka	exec 3>&1 >${1}
851.1Spooka
861.1Spooka	echo "${SYSCOMP_HDR}"
871.1Spooka
881.2Spooka	echo ${2} | awk '{printf "extern sy_call_t %s;\n", $2}'
891.1Spooka	printf '\nstatic const struct rump_onesyscall mysys[] = {\n'
901.1Spooka	echo ${2} | awk '{printf "\t{ %d,\t%s },\n", $1, $2}'
911.1Spooka	printf '};\n'
921.1Spooka
931.1Spooka	echo "${SYSCOMP_BODY}"
941.1Spooka
951.1Spooka	exec 1>&3
961.1Spooka}
971.1Spooka
981.1Spookasawlibrump=false
991.1Spookafor file in ${LIBDIR}/librump*.so ; do
1001.1Spooka	b=$(basename ${file})
1011.1Spooka	b=${b%%.*}
1021.1Spooka	res=$(readelf -W --syms ${file} | awk "${AWKPROG}")
1031.1Spooka	if [ ! -z "${res}" ]; then
1041.1Spooka		eval outname=\${SYSCOMPONENT_${b}}
1051.1Spooka		[ -z "${outname}" ] && die Unknown syscall provider $b
1061.1Spooka		makesyscomponent $outname "$res"
1071.1Spooka
1081.1Spooka		[ $b = "librump" ] && sawlibrump=true
1091.1Spooka	fi
1101.1Spookadone
1111.1Spooka
1121.1Spooka${sawlibrump} || die Did not see librump.  Wrong directory?
113