1#!/bin/sh 2 3makealias () 4{ 5 6 printf "\n" >> ${OUTPUT} 7 printf "__weak_alias(%s,_stubnosys);\n" $1 >> ${OUTPUT} 8 printf "__weak_alias(_%s,_stubnosys);\n" $1 >> ${OUTPUT} 9 printf "__strong_alias(_sys_%s,_stubnosys);\n" $1 >> ${OUTPUT} 10} 11 12[ $# -eq 4 ] || { echo invalid usage; exit 1;} 13 14NM=$1 15RUMPSRC=$2 16BASELIB=$3 17OUTPUT=$4 18 19rm -f ${OUTPUT} 20printf '/* AUTOMATICALLY GENERATED */\n\n' >> ${OUTPUT} 21printf '#include <sys/cdefs.h>\n\n' >> ${OUTPUT} 22printf 'extern int main(int, char**);\n' >> ${OUTPUT} 23printf 'int _want_main(void); int _want_main(void) {return main(0, 0);}\n' \ 24 >> ${OUTPUT} 25printf 'int _stubnosys(void); int _stubnosys(void) {return -1;}\n' \ 26 >> ${OUTPUT} 27 28# special cases 29printf "__strong_alias(rump_syscall,_stubnosys);\n" >> ${OUTPUT} 30printf "__strong_alias(_start,_stubnosys);\n\n" >> ${OUTPUT} 31 32# symbols not convered by libc 33${NM} -o -g --defined-only ${BASELIB} | awk ' 34$(NF-1) == "T" { 35 printf("__strong_alias(%s,_stubnosys);\n", $NF); 36 next 37} 38$(NF-1) == "W" { 39 printf("__weak_alias(%s,_stubnosys);\n", $NF); 40 next 41} 42$(NF-1) ~ "(D|C)" { 43 printf("int %s;\n", $NF); 44 next 45} 46{ 47 printf("error, symbol type %s not handled\n", $(NF-1)) | "cat 1>&2"; 48 exit(1) 49} 50' >> ${OUTPUT} || exit 1 51 52# system calls 53awk '{print $3}' < ${RUMPSRC}/sys/rump/rump.sysmap | while read syscall; do 54 makealias ${syscall} 55done 56 57exit 0 58