summaryrefslogtreecommitdiff
path: root/emulators/qemu-devel/files/extra-patch-target_siginfo
blob: 4058f191eed951dfb56813434c0415e07bcee513 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
From nox Mon Sep 17 00:00:00 2001
From: Juergen Lock <nox@jelal.kn-bremen.de>
Date: 22 Jun 2014 00:52:23 +0200
Subject: Fix bsd-user default TARGET_SIGINFO handling

TARGET_SIGINFO doesn't kill the process and also doesn't cause EINTR
by default so add it to fatal_signal() appropriately; and also don't
call force_sig() on it should it end up being handled.

Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de>

--- a/bsd-user/signal.c
+++ b/bsd-user/signal.c
@@ -391,6 +391,7 @@ int queue_signal(CPUArchState *env, int 
             if (sig != TARGET_SIGCHLD &&
                 sig != TARGET_SIGURG &&
                 sig != TARGET_SIGWINCH &&
+                sig != TARGET_SIGINFO &&
                 sig != TARGET_SIGCONT) {
                 force_sig(sig);
             } else {
@@ -531,6 +532,7 @@ static int fatal_signal(int sig)
     case TARGET_SIGCHLD:
     case TARGET_SIGURG:
     case TARGET_SIGWINCH:
+    case TARGET_SIGINFO:
         /* Ignored by default. */
         return 0;
     case TARGET_SIGCONT:
@@ -884,6 +886,7 @@ handle_signal:
                 TARGET_SIGTTOU == sig) {
             kill(getpid(), SIGSTOP);
         } else if (TARGET_SIGCHLD != sig && TARGET_SIGURG != sig &&
+            TARGET_SIGINFO != sig &&
             TARGET_SIGWINCH != sig && TARGET_SIGCONT != sig) {
             force_sig(sig);
         }