summaryrefslogtreecommitdiff
path: root/emulators/qemu-devel/files/extra-patch-a3129eea10f188bfd39ce83b18b25dcefbc5bffc
blob: 11056d01096113b88de4f9b0d79c709504f63f87 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
diff --git a/bsd-user/signal.c b/bsd-user/signal.c
index 3619b00..01374a6 100644
--- a/bsd-user/signal.c
+++ b/bsd-user/signal.c
@@ -283,7 +283,8 @@ static int core_dump_signal(int sig)
 /* Signal queue handling. */
 static inline struct qemu_sigqueue *alloc_sigqueue(CPUArchState *env)
 {
-    TaskState *ts = env->opaque;
+    CPUState *cpu = thread_cpu;
+    TaskState *ts = (TaskState *)cpu->opaque;
     struct qemu_sigqueue *q = ts->first_free;
 
     if (!q) {
@@ -296,7 +297,8 @@ static inline struct qemu_sigqueue *alloc_sigqueue(CPUArchState *env)
 static inline void free_sigqueue(CPUArchState *env, struct qemu_sigqueue *q)
 {
 
-    TaskState *ts = env->opaque;
+    CPUState *cpu = thread_cpu;
+    TaskState *ts = (TaskState *)cpu->opaque;
     q->next = ts->first_free;
     ts->first_free = q;
 }
@@ -305,7 +307,8 @@ static inline void free_sigqueue(CPUArchState *env, struct qemu_sigqueue *q)
 void QEMU_NORETURN force_sig(int target_sig)
 {
     CPUArchState *env = thread_cpu->env_ptr;
-    TaskState *ts = (TaskState *)env->opaque;
+    CPUState *cpu = thread_cpu;
+    TaskState *ts = (TaskState *)cpu->opaque;
     int core_dumped = 0;
     int host_sig;
     struct sigaction act;
@@ -365,7 +368,8 @@ void QEMU_NORETURN force_sig(int target_sig)
  */
 int queue_signal(CPUArchState *env, int sig, target_siginfo_t *info)
 {
-    TaskState *ts = env->opaque;
+    CPUState *cpu = thread_cpu;
+    TaskState *ts = (TaskState *)cpu->opaque;
     struct emulated_sigtable *k;
     struct qemu_sigqueue *q, **pq;
     abi_ulong handler;
@@ -826,7 +830,7 @@ void process_pending_signals(CPUArchState *cpu_env)
     struct emulated_sigtable *k;
     struct target_sigaction *sa;
     struct qemu_sigqueue *q;
-    TaskState *ts = cpu_env->opaque;
+    TaskState *ts = cpu->opaque;
 
     if (!ts->signal_pending) {
         return;