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