|
|
- From 1ad796677e1ce3f03463c791818176586987c389 Mon Sep 17 00:00:00 2001
- From: Paul Holzinger <paul.holzinger@web.de>
- Date: Mon, 21 Dec 2020 12:30:06 +0100
- Subject: [PATCH] Fix build for mips architecture
-
- The signal SIGSTKFLT does not exists on mips architectures.
- Also RTMIN and RTMAX are different.
-
- This code is copied from docker.
-
- Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
- ---
- pkg/signal/signal_linux.go | 1 +
- pkg/signal/signal_linux_mipsx.go | 106 +++++++++++++++++++++++++++++++
- 2 files changed, 107 insertions(+)
- create mode 100644 pkg/signal/signal_linux_mipsx.go
-
- --- a/pkg/signal/signal_linux.go
- +++ b/pkg/signal/signal_linux.go
- @@ -1,4 +1,5 @@
- // +build linux
- +// +build !mips,!mipsle,!mips64,!mips64le
-
- // Signal handling for Linux only.
- package signal
- --- /dev/null
- +++ b/pkg/signal/signal_linux_mipsx.go
- @@ -0,0 +1,106 @@
- +// +build linux
- +// +build mips mipsle mips64 mips64le
- +
- +// Special signal handling for mips architecture
- +package signal
- +
- +// Copyright 2013-2018 Docker, Inc.
- +
- +// NOTE: this package has originally been copied from github.com/docker/docker.
- +
- +import (
- + "os"
- + "os/signal"
- + "syscall"
- +
- + "golang.org/x/sys/unix"
- +)
- +
- +const (
- + sigrtmin = 34
- + sigrtmax = 127
- +)
- +
- +// signalMap is a map of Linux signals.
- +var signalMap = map[string]syscall.Signal{
- + "ABRT": unix.SIGABRT,
- + "ALRM": unix.SIGALRM,
- + "BUS": unix.SIGBUS,
- + "CHLD": unix.SIGCHLD,
- + "CLD": unix.SIGCLD,
- + "CONT": unix.SIGCONT,
- + "FPE": unix.SIGFPE,
- + "HUP": unix.SIGHUP,
- + "ILL": unix.SIGILL,
- + "INT": unix.SIGINT,
- + "IO": unix.SIGIO,
- + "IOT": unix.SIGIOT,
- + "KILL": unix.SIGKILL,
- + "PIPE": unix.SIGPIPE,
- + "POLL": unix.SIGPOLL,
- + "PROF": unix.SIGPROF,
- + "PWR": unix.SIGPWR,
- + "QUIT": unix.SIGQUIT,
- + "SEGV": unix.SIGSEGV,
- + "EMT": unix.SIGEMT,
- + "STOP": unix.SIGSTOP,
- + "SYS": unix.SIGSYS,
- + "TERM": unix.SIGTERM,
- + "TRAP": unix.SIGTRAP,
- + "TSTP": unix.SIGTSTP,
- + "TTIN": unix.SIGTTIN,
- + "TTOU": unix.SIGTTOU,
- + "URG": unix.SIGURG,
- + "USR1": unix.SIGUSR1,
- + "USR2": unix.SIGUSR2,
- + "VTALRM": unix.SIGVTALRM,
- + "WINCH": unix.SIGWINCH,
- + "XCPU": unix.SIGXCPU,
- + "XFSZ": unix.SIGXFSZ,
- + "RTMIN": sigrtmin,
- + "RTMIN+1": sigrtmin + 1,
- + "RTMIN+2": sigrtmin + 2,
- + "RTMIN+3": sigrtmin + 3,
- + "RTMIN+4": sigrtmin + 4,
- + "RTMIN+5": sigrtmin + 5,
- + "RTMIN+6": sigrtmin + 6,
- + "RTMIN+7": sigrtmin + 7,
- + "RTMIN+8": sigrtmin + 8,
- + "RTMIN+9": sigrtmin + 9,
- + "RTMIN+10": sigrtmin + 10,
- + "RTMIN+11": sigrtmin + 11,
- + "RTMIN+12": sigrtmin + 12,
- + "RTMIN+13": sigrtmin + 13,
- + "RTMIN+14": sigrtmin + 14,
- + "RTMIN+15": sigrtmin + 15,
- + "RTMAX-14": sigrtmax - 14,
- + "RTMAX-13": sigrtmax - 13,
- + "RTMAX-12": sigrtmax - 12,
- + "RTMAX-11": sigrtmax - 11,
- + "RTMAX-10": sigrtmax - 10,
- + "RTMAX-9": sigrtmax - 9,
- + "RTMAX-8": sigrtmax - 8,
- + "RTMAX-7": sigrtmax - 7,
- + "RTMAX-6": sigrtmax - 6,
- + "RTMAX-5": sigrtmax - 5,
- + "RTMAX-4": sigrtmax - 4,
- + "RTMAX-3": sigrtmax - 3,
- + "RTMAX-2": sigrtmax - 2,
- + "RTMAX-1": sigrtmax - 1,
- + "RTMAX": sigrtmax,
- +}
- +
- +// CatchAll catches all signals and relays them to the specified channel.
- +func CatchAll(sigc chan os.Signal) {
- + handledSigs := make([]os.Signal, 0, len(signalMap))
- + for _, s := range signalMap {
- + handledSigs = append(handledSigs, s)
- + }
- + signal.Notify(sigc, handledSigs...)
- +}
- +
- +// StopCatch stops catching the signals and closes the specified channel.
- +func StopCatch(sigc chan os.Signal) {
- + signal.Stop(sigc)
- + close(sigc)
- +}
|