about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/dynarec_la64_00.c13
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00_3.c12
2 files changed, 14 insertions, 11 deletions
diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c
index 0aa9a65d..02d2b8dc 100644
--- a/src/dynarec/la64/dynarec_la64_00.c
+++ b/src/dynarec/la64/dynarec_la64_00.c
@@ -1624,18 +1624,19 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     jump_to_epilog_fast(dyn, 0, xRIP, ninst);
                 }
             } else {
+                INST_NAME("INT 3");
                 if (!box64_ignoreint3) {
-                    INST_NAME("INT 3");
                     // check if TRAP signal is handled
-                    LD_D(x1, xEmu, offsetof(x64emu_t, context));
-                    MOV64x(x2, offsetof(box64context_t, signals[SIGTRAP]));
-                    ADD_D(x2, x2, x1);
-                    LD_D(x3, x2, 0);
+                    TABLE64(x1, (uintptr_t)my_context);
+                    MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP]));
+                    LDX_D(x3, x1, x2);
                     CBZ_NEXT(x3);
-                    GETIP(ip);
+                    GETIP(addr);
                     STORE_XEMU_CALL();
                     CALL(native_int3, -1);
                     LOAD_XEMU_CALL();
+                    *need_epilog = 0;
+                    *ok = 0;
                 }
             }
             break;
diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c
index 43ef69d7..62618e42 100644
--- a/src/dynarec/rv64/dynarec_rv64_00_3.c
+++ b/src/dynarec/rv64/dynarec_rv64_00_3.c
@@ -420,18 +420,20 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int
                     }
                 }
             } else {
-                if(!box64_ignoreint3) {
-                    INST_NAME("INT 3");
+                INST_NAME("INT 3");
+                if (!box64_ignoreint3) {
                     // check if TRAP signal is handled
-                    LD(x1, xEmu, offsetof(x64emu_t, context));
-                    MOV64x(x2, offsetof(box64context_t, signals[SIGTRAP]));
+                    TABLE64(x1, (uintptr_t)my_context);
+                    MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP]));
                     ADD(x2, x2, x1);
                     LD(x3, x2, 0);
                     CBZ_NEXT(x3);
-                    GETIP(ip);
+                    GETIP(addr);
                     STORE_XEMU_CALL(x3);
                     CALL(native_int3, -1);
                     LOAD_XEMU_CALL();
+                    *need_epilog = 0;
+                    *ok = 0;
                 }
                 break;
             }