summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2019-10-02 04:41:47 +0000
committermidipix <writeonce@midipix.org>2019-10-02 12:05:02 +0000
commit8b65913ee3762406f572713655b9f232eaaaa4f8 (patch)
treed0e48ad860c0e75d2bccdff349fad03cdb4344f3
parent5b9bafb41534db64efc1ef42c922f3293762c89e (diff)
downloadchainport-8b65913ee3762406f572713655b9f232eaaaa4f8.tar.bz2
chainport-8b65913ee3762406f572713655b9f232eaaaa4f8.tar.xz
mgdb: winnt_dbg_signal(): initial implementation and integration.
-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;