Revision a05c6409 linux-user/signal.c

b/linux-user/signal.c
202 202
static inline void host_to_target_siginfo_noswap(target_siginfo_t *tinfo,
203 203
                                                 const siginfo_t *info)
204 204
{
205
    int sig;
206
    sig = host_to_target_signal(info->si_signo);
205
    int sig = host_to_target_signal(info->si_signo);
207 206
    tinfo->si_signo = sig;
208 207
    tinfo->si_errno = 0;
209 208
    tinfo->si_code = info->si_code;
210
    if (sig == SIGILL || sig == SIGFPE || sig == SIGSEGV ||
211
        sig == SIGBUS || sig == SIGTRAP) {
212
        /* should never come here, but who knows. The information for
213
           the target is irrelevant */
209

  
210
    if (sig == TARGET_SIGILL || sig == TARGET_SIGFPE || sig == TARGET_SIGSEGV
211
        || sig == TARGET_SIGBUS || sig == TARGET_SIGTRAP) {
212
        /* Should never come here, but who knows. The information for
213
           the target is irrelevant.  */
214 214
        tinfo->_sifields._sigfault._addr = 0;
215
    } else if (sig == SIGIO) {
215
    } else if (sig == TARGET_SIGIO) {
216
        tinfo->_sifields._sigpoll._band = info->si_band;
216 217
	tinfo->_sifields._sigpoll._fd = info->si_fd;
218
    } else if (sig == TARGET_SIGCHLD) {
219
        tinfo->_sifields._sigchld._pid = info->si_pid;
220
        tinfo->_sifields._sigchld._uid = info->si_uid;
221
        tinfo->_sifields._sigchld._status
222
            = host_to_target_waitstatus(info->si_status);
223
        tinfo->_sifields._sigchld._utime = info->si_utime;
224
        tinfo->_sifields._sigchld._stime = info->si_stime;
217 225
    } else if (sig >= TARGET_SIGRTMIN) {
218 226
        tinfo->_sifields._rt._pid = info->si_pid;
219 227
        tinfo->_sifields._rt._uid = info->si_uid;
220 228
        /* XXX: potential problem if 64 bit */
221
        tinfo->_sifields._rt._sigval.sival_ptr =
222
            (abi_ulong)(unsigned long)info->si_value.sival_ptr;
229
        tinfo->_sifields._rt._sigval.sival_ptr
230
            = (abi_ulong)(unsigned long)info->si_value.sival_ptr;
223 231
    }
224 232
}
225 233

  
226 234
static void tswap_siginfo(target_siginfo_t *tinfo,
227 235
                          const target_siginfo_t *info)
228 236
{
229
    int sig;
230
    sig = info->si_signo;
237
    int sig = info->si_signo;
231 238
    tinfo->si_signo = tswap32(sig);
232 239
    tinfo->si_errno = tswap32(info->si_errno);
233 240
    tinfo->si_code = tswap32(info->si_code);
234
    if (sig == SIGILL || sig == SIGFPE || sig == SIGSEGV ||
235
        sig == SIGBUS || sig == SIGTRAP) {
236
        tinfo->_sifields._sigfault._addr =
237
            tswapal(info->_sifields._sigfault._addr);
238
    } else if (sig == SIGIO) {
239
	tinfo->_sifields._sigpoll._fd = tswap32(info->_sifields._sigpoll._fd);
241

  
242
    if (sig == TARGET_SIGILL || sig == TARGET_SIGFPE || sig == TARGET_SIGSEGV
243
        || sig == TARGET_SIGBUS || sig == TARGET_SIGTRAP) {
244
        tinfo->_sifields._sigfault._addr
245
            = tswapal(info->_sifields._sigfault._addr);
246
    } else if (sig == TARGET_SIGIO) {
247
        tinfo->_sifields._sigpoll._band
248
            = tswap32(info->_sifields._sigpoll._band);
249
        tinfo->_sifields._sigpoll._fd = tswap32(info->_sifields._sigpoll._fd);
250
    } else if (sig == TARGET_SIGCHLD) {
251
        tinfo->_sifields._sigchld._pid
252
            = tswap32(info->_sifields._sigchld._pid);
253
        tinfo->_sifields._sigchld._uid
254
            = tswap32(info->_sifields._sigchld._uid);
255
        tinfo->_sifields._sigchld._status
256
            = tswap32(info->_sifields._sigchld._status);
257
        tinfo->_sifields._sigchld._utime
258
            = tswapal(info->_sifields._sigchld._utime);
259
        tinfo->_sifields._sigchld._stime
260
            = tswapal(info->_sifields._sigchld._stime);
240 261
    } else if (sig >= TARGET_SIGRTMIN) {
241 262
        tinfo->_sifields._rt._pid = tswap32(info->_sifields._rt._pid);
242 263
        tinfo->_sifields._rt._uid = tswap32(info->_sifields._rt._uid);
243
        tinfo->_sifields._rt._sigval.sival_ptr =
244
            tswapal(info->_sifields._rt._sigval.sival_ptr);
264
        tinfo->_sifields._rt._sigval.sival_ptr
265
            = tswapal(info->_sifields._rt._sigval.sival_ptr);
245 266
    }
246 267
}
247 268

  

Also available in: Unified diff