summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--overlay/mgdb/gdb/winnt-nat.c13
-rw-r--r--overlay/mgdb/gdb/winnt-nat.h2
2 files changed, 14 insertions, 1 deletions
diff --git a/overlay/mgdb/gdb/winnt-nat.c b/overlay/mgdb/gdb/winnt-nat.c
index 2c0628e..de2cf69 100644
--- a/overlay/mgdb/gdb/winnt-nat.c
+++ b/overlay/mgdb/gdb/winnt-nat.c
@@ -887,6 +887,17 @@ static int winnt_exception_filter_match(struct __dbg_event * event)
return 0;
}
+static enum gdb_signal winnt_dbg_signal(struct __dbg_event * event)
+{
+ switch (event->exception_record->exception_code) {
+ case WINNT_STATUS_ACCESS_VIOLATION:
+ return GDB_SIGNAL_SEGV;
+
+ default:
+ return GDB_SIGNAL_UNKNOWN;
+ }
+}
+
static struct __dbg_event * winnt_wait_event(ptid_t ptid)
{
struct __dbg_event event;
@@ -995,7 +1006,7 @@ static ptid_t winnt_wait(
switch (event->evttype) {
case __DBG_STATE_EXCEPTION:
waitstatus->kind = TARGET_WAITKIND_STOPPED;
- waitstatus->value.sig = GDB_SIGNAL_UNKNOWN;
+ waitstatus->value.sig = winnt_dbg_signal(event);
break;
case __DBG_STATE_BREAKPOINT:
diff --git a/overlay/mgdb/gdb/winnt-nat.h b/overlay/mgdb/gdb/winnt-nat.h
index 593a140..6dcab69 100644
--- a/overlay/mgdb/gdb/winnt-nat.h
+++ b/overlay/mgdb/gdb/winnt-nat.h
@@ -22,6 +22,8 @@
#define WINNT_EXCEPTION_SECOND_CHANCE 0x02
#define WINNT_EXCEPTION_ALL 0xffffffff
+#define WINNT_STATUS_ACCESS_VIOLATION 0xC0000005
+
struct regcache;
struct winnt_process;