libvx32: use si_addr, not cr2, in case of segmentation fault - vx32 - Local 9vx git repository for patches. (DIR) Log (DIR) Files (DIR) Refs --- (DIR) commit e353c388b738920a4b17c7630c3ddc597e2c09d5 (DIR) parent 4135fa2ab106a92a7c46b4ea0b11659c93b644dc (HTM) Author: Russ Cox <rsc@swtch.com> Date: Sun, 29 Jun 2008 21:32:36 -0400 libvx32: use si_addr, not cr2, in case of segmentation fault Diffstat: src/libvx32/darwin.c | 3 +-- src/libvx32/freebsd.c | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) --- (DIR) diff --git a/src/libvx32/darwin.c b/src/libvx32/darwin.c @@ -97,7 +97,6 @@ int vx32_sighandler(int signo, siginfo_t *si, void *v) vxemu *emu; ucontext_t *uc; mcontext_t ctx; - uint32_t cr2; // In Darwin, 'mcontext_t' is actually a pointer... uc = v; @@ -256,7 +255,7 @@ int vx32_sighandler(int signo, siginfo_t *si, void *v) if (emu->trapenv == NULL) return 0; emu->cpu.traperr = ctx->es.err; - emu->cpu.trapva = ctx->es.faultvaddr; + emu->cpu.trapva = (uint32_t)si->si_addr; ctx->ss = *emu->trapenv; return 1; } (DIR) diff --git a/src/libvx32/freebsd.c b/src/libvx32/freebsd.c @@ -324,10 +324,6 @@ int vx32_sighandler(int signo, siginfo_t *si, void *v) return 0; emu->cpu.traperr = mc->mc_err; emu->cpu.trapva = cr2; - - emu->cpu.traperr = mc->mc_err; - emu->cpu.trapva = cr2; - memmove(&mc->mc_gs, &emu->trapenv->mc_gs, 19*4); return 1; }