Skip to content

Commit 4cc7c04

Browse files
committed
o Use SIGPWR as SIGTHR on linux.
o Normalize host_to_target_sigset_internal() towards target signal mask. o Use TARGET_NSIG_WORDS where appropriate.
1 parent fce541b commit 4cc7c04

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

bsd-user/signal.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ static inline int sas_ss_flags(TaskState *ts, unsigned long sp)
8888
on_sig_stack(ts, sp) ? SS_ONSTACK : 0;
8989
}
9090

91+
#if defined(__linux__)
92+
#define HOST_SIGPWR SIGPWR
93+
#endif
94+
9195
/*
9296
* The BSD ABIs use the same signal numbers across all the CPU architectures, so
9397
* (unlike Linux) these functions are just the identity mapping. This might not
@@ -107,6 +111,7 @@ int host_to_target_signal(int sig)
107111
case HOST_SIGCONT: return TARGET_SIGCONT;
108112
case HOST_SIGCHLD: return TARGET_SIGCHLD;
109113
case HOST_SIGIO: return TARGET_SIGIO;
114+
case HOST_SIGPWR: return TARGET_SIGTHR;
110115
}
111116
if (sig >= HOST_SIGRTMIN && sig <= HOST_SIGRTMAX) {
112117
sig += (HOST_SIGRTMIN - TARGET_SIGRTMIN);
@@ -130,14 +135,15 @@ int target_to_host_signal(int sig)
130135
case TARGET_SIGCONT: return HOST_SIGCONT;
131136
case TARGET_SIGCHLD: return HOST_SIGCHLD;
132137
case TARGET_SIGIO: return HOST_SIGIO;
138+
case TARGET_SIGTHR: return HOST_SIGPWR;
133139
}
134140
if (sig >= TARGET_SIGRTMIN && sig <= TARGET_SIGRTMAX) {
135141
sig -= (HOST_SIGRTMIN - TARGET_SIGRTMIN);
136142
assert(sig >= HOST_SIGRTMIN);
137143
if (sig > HOST_SIGRTMAX)
138144
return -1;
139145
}
140-
if (sig >= HOST_NSIG)
146+
if (sig > HOST_NSIG)
141147
return -1;
142148
#endif
143149
return sig;
@@ -184,9 +190,9 @@ static void host_to_target_sigset_internal(target_sigset_t *d,
184190
int i;
185191

186192
target_sigemptyset(d);
187-
for (i = 1; i <= NSIG; i++) {
188-
if (sigismember(s, i)) {
189-
target_sigaddset(d, host_to_target_signal(i));
193+
for (i = 1; i <= TARGET_NSIG; i++) {
194+
if (sigismember(s, target_to_host_signal(i))) {
195+
target_sigaddset(d, i);
190196
}
191197
}
192198
}
@@ -197,7 +203,7 @@ void host_to_target_sigset(target_sigset_t *d, const sigset_t *s)
197203
int i;
198204

199205
host_to_target_sigset_internal(&d1, s);
200-
for (i = 0; i < _SIG_WORDS; i++) {
206+
for (i = 0; i < TARGET_NSIG_WORDS; i++) {
201207
d->__bits[i] = tswap32(d1.__bits[i]);
202208
}
203209
}

0 commit comments

Comments
 (0)