Revision 447db213 linux-user/signal.c
b/linux-user/signal.c | ||
---|---|---|
110 | 110 |
tinfo->si_signo = sig; |
111 | 111 |
tinfo->si_errno = 0; |
112 | 112 |
tinfo->si_code = 0; |
113 |
if (sig == SIGILL || sig == SIGFPE || sig == SIGSEGV || sig == SIGBUS) { |
|
113 |
if (sig == SIGILL || sig == SIGFPE || sig == SIGSEGV || |
|
114 |
sig == SIGBUS || sig == SIGTRAP) { |
|
114 | 115 |
/* should never come here, but who knows. The information for |
115 | 116 |
the target is irrelevant */ |
116 | 117 |
tinfo->_sifields._sigfault._addr = 0; |
... | ... | |
131 | 132 |
tinfo->si_signo = tswap32(sig); |
132 | 133 |
tinfo->si_errno = tswap32(info->si_errno); |
133 | 134 |
tinfo->si_code = tswap32(info->si_code); |
134 |
if (sig == SIGILL || sig == SIGFPE || sig == SIGSEGV || sig == SIGBUS) { |
|
135 |
if (sig == SIGILL || sig == SIGFPE || sig == SIGSEGV || |
|
136 |
sig == SIGBUS || sig == SIGTRAP) { |
|
135 | 137 |
tinfo->_sifields._sigfault._addr = |
136 | 138 |
tswapl(info->_sifields._sigfault._addr); |
137 | 139 |
} else if (sig >= TARGET_SIGRTMIN) { |
... | ... | |
788 | 790 |
sigset_t set; |
789 | 791 |
int eax, i; |
790 | 792 |
|
793 |
#if defined(DEBUG_SIGNAL) |
|
794 |
fprintf(stderr, "do_sigreturn\n"); |
|
795 |
#endif |
|
791 | 796 |
/* set blocked signals */ |
792 | 797 |
target_set.sig[0] = frame->sc.oldmask; |
793 | 798 |
for(i = 1; i < TARGET_NSIG_WORDS; i++) |
Also available in: Unified diff