mirror of https://github.com/xemu-project/xemu.git
- gdb signal handling fix
- add SO_REUSEPORT - remove dead-code -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJb6ecXAAoJEPMMOL0/L748YAoP/RiYaO8QNRvP45ZPtkPXErNN pRSnCC8eczSSYxCDYFvEgSN1qcc/5x0x6MC/MEbMsp7HYptWHkUItboVcsc+pQX3 XLA0Vthl5UH2O5/uwWfk7DIS5dOkNFNruBf23i3FYgKwjdu989+z3A0vNheU3cBh 4kBfpIUPDmhwdlMVW/1bF/AJ5nthZ9/jIW/di7F/JIM59wYTYGNnE2A1F5JW1sbb 3J0ORBPMDcCCf42swsWzJaBH3mjWD6qD13QgEMIj6ym2Wpqvb/c/Cm19XhMhW54I 6n/21MA90JqVmaNRS4WIJbzyhIc+K83/9t+J5u+CIroOXUsRJlTv5hszsu67M+L8 gMkCwkFhJB4Wa3cbuSKjjGGu/pcAZIrCNqya4126T8IYtcexM+RQGdaWCOjhenNy c2KqkpQlZT+FlnKTPEbuKkNKnaauhWgPYLcXqbyGONqj3Lugpl8DIhaNvexcz+uF 9kxIH2hiyKN5gBm/l57nLrtnktiPP5XJwgeukXl8vjp+NCdRtDk91e+tEHASYgst ySvQa+TRdK8m8eMUzCqKiVaMe+RRPhzsm1o8l58uMDTTj/qNmJKm9d8Wtjne5N2r h28VD0zS1gAAhqRldkrt0siEyPRzz60O60mw22nY44hGqKdc6KCeuCpY1Hx18UWk apCshNkKIBnDKCtGjDqf =Fetl -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-3.1-pull-request' into staging - gdb signal handling fix - add SO_REUSEPORT - remove dead-code # gpg: Signature made Mon 12 Nov 2018 20:48:23 GMT # gpg: using RSA key F30C38BD3F2FBE3C # gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" # gpg: aka "Laurent Vivier <laurent@vivier.eu>" # gpg: aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" # Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F 5173 F30C 38BD 3F2F BE3C * remotes/vivier2/tags/linux-user-for-3.1-pull-request: linux-user: Add support for SO_REUSEPORT linux-user: Clean up nios2 main loop signal handling linux-user: Don't call gdb_handlesig() before queue_signal() linux-user: Remove dead error-checking code Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
186ac05f74
|
@ -73,7 +73,7 @@
|
||||||
void cpu_loop(CPUARMState *env)
|
void cpu_loop(CPUARMState *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(arm_env_get_cpu(env));
|
CPUState *cs = CPU(arm_env_get_cpu(env));
|
||||||
int trapnr, sig;
|
int trapnr;
|
||||||
abi_long ret;
|
abi_long ret;
|
||||||
target_siginfo_t info;
|
target_siginfo_t info;
|
||||||
|
|
||||||
|
@ -121,13 +121,10 @@ void cpu_loop(CPUARMState *env)
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
case EXCP_BKPT:
|
case EXCP_BKPT:
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
if (sig) {
|
info.si_errno = 0;
|
||||||
info.si_signo = sig;
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
info.si_errno = 0;
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_SEMIHOST:
|
case EXCP_SEMIHOST:
|
||||||
env->xregs[0] = do_arm_semihosting(env);
|
env->xregs[0] = do_arm_semihosting(env);
|
||||||
|
|
|
@ -179,14 +179,10 @@ void cpu_loop(CPUAlphaState *env)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
info.si_signo = gdb_handlesig(cs, TARGET_SIGTRAP);
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
if (info.si_signo) {
|
info.si_errno = 0;
|
||||||
info.si_errno = 0;
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
} else {
|
|
||||||
arch_interrupt = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
/* Just indicate that signals should be handled asap. */
|
/* Just indicate that signals should be handled asap. */
|
||||||
|
|
|
@ -397,18 +397,10 @@ void cpu_loop(CPUARMState *env)
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
excp_debug:
|
excp_debug:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig)
|
|
||||||
{
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_KERNEL_TRAP:
|
case EXCP_KERNEL_TRAP:
|
||||||
if (do_kernel_trap(env))
|
if (do_kernel_trap(env))
|
||||||
|
|
|
@ -64,18 +64,10 @@ void cpu_loop(CPUCRISState *env)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig)
|
|
||||||
{
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_ATOMIC:
|
case EXCP_ATOMIC:
|
||||||
cpu_exec_step_atomic(cs);
|
cpu_exec_step_atomic(cs);
|
||||||
|
|
|
@ -182,13 +182,10 @@ void cpu_loop(CPUHPPAState *env)
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
trapnr = gdb_handlesig(cs, TARGET_SIGTRAP);
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
if (trapnr) {
|
info.si_errno = 0;
|
||||||
info.si_signo = trapnr;
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
info.si_errno = 0;
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, trapnr, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
/* just indicate that signals should be handled asap */
|
/* just indicate that signals should be handled asap */
|
||||||
|
|
|
@ -225,18 +225,10 @@ void cpu_loop(CPUX86State *env)
|
||||||
/* just indicate that signals should be handled asap */
|
/* just indicate that signals should be handled asap */
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig)
|
|
||||||
{
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_ATOMIC:
|
case EXCP_ATOMIC:
|
||||||
cpu_exec_step_atomic(cs);
|
cpu_exec_step_atomic(cs);
|
||||||
|
|
|
@ -112,18 +112,10 @@ void cpu_loop(CPUM68KState *env)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig)
|
|
||||||
{
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_ATOMIC:
|
case EXCP_ATOMIC:
|
||||||
cpu_exec_step_atomic(cs);
|
cpu_exec_step_atomic(cs);
|
||||||
|
|
|
@ -334,9 +334,6 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
|
||||||
(uint32_t *)(frame->retcode + 0));
|
(uint32_t *)(frame->retcode + 0));
|
||||||
__put_user(0x4e40, (uint16_t *)(frame->retcode + 4));
|
__put_user(0x4e40, (uint16_t *)(frame->retcode + 4));
|
||||||
|
|
||||||
if (err)
|
|
||||||
goto give_sigsegv;
|
|
||||||
|
|
||||||
/* Set up to return from userspace */
|
/* Set up to return from userspace */
|
||||||
|
|
||||||
env->aregs[7] = frame_addr;
|
env->aregs[7] = frame_addr;
|
||||||
|
|
|
@ -113,18 +113,10 @@ void cpu_loop(CPUMBState *env)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig)
|
|
||||||
{
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_ATOMIC:
|
case EXCP_ATOMIC:
|
||||||
cpu_exec_step_atomic(cs);
|
cpu_exec_step_atomic(cs);
|
||||||
|
|
|
@ -592,18 +592,10 @@ done_syscall:
|
||||||
/* just indicate that signals should be handled asap */
|
/* just indicate that signals should be handled asap */
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig)
|
|
||||||
{
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_SC:
|
case EXCP_SC:
|
||||||
if (do_store_exclusive(env)) {
|
if (do_store_exclusive(env)) {
|
||||||
|
|
|
@ -26,13 +26,12 @@ void cpu_loop(CPUNios2State *env)
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = ENV_GET_CPU(env);
|
||||||
Nios2CPU *cpu = NIOS2_CPU(cs);
|
Nios2CPU *cpu = NIOS2_CPU(cs);
|
||||||
target_siginfo_t info;
|
target_siginfo_t info;
|
||||||
int trapnr, gdbsig, ret;
|
int trapnr, ret;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
cpu_exec_start(cs);
|
cpu_exec_start(cs);
|
||||||
trapnr = cpu_exec(cs);
|
trapnr = cpu_exec(cs);
|
||||||
cpu_exec_end(cs);
|
cpu_exec_end(cs);
|
||||||
gdbsig = 0;
|
|
||||||
|
|
||||||
switch (trapnr) {
|
switch (trapnr) {
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
|
@ -68,7 +67,10 @@ void cpu_loop(CPUNios2State *env)
|
||||||
env->regs[R_EA] = env->regs[R_PC] + 4;
|
env->regs[R_EA] = env->regs[R_PC] + 4;
|
||||||
env->regs[R_PC] = cpu->exception_addr;
|
env->regs[R_PC] = cpu->exception_addr;
|
||||||
|
|
||||||
gdbsig = TARGET_SIGTRAP;
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0xaa:
|
case 0xaa:
|
||||||
|
@ -106,14 +108,7 @@ kuser_fail:
|
||||||
default:
|
default:
|
||||||
EXCP_DUMP(env, "\nqemu: unhandled CPU exception %#x - aborting\n",
|
EXCP_DUMP(env, "\nqemu: unhandled CPU exception %#x - aborting\n",
|
||||||
trapnr);
|
trapnr);
|
||||||
gdbsig = TARGET_SIGILL;
|
abort();
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (gdbsig) {
|
|
||||||
gdb_handlesig(cs, gdbsig);
|
|
||||||
if (gdbsig != TARGET_SIGTRAP) {
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
process_pending_signals(env);
|
process_pending_signals(env);
|
||||||
|
|
|
@ -85,13 +85,10 @@ void cpu_loop(CPUOpenRISCState *env)
|
||||||
/* We processed the pending cpu work above. */
|
/* We processed the pending cpu work above. */
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
trapnr = gdb_handlesig(cs, TARGET_SIGTRAP);
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
if (trapnr) {
|
info.si_errno = 0;
|
||||||
info.si_signo = trapnr;
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
info.si_errno = 0;
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_ATOMIC:
|
case EXCP_ATOMIC:
|
||||||
cpu_exec_step_atomic(cs);
|
cpu_exec_step_atomic(cs);
|
||||||
|
|
|
@ -69,7 +69,7 @@ void cpu_loop(CPUPPCState *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(ppc_env_get_cpu(env));
|
CPUState *cs = CPU(ppc_env_get_cpu(env));
|
||||||
target_siginfo_t info;
|
target_siginfo_t info;
|
||||||
int trapnr, sig;
|
int trapnr;
|
||||||
target_ulong ret;
|
target_ulong ret;
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
@ -449,15 +449,10 @@ void cpu_loop(CPUPPCState *env)
|
||||||
env->gpr[3] = ret;
|
env->gpr[3] = ret;
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
if (sig) {
|
info.si_errno = 0;
|
||||||
info.si_signo = sig;
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
info.si_errno = 0;
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
} else {
|
|
||||||
arch_interrupt = false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_INTERRUPT:
|
case EXCP_INTERRUPT:
|
||||||
/* just indicate that signals should be handled asap */
|
/* just indicate that signals should be handled asap */
|
||||||
|
|
|
@ -88,7 +88,7 @@ void cpu_loop(CPURISCVState *env)
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
gdbstep:
|
gdbstep:
|
||||||
signum = gdb_handlesig(cs, TARGET_SIGTRAP);
|
signum = TARGET_SIGTRAP;
|
||||||
sigcode = TARGET_TRAP_BRKPT;
|
sigcode = TARGET_TRAP_BRKPT;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -61,12 +61,9 @@ void cpu_loop(CPUS390XState *env)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
sig = TARGET_SIGTRAP;
|
||||||
if (sig) {
|
n = TARGET_TRAP_BRKPT;
|
||||||
n = TARGET_TRAP_BRKPT;
|
goto do_signal_pc;
|
||||||
goto do_signal_pc;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EXCP_PGM:
|
case EXCP_PGM:
|
||||||
n = env->int_pgm_code;
|
n = env->int_pgm_code;
|
||||||
switch (n) {
|
switch (n) {
|
||||||
|
|
|
@ -57,19 +57,10 @@ void cpu_loop(CPUSH4State *env)
|
||||||
/* just indicate that signals should be handled asap */
|
/* just indicate that signals should be handled asap */
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig) {
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
} else {
|
|
||||||
arch_interrupt = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 0xa0:
|
case 0xa0:
|
||||||
case 0xc0:
|
case 0xc0:
|
||||||
|
|
|
@ -279,7 +279,6 @@ long do_sigreturn(CPUSH4State *regs)
|
||||||
sigset_t blocked;
|
sigset_t blocked;
|
||||||
target_sigset_t target_set;
|
target_sigset_t target_set;
|
||||||
int i;
|
int i;
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
frame_addr = regs->gregs[15];
|
frame_addr = regs->gregs[15];
|
||||||
trace_user_do_sigreturn(regs, frame_addr);
|
trace_user_do_sigreturn(regs, frame_addr);
|
||||||
|
@ -292,9 +291,6 @@ long do_sigreturn(CPUSH4State *regs)
|
||||||
__get_user(target_set.sig[i], &frame->extramask[i - 1]);
|
__get_user(target_set.sig[i], &frame->extramask[i - 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
|
||||||
goto badframe;
|
|
||||||
|
|
||||||
target_to_host_sigset_internal(&blocked, &target_set);
|
target_to_host_sigset_internal(&blocked, &target_set);
|
||||||
set_sigmask(&blocked);
|
set_sigmask(&blocked);
|
||||||
|
|
||||||
|
|
|
@ -268,18 +268,10 @@ void cpu_loop (CPUSPARCState *env)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
{
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
int sig;
|
info.si_errno = 0;
|
||||||
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
sig = gdb_handlesig(cs, TARGET_SIGTRAP);
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
if (sig)
|
|
||||||
{
|
|
||||||
info.si_signo = sig;
|
|
||||||
info.si_errno = 0;
|
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXCP_ATOMIC:
|
case EXCP_ATOMIC:
|
||||||
cpu_exec_step_atomic(cs);
|
cpu_exec_step_atomic(cs);
|
||||||
|
|
|
@ -256,8 +256,6 @@ void setup_frame(int sig, struct target_sigaction *ka,
|
||||||
/* t 0x10 */
|
/* t 0x10 */
|
||||||
val32 = 0x91d02010;
|
val32 = 0x91d02010;
|
||||||
__put_user(val32, &sf->insns[1]);
|
__put_user(val32, &sf->insns[1]);
|
||||||
if (err)
|
|
||||||
goto sigsegv;
|
|
||||||
}
|
}
|
||||||
unlock_user(sf, sf_addr, sizeof(struct target_signal_frame));
|
unlock_user(sf, sf_addr, sizeof(struct target_signal_frame));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1742,6 +1742,9 @@ print_optint:
|
||||||
case TARGET_SO_REUSEADDR:
|
case TARGET_SO_REUSEADDR:
|
||||||
gemu_log("SO_REUSEADDR,");
|
gemu_log("SO_REUSEADDR,");
|
||||||
goto print_optint;
|
goto print_optint;
|
||||||
|
case TARGET_SO_REUSEPORT:
|
||||||
|
gemu_log("SO_REUSEPORT,");
|
||||||
|
goto print_optint;
|
||||||
case TARGET_SO_TYPE:
|
case TARGET_SO_TYPE:
|
||||||
gemu_log("SO_TYPE,");
|
gemu_log("SO_TYPE,");
|
||||||
goto print_optint;
|
goto print_optint;
|
||||||
|
|
|
@ -2061,6 +2061,11 @@ set_timeout:
|
||||||
case TARGET_SO_REUSEADDR:
|
case TARGET_SO_REUSEADDR:
|
||||||
optname = SO_REUSEADDR;
|
optname = SO_REUSEADDR;
|
||||||
break;
|
break;
|
||||||
|
#ifdef SO_REUSEPORT
|
||||||
|
case TARGET_SO_REUSEPORT:
|
||||||
|
optname = SO_REUSEPORT;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case TARGET_SO_TYPE:
|
case TARGET_SO_TYPE:
|
||||||
optname = SO_TYPE;
|
optname = SO_TYPE;
|
||||||
break;
|
break;
|
||||||
|
@ -2222,6 +2227,11 @@ static abi_long do_getsockopt(int sockfd, int level, int optname,
|
||||||
case TARGET_SO_REUSEADDR:
|
case TARGET_SO_REUSEADDR:
|
||||||
optname = SO_REUSEADDR;
|
optname = SO_REUSEADDR;
|
||||||
goto int_case;
|
goto int_case;
|
||||||
|
#ifdef SO_REUSEPORT
|
||||||
|
case TARGET_SO_REUSEPORT:
|
||||||
|
optname = SO_REUSEPORT;
|
||||||
|
goto int_case;
|
||||||
|
#endif
|
||||||
case TARGET_SO_TYPE:
|
case TARGET_SO_TYPE:
|
||||||
optname = SO_TYPE;
|
optname = SO_TYPE;
|
||||||
goto int_case;
|
goto int_case;
|
||||||
|
|
|
@ -239,13 +239,10 @@ void cpu_loop(CPUXtensaState *env)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXCP_DEBUG:
|
case EXCP_DEBUG:
|
||||||
trapnr = gdb_handlesig(cs, TARGET_SIGTRAP);
|
info.si_signo = TARGET_SIGTRAP;
|
||||||
if (trapnr) {
|
info.si_errno = 0;
|
||||||
info.si_signo = trapnr;
|
info.si_code = TARGET_TRAP_BRKPT;
|
||||||
info.si_errno = 0;
|
queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
|
||||||
info.si_code = TARGET_TRAP_BRKPT;
|
|
||||||
queue_signal(env, trapnr, QEMU_SI_FAULT, &info);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EXC_DEBUG:
|
case EXC_DEBUG:
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue