summaryrefslogtreecommitdiff
path: root/user/qemu/ignore-signals-33-and-64-to-allow-golang-emulation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/qemu/ignore-signals-33-and-64-to-allow-golang-emulation.patch')
-rw-r--r--user/qemu/ignore-signals-33-and-64-to-allow-golang-emulation.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/user/qemu/ignore-signals-33-and-64-to-allow-golang-emulation.patch b/user/qemu/ignore-signals-33-and-64-to-allow-golang-emulation.patch
new file mode 100644
index 000000000..116254223
--- /dev/null
+++ b/user/qemu/ignore-signals-33-and-64-to-allow-golang-emulation.patch
@@ -0,0 +1,56 @@
+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);