| #!/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 '}' |