From e1825e0ff27d2f663d27aebcbd73dce617e985c6 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 18 Jun 2023 16:35:53 +0200 Subject: [32BITS] Some work on signal handling from 32bits code (not enough yet) --- src/libtools/signals.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/libtools/signals.c b/src/libtools/signals.c index c38cacbb..a5804b9e 100755 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -323,6 +323,8 @@ uint64_t RunFunctionHandler(int* exit, int dynarec, x64_ucontext_t* sigcontext, int oldquitonlongjmp = emu->quitonlongjmp; emu->quitonlongjmp = 2; + int old_cs = R_CS; + R_CS = 0x33; emu->eflags.x64 &= ~(1<6 && !emu->longjmp) R_RSP+=((nargs-6)*sizeof(void*)); + if(!emu->longjmp && R_CS==0x33) + R_CS = old_cs; + emu->quitonlongjmp = oldquitonlongjmp; #ifdef DYNAREC @@ -1264,9 +1269,9 @@ exit(-1); if(!(i%4)) printf_log(log_minimum, "\n"); printf_log(log_minimum, "%s:0x%016llx ", reg_name[i], p->uc_mcontext.regs[10+i]); } - for (int i=0; i<3; ++i) { - printf_log(log_minimum, "%s:0x%x ", seg_name[i], emu->segs[i]); - } + printf_log(log_minimum, "\n"); + for (int i=0; i<6; ++i) + printf_log(log_minimum, "%s:0x%04x ", seg_name[i], emu->segs[i]); } if(rsp!=addr && getProtection((uintptr_t)rsp-4*8) && getProtection((uintptr_t)rsp+4*8)) for (int i=-4; i<4; ++i) { @@ -1279,9 +1284,9 @@ exit(-1); if(!(i%4)) printf_log(log_minimum, "\n"); printf_log(log_minimum, "%s:0x%016llx ", reg_name[i], p->uc_mcontext.__gregs[16+i]); } - for (int i=0; i<3; ++i) { - printf_log(log_minimum, "%s:0x%x ", seg_name[i], emu->segs[i]); - } + printf_log(log_minimum, "\n"); + for (int i=0; i<6; ++i) + printf_log(log_minimum, "%s:0x%04x ", seg_name[i], emu->segs[i]); } if(rsp!=addr && getProtection((uintptr_t)rsp-4*8) && getProtection((uintptr_t)rsp+4*8)) for (int i=-4; i<4; ++i) { -- cgit 1.4.1