123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #!/bin/sh
- # Copyright 2016 The Go Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style
- # license that can be found in the LICENSE file.
- # Create sigtab.go from gen-sysinfo.go.
- # This shell scripts creates the sigtab.go file, which maps signals to
- # their dispositions. We generate a file so that we can build a
- # composite literal that only refers to signals that are defined on
- # this system.
- # This script simply writes to standard output.
- set -e
- echo '// Generated by mksigtab.sh. Do not edit.'
- echo
- echo 'package runtime'
- echo
- echo 'var sigtable = [...]sigTabT{'
- SIGLIST=""
- # Handle signals valid on all Unix systems.
- addsig() {
- echo " $1: $2,"
- # Get the signal number and add it to SIGLIST
- signum=`grep "const $1 = " gen-sysinfo.go | sed -e 's/.* = //'`
- if echo "$signum" | grep '^_SIG[A-Z0-9_]*$' >/dev/null 2>&1; then
- # Recurse once to obtain signal number
- # This is needed for some MIPS signals defined as aliases of other signals
- signum=`grep "const $signum = " gen-sysinfo.go | sed -e 's/.* = //'`
- fi
- SIGLIST=$SIGLIST"_${signum}_"
- }
- echo ' 0: {0, "SIGNONE: no trap"},'
- addsig _SIGHUP '{_SigNotify + _SigKill, "SIGHUP: terminal line hangup"}'
- addsig _SIGINT '{_SigNotify + _SigKill, "SIGINT: interrupt"}'
- addsig _SIGQUIT '{_SigNotify + _SigThrow, "SIGQUIT: quit"}'
- addsig _SIGILL '{_SigThrow + _SigUnblock, "SIGILL: illegal instruction"}'
- addsig _SIGTRAP '{_SigThrow + _SigUnblock, "SIGTRAP: trace trap"}'
- addsig _SIGABRT '{_SigNotify + _SigThrow, "SIGABRT: abort"}'
- addsig _SIGBUS '{_SigPanic + _SigUnblock, "SIGBUS: bus error"}'
- addsig _SIGFPE '{_SigPanic + _SigUnblock, "SIGFPE: floating-point exception"}'
- addsig _SIGKILL '{0, "SIGKILL: kill"}'
- addsig _SIGUSR1 '{_SigNotify, "SIGUSR1: user-defined signal 1"}'
- addsig _SIGSEGV '{_SigPanic + _SigUnblock, "SIGSEGV: segmentation violation"}'
- addsig _SIGUSR2 '{_SigNotify, "SIGUSR2: user-defined signal 2"}'
- addsig _SIGPIPE '{_SigNotify, "SIGPIPE: write to broken pipe"}'
- addsig _SIGALRM '{_SigNotify, "SIGALRM: alarm clock"}'
- addsig _SIGTERM '{_SigNotify + _SigKill, "SIGTERM: termination"}'
- addsig _SIGCHLD '{_SigNotify + _SigUnblock, "SIGCHLD: child status has changed"}'
- addsig _SIGCONT '{_SigNotify + _SigDefault, "SIGCONT: continue"}'
- addsig _SIGSTOP '{0, "SIGSTOP: stop"}'
- addsig _SIGTSTP '{_SigNotify + _SigDefault, "SIGTSTP: keyboard stop"}'
- addsig _SIGTTIN '{_SigNotify + _SigDefault, "SIGTTIN: background read from tty"}'
- addsig _SIGTTOU '{_SigNotify + _SigDefault, "SIGTTOU: background write to tty"}'
- addsig _SIGURG '{_SigNotify, "SIGURG: urgent condition on socket"}'
- addsig _SIGXCPU '{_SigNotify, "SIGXCPU: cpu limit exceeded"}'
- addsig _SIGXFSZ '{_SigNotify, "SIGXFSZ: file size limit exceeded"}'
- addsig _SIGVTALRM '{_SigNotify, "SIGVTALRM: virtual alarm clock"}'
- addsig _SIGPROF '{_SigNotify + _SigUnblock, "SIGPROF: profiling alarm clock"}'
- addsig _SIGWINCH '{_SigNotify, "SIGWINCH: window size change"}'
- addsig _SIGSYS '{_SigThrow, "SIGSYS: bad system call"}'
- # Handle signals that are not supported on all systems.
- checksig() {
- if grep "const $1 = " gen-sysinfo.go >/dev/null 2>&1 \
- && ! grep "const $1 = _SIG" gen-sysinfo.go > /dev/null 2>&1; then
- addsig $1 "$2"
- fi
- }
- checksig _SIGSTKFLT '{_SigThrow + _SigUnblock, "SIGSTKFLT: stack fault"}'
- checksig _SIGIO '{_SigNotify, "SIGIO: i/o now possible"}'
- checksig _SIGPWR '{_SigNotify, "SIGPWR: power failure restart"}'
- checksig _SIGEMT '{_SigThrow, "SIGEMT: emulate instruction executed"}'
- checksig _SIGINFO '{_SigNotify, "SIGINFO: status request from keyboard"}'
- checksig _SIGTHR '{_SigNotify, "SIGTHR: reserved"}'
- checksig _SIGPOLL '{_SigNotify, "SIGPOLL: pollable event occurred"}'
- checksig _SIGWAITING '{_SigNotify, "SIGWAITING: reserved signal no longer used by"}'
- checksig _SIGLWP '{_SigNotify, "SIGLWP: reserved signal no longer used by"}'
- checksig _SIGFREEZE '{_SigNotify, "SIGFREEZE: special signal used by CPR"}'
- checksig _SIGTHAW '{_SigNotify, "SIGTHAW: special signal used by CPR"}'
- checksig _SIGCANCEL '{_SigSetStack + _SigUnblock, "SIGCANCEL: reserved signal for thread cancellation"}'
- checksig _SIGXRES '{_SigNotify, "SIGXRES: resource control exceeded"}'
- checksig _SIGJVM1 '{_SigNotify, "SIGJVM1: reserved signal for Java Virtual Machine"}'
- checksig _SIGJVM2 '{_SigNotify, "SIGJVM2: reserved signal for Java Virtual Machine"}'
- checksig _SIGLOST ' {_SigNotify, "SIGLOST: resource lost (Sun); server died (GNU)"}'
- # Special handling of signals 32 and 33 on GNU/Linux systems,
- # because they are special to glibc.
- if test "${GOOS}" = "linux"; then
- SIGLIST=$SIGLIST"_32__33_"
- echo ' 32: {_SigSetStack + _SigUnblock, "signal 32"}, /* SIGCANCEL; see issue 6997 */'
- echo ' 33: {_SigSetStack + _SigUnblock, "signal 33"}, /* SIGSETXID; see issues 3871, 9400, 12498 */'
- fi
- if test "${GOOS}" = "aix"; then
- # _NSIG = _NSIG32/_NSIG64 and _NSIG* = _SIGMAX* + 1
- bits=`grep 'const _NSIG = _NSIG[0-9]*$' gen-sysinfo.go | sed -e 's/.* = _NSIG\([0-9]*\)/\1/'`
- nsig=`grep "const _SIGMAX$bits = [0-9]*$" gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
- nsig=`expr $nsig + 1`
- else
- nsig=`grep 'const _*NSIG = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
- if test -z "$nsig"; then
- if grep 'const _*NSIG = [ (]*_*SIGRTMAX + 1[ )]*' gen-sysinfo.go >/dev/null 2>&1; then
- rtmax=`grep 'const _*SIGRTMAX = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
- if test -n "$rtmax"; then
- nsig=`expr $rtmax + 1`
- elif grep 'const _*SIGRTMAX = [ (]*_*SIGRTMIN[ )]*' gen-sysinfo.go >/dev/null 2>&1; then
- rtmin=`grep 'const _*SIGRTMIN = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
- if test -n "$rtmin"; then
- nsig=`expr $rtmin + 1`
- fi
- fi
- fi
- fi
- fi
- if test -z "$nsig"; then
- echo 1>&2 "could not determine number of signals"
- exit 1
- fi
- i=1
- # Fill in the remaining signal numbers in sigtable
- while test "$i" -lt "$nsig"; do
- if ! echo $SIGLIST | grep "_${i}_" >/dev/null 2>&1; then
- echo " $i: {_SigNotify, \"signal $i\"},"
- fi
- i=`expr "$i" + 1`
- done
- echo '}'
|