diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-17 16:21:38 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-17 16:21:38 +0100 |
| commit | 54be0c0dec8ad3c81caa0366f84c056717792cb2 (patch) | |
| tree | ec3f895739734aba1a0b73eb622634cf39c1e8c4 /src/libtools | |
| parent | 20df2789b542b5c280d71b4ae0fa797a24f6d130 (diff) | |
| download | box64-54be0c0dec8ad3c81caa0366f84c056717792cb2.tar.gz box64-54be0c0dec8ad3c81caa0366f84c056717792cb2.zip | |
Saved defered flag status when processing signal / foreign function
Diffstat (limited to 'src/libtools')
| -rw-r--r-- | src/libtools/signals.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/libtools/signals.c b/src/libtools/signals.c index 19c49dab..2145a3e4 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -966,7 +966,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void else if(sig==SIGSEGV) { if((uintptr_t)info->si_addr == sigcontext->uc_mcontext.gregs[X64_RIP]) { sigcontext->uc_mcontext.gregs[X64_ERR] = (info->si_errno==0x1234)?0:((info->si_errno==0xdead)?(0x2|(info->si_code<<3)):0x0010); // execution flag issue (probably), unless it's a #GP(0) - sigcontext->uc_mcontext.gregs[X64_TRAPNO] = (info->si_code == SEGV_ACCERR || (info->si_errno==0x1234) || (info->si_errno==0xdead) || (uintptr_t)info->si_addr==0)?13:14; + sigcontext->uc_mcontext.gregs[X64_TRAPNO] = ((info->si_code==SEGV_ACCERR) || (info->si_errno==0x1234) || (info->si_errno==0xdead) || ((uintptr_t)info->si_addr==0))?13:14; } else if(info->si_code==SEGV_ACCERR && !(prot&PROT_WRITE)) { sigcontext->uc_mcontext.gregs[X64_ERR] = 0x0002; // write flag issue if(labs((intptr_t)info->si_addr-(intptr_t)sigcontext->uc_mcontext.gregs[X64_RSP])<16) |