57 lines
2.1 KiB
Diff
57 lines
2.1 KiB
Diff
|
From db186a3f83454268c43fc793a48bc28c41368a6c Mon Sep 17 00:00:00 2001
|
||
|
From: Petros Angelatos <petrosagg@gmail.com>
|
||
|
Date: Thu, 3 Mar 2016 23:58:53 -0800
|
||
|
Subject: [PATCH] linux-user: ignore signals 33 and 64 to allow golang
|
||
|
emulation
|
||
|
|
||
|
Signal 33 will always fail. This causes golang crash since
|
||
|
https://github.com/golang/go/commit/675eb72c285cd0dd44a5f280bb3fa456ddf6de16
|
||
|
|
||
|
As explained in that commit, these signals are very rarely used in a
|
||
|
way that causes problems, so it's ok-ish to ignore one of them.
|
||
|
|
||
|
Signal 64 will fail because QEMU uses SIGRTMAX for itself. This causes
|
||
|
golang to crash for versions earlier than
|
||
|
https://github.com/golang/go/commit/d10675089d74db0408f2432eae3bd89a8e1c2d6a
|
||
|
|
||
|
Since after that commit golang ignores that signal, we also ignore it here to
|
||
|
allow earlier versions to run as well.
|
||
|
|
||
|
Signed-off-by: Petros Angelatos <petrosagg@gmail.com>
|
||
|
---
|
||
|
linux-user/signal.c | 21 +++++++++++++++++++++
|
||
|
1 file changed, 21 insertions(+)
|
||
|
|
||
|
diff --git a/linux-user/signal.c b/linux-user/signal.c
|
||
|
index 9a4d894..90aca55 100644
|
||
|
--- a/linux-user/signal.c
|
||
|
+++ b/linux-user/signal.c
|
||
|
@@ -744,6 +744,27 @@ int do_sigaction(int sig, const struct target_sigaction *act,
|
||
|
}
|
||
|
|
||
|
k = &sigact_table[sig - 1];
|
||
|
+
|
||
|
+ /* This signal will always fail. This causes golang crash since
|
||
|
+ * https://github.com/golang/go/commit/675eb72c285cd0dd44a5f280bb3fa456ddf6de16
|
||
|
+ *
|
||
|
+ * As explained in that commit, these signals are very rarely used in a
|
||
|
+ * way that causes problems, so it's ok-ish to ignore one of them here.
|
||
|
+ */
|
||
|
+ if (sig == 33) {
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+ /* This signal will fail because QEMU uses SIGRTMAX for itself. This causes
|
||
|
+ * golang to crash for versions earlier than
|
||
|
+ * https://github.com/golang/go/commit/d10675089d74db0408f2432eae3bd89a8e1c2d6a
|
||
|
+ *
|
||
|
+ * Since after that commit golang ignores that signal, we also ignore it here to
|
||
|
+ * allow earlier versions to run as well.
|
||
|
+ */
|
||
|
+ if (sig == 64) {
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+
|
||
|
if (oact) {
|
||
|
__put_user(k->_sa_handler, &oact->_sa_handler);
|
||
|
__put_user(k->sa_flags, &oact->sa_flags);
|