diff options
author | midipix <writeonce@midipix.org> | 2019-10-02 04:41:47 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2019-10-02 12:05:02 +0000 |
commit | 8b65913ee3762406f572713655b9f232eaaaa4f8 (patch) | |
tree | d0e48ad860c0e75d2bccdff349fad03cdb4344f3 | |
parent | 5b9bafb41534db64efc1ef42c922f3293762c89e (diff) | |
download | chainport-8b65913ee3762406f572713655b9f232eaaaa4f8.tar.bz2 chainport-8b65913ee3762406f572713655b9f232eaaaa4f8.tar.xz |
mgdb: winnt_dbg_signal(): initial implementation and integration.
-rw-r--r-- | overlay/mgdb/gdb/winnt-nat.c | 13 | ||||
-rw-r--r-- | overlay/mgdb/gdb/winnt-nat.h | 2 |
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; |