[BACK]Return to makerumpsyscalls.sh CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / rump

Annotation of src/sys/rump/makerumpsyscalls.sh, Revision 1.2.4.2

1.2.4.2 ! yamt        1: #!/bin/sh
        !             2: #
        !             3: #      $NetBSD$
        !             4: #
        !             5:
        !             6: #
        !             7: # This utility generates component-specific initializers for the
        !             8: # rump kernel syscall vector.
        !             9: #
        !            10: # Procedure is:
        !            11: #   1) edit syscalls.master
        !            12: #   2) run makesyscalls.sh
        !            13: #   3) do a build in sys/rump
        !            14: #   4) run this script
        !            15: #   5) commit results
        !            16: #
        !            17:
        !            18: # default, override by giving argument
        !            19: LIBDIR=/usr/lib
        !            20:
        !            21: SYSCOMPONENT_librump=librump/rumpkern/rumpkern_syscalls.c
        !            22: SYSCOMPONENT_librumpnet=librump/rumpnet/rumpnet_syscalls.c
        !            23: SYSCOMPONENT_librumpvfs=librump/rumpvfs/rumpvfs_syscalls.c
        !            24:
        !            25: die ()
        !            26: {
        !            27:
        !            28:        echo '>> ERROR:' $*
        !            29:        exit 1
        !            30: }
        !            31:
        !            32: [ -f "./rump.sysmap" ] || die rump.sysmap not found
        !            33: [ -f "./Makefile.rump" ] || die run script in src/sys/rump
        !            34: [ -z "${1}" ] || LIBDIR=$1
        !            35:
        !            36: #
        !            37: # BEGIN
        !            38: #
        !            39:
        !            40: IFS=' '
        !            41: AWKPROG='BEGIN {
        !            42:        while ((getline < "rump.sysmap") == 1) {
        !            43:                if ($2 != "sys_nomodule")
        !            44:                        syscalls[$2] = $1
        !            45:        }
        !            46: }
        !            47:
        !            48: $5 == "GLOBAL" && $7 != "UND" {
        !            49:        sub("rumpns_", "", $8)
        !            50:        if (syscalls[$8] != 0)
        !            51:                results[$8] = 1
        !            52: }
        !            53:
        !            54: END {
        !            55:        for (res in results) {
        !            56:                printf "%d %s\n", syscalls[res], res | "sort -n"
        !            57:        }
        !            58: }
        !            59: '
        !            60:
        !            61: SYSCOMP_HDR='/*        $NetBSD$        */
        !            62:
        !            63: /* AUTOMATICALLY GENERATED BY makerumpsyscalls.sh */
        !            64:
        !            65: #include <sys/cdefs.h>
        !            66: __KERNEL_RCSID(0, "$NetBSD$");
        !            67:
        !            68: #include <sys/param.h>
        !            69:
        !            70: #include "rump_private.h"
        !            71: '
        !            72:
        !            73: SYSCOMP_BODY='
        !            74: RUMP_COMPONENT(RUMP_COMPONENT_SYSCALL)
        !            75: {
        !            76:
        !            77:        rump_syscall_boot_establish(mysys, __arraycount(mysys));
        !            78: }'
        !            79:
        !            80: makesyscomponent ()
        !            81: {
        !            82:
        !            83:        echo Generating $1
        !            84:        exec 3>&1 >${1}
        !            85:
        !            86:        echo "${SYSCOMP_HDR}"
        !            87:
        !            88:        echo ${2} | awk '{printf "extern sy_call_t %s;\n", $2}'
        !            89:        printf '\nstatic const struct rump_onesyscall mysys[] = {\n'
        !            90:        echo ${2} | awk '{printf "\t{ %d,\t%s },\n", $1, $2}'
        !            91:        printf '};\n'
        !            92:
        !            93:        echo "${SYSCOMP_BODY}"
        !            94:
        !            95:        exec 1>&3
        !            96: }
        !            97:
        !            98: sawlibrump=false
        !            99: for file in ${LIBDIR}/librump*.so ; do
        !           100:        b=$(basename ${file})
        !           101:        b=${b%%.*}
        !           102:        res=$(readelf -W --syms ${file} | awk "${AWKPROG}")
        !           103:        if [ ! -z "${res}" ]; then
        !           104:                eval outname=\${SYSCOMPONENT_${b}}
        !           105:                [ -z "${outname}" ] && die Unknown syscall provider $b
        !           106:                makesyscomponent $outname "$res"
        !           107:
        !           108:                [ $b = "librump" ] && sawlibrump=true
        !           109:        fi
        !           110: done
        !           111:
        !           112: ${sawlibrump} || die Did not see librump.  Wrong directory?

CVSweb <webmaster@jp.NetBSD.org>