| OLD | NEW |
| 1 /* Low level interface to Windows debugging, for gdbserver. | 1 /* Low level interface to Windows debugging, for gdbserver. |
| 2 Copyright (C) 2006-2012 Free Software Foundation, Inc. | 2 Copyright (C) 2006-2012 Free Software Foundation, Inc. |
| 3 | 3 |
| 4 Contributed by Leo Zayas. Based on "win32-nat.c" from GDB. | 4 Contributed by Leo Zayas. Based on "win32-nat.c" from GDB. |
| 5 | 5 |
| 6 This file is part of GDB. | 6 This file is part of GDB. |
| 7 | 7 |
| 8 This program is free software; you can redistribute it and/or modify | 8 This program is free software; you can redistribute it and/or modify |
| 9 it under the terms of the GNU General Public License as published by | 9 it under the terms of the GNU General Public License as published by |
| 10 the Free Software Foundation; either version 3 of the License, or | 10 the Free Software Foundation; either version 3 of the License, or |
| 11 (at your option) any later version. | 11 (at your option) any later version. |
| 12 | 12 |
| 13 This program is distributed in the hope that it will be useful, | 13 This program is distributed in the hope that it will be useful, |
| 14 but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 16 GNU General Public License for more details. | 16 GNU General Public License for more details. |
| 17 | 17 |
| 18 You should have received a copy of the GNU General Public License | 18 You should have received a copy of the GNU General Public License |
| 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */ | 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| 20 | 20 |
| 21 #include "server.h" | 21 #include "server.h" |
| 22 #include "regcache.h" | 22 #include "regcache.h" |
| 23 #include "gdb/signals.h" | 23 #include "gdb/signals.h" |
| 24 #include "gdb/fileio.h" | 24 #include "gdb/fileio.h" |
| 25 #include "mem-break.h" | 25 #include "mem-break.h" |
| 26 #include "win32-low.h" | 26 #include "win32-low.h" |
| 27 #include "gdbthread.h" |
| 27 | 28 |
| 28 #include <stdint.h> | 29 #include <stdint.h> |
| 29 #include <windows.h> | 30 #include <windows.h> |
| 30 #include <winnt.h> | 31 #include <winnt.h> |
| 31 #include <imagehlp.h> | 32 #include <imagehlp.h> |
| 32 #include <tlhelp32.h> | 33 #include <tlhelp32.h> |
| 33 #include <psapi.h> | 34 #include <psapi.h> |
| 34 #include <sys/param.h> | 35 #include <sys/param.h> |
| 35 #include <process.h> | 36 #include <process.h> |
| 36 | 37 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 66 ((winapi_ ## PROC) GetProcAddress (DLL, #PROC)) | 67 ((winapi_ ## PROC) GetProcAddress (DLL, #PROC)) |
| 67 #endif | 68 #endif |
| 68 | 69 |
| 69 int using_threads = 1; | 70 int using_threads = 1; |
| 70 | 71 |
| 71 /* Globals. */ | 72 /* Globals. */ |
| 72 static int attaching = 0; | 73 static int attaching = 0; |
| 73 static HANDLE current_process_handle = NULL; | 74 static HANDLE current_process_handle = NULL; |
| 74 static DWORD current_process_id = 0; | 75 static DWORD current_process_id = 0; |
| 75 static DWORD main_thread_id = 0; | 76 static DWORD main_thread_id = 0; |
| 76 static enum target_signal last_sig = TARGET_SIGNAL_0; | 77 static enum gdb_signal last_sig = GDB_SIGNAL_0; |
| 77 | 78 |
| 78 /* The current debug event from WaitForDebugEvent. */ | 79 /* The current debug event from WaitForDebugEvent. */ |
| 79 static DEBUG_EVENT current_event; | 80 static DEBUG_EVENT current_event; |
| 80 | 81 |
| 81 /* Non zero if an interrupt request is to be satisfied by suspending | 82 /* Non zero if an interrupt request is to be satisfied by suspending |
| 82 all threads. */ | 83 all threads. */ |
| 83 static int soft_interrupt_requested = 0; | 84 static int soft_interrupt_requested = 0; |
| 84 | 85 |
| 85 /* Non zero if the inferior is stopped in a simulated breakpoint done | 86 /* Non zero if the inferior is stopped in a simulated breakpoint done |
| 86 by suspending all the threads. */ | 87 by suspending all the threads. */ |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 state. */ | 301 state. */ |
| 301 static void | 302 static void |
| 302 child_init_thread_list (void) | 303 child_init_thread_list (void) |
| 303 { | 304 { |
| 304 for_each_inferior (&all_threads, delete_thread_info); | 305 for_each_inferior (&all_threads, delete_thread_info); |
| 305 } | 306 } |
| 306 | 307 |
| 307 static void | 308 static void |
| 308 do_initial_child_stuff (HANDLE proch, DWORD pid, int attached) | 309 do_initial_child_stuff (HANDLE proch, DWORD pid, int attached) |
| 309 { | 310 { |
| 310 last_sig = TARGET_SIGNAL_0; | 311 last_sig = GDB_SIGNAL_0; |
| 311 | 312 |
| 312 current_process_handle = proch; | 313 current_process_handle = proch; |
| 313 current_process_id = pid; | 314 current_process_id = pid; |
| 314 main_thread_id = 0; | 315 main_thread_id = 0; |
| 315 | 316 |
| 316 soft_interrupt_requested = 0; | 317 soft_interrupt_requested = 0; |
| 317 faked_breakpoint = 0; | 318 faked_breakpoint = 0; |
| 318 | 319 |
| 319 memset (¤t_event, 0, sizeof (current_event)); | 320 memset (¤t_event, 0, sizeof (current_event)); |
| 320 | 321 |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 798 res = 0; | 799 res = 0; |
| 799 return res; | 800 return res; |
| 800 } | 801 } |
| 801 | 802 |
| 802 /* Resume the inferior process. RESUME_INFO describes how we want | 803 /* Resume the inferior process. RESUME_INFO describes how we want |
| 803 to resume. */ | 804 to resume. */ |
| 804 static void | 805 static void |
| 805 win32_resume (struct thread_resume *resume_info, size_t n) | 806 win32_resume (struct thread_resume *resume_info, size_t n) |
| 806 { | 807 { |
| 807 DWORD tid; | 808 DWORD tid; |
| 808 enum target_signal sig; | 809 enum gdb_signal sig; |
| 809 int step; | 810 int step; |
| 810 win32_thread_info *th; | 811 win32_thread_info *th; |
| 811 DWORD continue_status = DBG_CONTINUE; | 812 DWORD continue_status = DBG_CONTINUE; |
| 812 ptid_t ptid; | 813 ptid_t ptid; |
| 813 | 814 |
| 814 /* This handles the very limited set of resume packets that GDB can | 815 /* This handles the very limited set of resume packets that GDB can |
| 815 currently produce. */ | 816 currently produce. */ |
| 816 | 817 |
| 817 if (n == 1 && ptid_equal (resume_info[0].thread, minus_one_ptid)) | 818 if (n == 1 && ptid_equal (resume_info[0].thread, minus_one_ptid)) |
| 818 tid = -1; | 819 tid = -1; |
| 819 else if (n > 1) | 820 else if (n > 1) |
| 820 tid = -1; | 821 tid = -1; |
| 821 else | 822 else |
| 822 /* Yes, we're ignoring resume_info[0].thread. It'd be tricky to make | 823 /* Yes, we're ignoring resume_info[0].thread. It'd be tricky to make |
| 823 the Windows resume code do the right thing for thread switching. */ | 824 the Windows resume code do the right thing for thread switching. */ |
| 824 tid = current_event.dwThreadId; | 825 tid = current_event.dwThreadId; |
| 825 | 826 |
| 826 if (!ptid_equal (resume_info[0].thread, minus_one_ptid)) | 827 if (!ptid_equal (resume_info[0].thread, minus_one_ptid)) |
| 827 { | 828 { |
| 828 sig = resume_info[0].sig; | 829 sig = resume_info[0].sig; |
| 829 step = resume_info[0].kind == resume_step; | 830 step = resume_info[0].kind == resume_step; |
| 830 } | 831 } |
| 831 else | 832 else |
| 832 { | 833 { |
| 833 sig = 0; | 834 sig = 0; |
| 834 step = 0; | 835 step = 0; |
| 835 } | 836 } |
| 836 | 837 |
| 837 if (sig != TARGET_SIGNAL_0) | 838 if (sig != GDB_SIGNAL_0) |
| 838 { | 839 { |
| 839 if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) | 840 if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) |
| 840 { | 841 { |
| 841 OUTMSG (("Cannot continue with signal %d here.\n", sig)); | 842 OUTMSG (("Cannot continue with signal %d here.\n", sig)); |
| 842 } | 843 } |
| 843 else if (sig == last_sig) | 844 else if (sig == last_sig) |
| 844 continue_status = DBG_EXCEPTION_NOT_HANDLED; | 845 continue_status = DBG_EXCEPTION_NOT_HANDLED; |
| 845 else | 846 else |
| 846 OUTMSG (("Can only continue with recieved signal %d.\n", last_sig)); | 847 OUTMSG (("Can only continue with recieved signal %d.\n", last_sig)); |
| 847 } | 848 } |
| 848 | 849 |
| 849 last_sig = TARGET_SIGNAL_0; | 850 last_sig = GDB_SIGNAL_0; |
| 850 | 851 |
| 851 /* Get context for the currently selected thread. */ | 852 /* Get context for the currently selected thread. */ |
| 852 ptid = debug_event_ptid (¤t_event); | 853 ptid = debug_event_ptid (¤t_event); |
| 853 th = thread_rec (ptid, FALSE); | 854 th = thread_rec (ptid, FALSE); |
| 854 if (th) | 855 if (th) |
| 855 { | 856 { |
| 856 if (th->context.ContextFlags) | 857 if (th->context.ContextFlags) |
| 857 { | 858 { |
| 858 /* Move register values from the inferior into the thread | 859 /* Move register values from the inferior into the thread |
| 859 context structure. */ | 860 context structure. */ |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1224 handle_exception (struct target_waitstatus *ourstatus) | 1225 handle_exception (struct target_waitstatus *ourstatus) |
| 1225 { | 1226 { |
| 1226 DWORD code = current_event.u.Exception.ExceptionRecord.ExceptionCode; | 1227 DWORD code = current_event.u.Exception.ExceptionRecord.ExceptionCode; |
| 1227 | 1228 |
| 1228 ourstatus->kind = TARGET_WAITKIND_STOPPED; | 1229 ourstatus->kind = TARGET_WAITKIND_STOPPED; |
| 1229 | 1230 |
| 1230 switch (code) | 1231 switch (code) |
| 1231 { | 1232 { |
| 1232 case EXCEPTION_ACCESS_VIOLATION: | 1233 case EXCEPTION_ACCESS_VIOLATION: |
| 1233 OUTMSG2 (("EXCEPTION_ACCESS_VIOLATION")); | 1234 OUTMSG2 (("EXCEPTION_ACCESS_VIOLATION")); |
| 1234 ourstatus->value.sig = TARGET_SIGNAL_SEGV; | 1235 ourstatus->value.sig = GDB_SIGNAL_SEGV; |
| 1235 break; | 1236 break; |
| 1236 case STATUS_STACK_OVERFLOW: | 1237 case STATUS_STACK_OVERFLOW: |
| 1237 OUTMSG2 (("STATUS_STACK_OVERFLOW")); | 1238 OUTMSG2 (("STATUS_STACK_OVERFLOW")); |
| 1238 ourstatus->value.sig = TARGET_SIGNAL_SEGV; | 1239 ourstatus->value.sig = GDB_SIGNAL_SEGV; |
| 1239 break; | 1240 break; |
| 1240 case STATUS_FLOAT_DENORMAL_OPERAND: | 1241 case STATUS_FLOAT_DENORMAL_OPERAND: |
| 1241 OUTMSG2 (("STATUS_FLOAT_DENORMAL_OPERAND")); | 1242 OUTMSG2 (("STATUS_FLOAT_DENORMAL_OPERAND")); |
| 1242 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1243 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1243 break; | 1244 break; |
| 1244 case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: | 1245 case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: |
| 1245 OUTMSG2 (("EXCEPTION_ARRAY_BOUNDS_EXCEEDED")); | 1246 OUTMSG2 (("EXCEPTION_ARRAY_BOUNDS_EXCEEDED")); |
| 1246 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1247 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1247 break; | 1248 break; |
| 1248 case STATUS_FLOAT_INEXACT_RESULT: | 1249 case STATUS_FLOAT_INEXACT_RESULT: |
| 1249 OUTMSG2 (("STATUS_FLOAT_INEXACT_RESULT")); | 1250 OUTMSG2 (("STATUS_FLOAT_INEXACT_RESULT")); |
| 1250 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1251 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1251 break; | 1252 break; |
| 1252 case STATUS_FLOAT_INVALID_OPERATION: | 1253 case STATUS_FLOAT_INVALID_OPERATION: |
| 1253 OUTMSG2 (("STATUS_FLOAT_INVALID_OPERATION")); | 1254 OUTMSG2 (("STATUS_FLOAT_INVALID_OPERATION")); |
| 1254 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1255 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1255 break; | 1256 break; |
| 1256 case STATUS_FLOAT_OVERFLOW: | 1257 case STATUS_FLOAT_OVERFLOW: |
| 1257 OUTMSG2 (("STATUS_FLOAT_OVERFLOW")); | 1258 OUTMSG2 (("STATUS_FLOAT_OVERFLOW")); |
| 1258 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1259 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1259 break; | 1260 break; |
| 1260 case STATUS_FLOAT_STACK_CHECK: | 1261 case STATUS_FLOAT_STACK_CHECK: |
| 1261 OUTMSG2 (("STATUS_FLOAT_STACK_CHECK")); | 1262 OUTMSG2 (("STATUS_FLOAT_STACK_CHECK")); |
| 1262 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1263 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1263 break; | 1264 break; |
| 1264 case STATUS_FLOAT_UNDERFLOW: | 1265 case STATUS_FLOAT_UNDERFLOW: |
| 1265 OUTMSG2 (("STATUS_FLOAT_UNDERFLOW")); | 1266 OUTMSG2 (("STATUS_FLOAT_UNDERFLOW")); |
| 1266 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1267 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1267 break; | 1268 break; |
| 1268 case STATUS_FLOAT_DIVIDE_BY_ZERO: | 1269 case STATUS_FLOAT_DIVIDE_BY_ZERO: |
| 1269 OUTMSG2 (("STATUS_FLOAT_DIVIDE_BY_ZERO")); | 1270 OUTMSG2 (("STATUS_FLOAT_DIVIDE_BY_ZERO")); |
| 1270 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1271 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1271 break; | 1272 break; |
| 1272 case STATUS_INTEGER_DIVIDE_BY_ZERO: | 1273 case STATUS_INTEGER_DIVIDE_BY_ZERO: |
| 1273 OUTMSG2 (("STATUS_INTEGER_DIVIDE_BY_ZERO")); | 1274 OUTMSG2 (("STATUS_INTEGER_DIVIDE_BY_ZERO")); |
| 1274 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1275 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1275 break; | 1276 break; |
| 1276 case STATUS_INTEGER_OVERFLOW: | 1277 case STATUS_INTEGER_OVERFLOW: |
| 1277 OUTMSG2 (("STATUS_INTEGER_OVERFLOW")); | 1278 OUTMSG2 (("STATUS_INTEGER_OVERFLOW")); |
| 1278 ourstatus->value.sig = TARGET_SIGNAL_FPE; | 1279 ourstatus->value.sig = GDB_SIGNAL_FPE; |
| 1279 break; | 1280 break; |
| 1280 case EXCEPTION_BREAKPOINT: | 1281 case EXCEPTION_BREAKPOINT: |
| 1281 OUTMSG2 (("EXCEPTION_BREAKPOINT")); | 1282 OUTMSG2 (("EXCEPTION_BREAKPOINT")); |
| 1282 ourstatus->value.sig = TARGET_SIGNAL_TRAP; | 1283 ourstatus->value.sig = GDB_SIGNAL_TRAP; |
| 1283 #ifdef _WIN32_WCE | 1284 #ifdef _WIN32_WCE |
| 1284 /* Remove the initial breakpoint. */ | 1285 /* Remove the initial breakpoint. */ |
| 1285 check_breakpoints ((CORE_ADDR) (long) current_event | 1286 check_breakpoints ((CORE_ADDR) (long) current_event |
| 1286 .u.Exception.ExceptionRecord.ExceptionAddress); | 1287 .u.Exception.ExceptionRecord.ExceptionAddress); |
| 1287 #endif | 1288 #endif |
| 1288 break; | 1289 break; |
| 1289 case DBG_CONTROL_C: | 1290 case DBG_CONTROL_C: |
| 1290 OUTMSG2 (("DBG_CONTROL_C")); | 1291 OUTMSG2 (("DBG_CONTROL_C")); |
| 1291 ourstatus->value.sig = TARGET_SIGNAL_INT; | 1292 ourstatus->value.sig = GDB_SIGNAL_INT; |
| 1292 break; | 1293 break; |
| 1293 case DBG_CONTROL_BREAK: | 1294 case DBG_CONTROL_BREAK: |
| 1294 OUTMSG2 (("DBG_CONTROL_BREAK")); | 1295 OUTMSG2 (("DBG_CONTROL_BREAK")); |
| 1295 ourstatus->value.sig = TARGET_SIGNAL_INT; | 1296 ourstatus->value.sig = GDB_SIGNAL_INT; |
| 1296 break; | 1297 break; |
| 1297 case EXCEPTION_SINGLE_STEP: | 1298 case EXCEPTION_SINGLE_STEP: |
| 1298 OUTMSG2 (("EXCEPTION_SINGLE_STEP")); | 1299 OUTMSG2 (("EXCEPTION_SINGLE_STEP")); |
| 1299 ourstatus->value.sig = TARGET_SIGNAL_TRAP; | 1300 ourstatus->value.sig = GDB_SIGNAL_TRAP; |
| 1300 break; | 1301 break; |
| 1301 case EXCEPTION_ILLEGAL_INSTRUCTION: | 1302 case EXCEPTION_ILLEGAL_INSTRUCTION: |
| 1302 OUTMSG2 (("EXCEPTION_ILLEGAL_INSTRUCTION")); | 1303 OUTMSG2 (("EXCEPTION_ILLEGAL_INSTRUCTION")); |
| 1303 ourstatus->value.sig = TARGET_SIGNAL_ILL; | 1304 ourstatus->value.sig = GDB_SIGNAL_ILL; |
| 1304 break; | 1305 break; |
| 1305 case EXCEPTION_PRIV_INSTRUCTION: | 1306 case EXCEPTION_PRIV_INSTRUCTION: |
| 1306 OUTMSG2 (("EXCEPTION_PRIV_INSTRUCTION")); | 1307 OUTMSG2 (("EXCEPTION_PRIV_INSTRUCTION")); |
| 1307 ourstatus->value.sig = TARGET_SIGNAL_ILL; | 1308 ourstatus->value.sig = GDB_SIGNAL_ILL; |
| 1308 break; | 1309 break; |
| 1309 case EXCEPTION_NONCONTINUABLE_EXCEPTION: | 1310 case EXCEPTION_NONCONTINUABLE_EXCEPTION: |
| 1310 OUTMSG2 (("EXCEPTION_NONCONTINUABLE_EXCEPTION")); | 1311 OUTMSG2 (("EXCEPTION_NONCONTINUABLE_EXCEPTION")); |
| 1311 ourstatus->value.sig = TARGET_SIGNAL_ILL; | 1312 ourstatus->value.sig = GDB_SIGNAL_ILL; |
| 1312 break; | 1313 break; |
| 1313 default: | 1314 default: |
| 1314 if (current_event.u.Exception.dwFirstChance) | 1315 if (current_event.u.Exception.dwFirstChance) |
| 1315 { | 1316 { |
| 1316 ourstatus->kind = TARGET_WAITKIND_SPURIOUS; | 1317 ourstatus->kind = TARGET_WAITKIND_SPURIOUS; |
| 1317 return; | 1318 return; |
| 1318 } | 1319 } |
| 1319 OUTMSG2 (("gdbserver: unknown target exception 0x%08lx at 0x%s", | 1320 OUTMSG2 (("gdbserver: unknown target exception 0x%08lx at 0x%s", |
| 1320 current_event.u.Exception.ExceptionRecord.ExceptionCode, | 1321 current_event.u.Exception.ExceptionRecord.ExceptionCode, |
| 1321 phex_nz ((uintptr_t) current_event.u.Exception.ExceptionRecord. | 1322 phex_nz ((uintptr_t) current_event.u.Exception.ExceptionRecord. |
| 1322 ExceptionAddress, sizeof (uintptr_t)))); | 1323 ExceptionAddress, sizeof (uintptr_t)))); |
| 1323 ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN; | 1324 ourstatus->value.sig = GDB_SIGNAL_UNKNOWN; |
| 1324 break; | 1325 break; |
| 1325 } | 1326 } |
| 1326 OUTMSG2 (("\n")); | 1327 OUTMSG2 (("\n")); |
| 1327 last_sig = ourstatus->value.sig; | 1328 last_sig = ourstatus->value.sig; |
| 1328 } | 1329 } |
| 1329 | 1330 |
| 1330 | 1331 |
| 1331 static void | 1332 static void |
| 1332 suspend_one_thread (struct inferior_list_entry *entry) | 1333 suspend_one_thread (struct inferior_list_entry *entry) |
| 1333 { | 1334 { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1371 } | 1372 } |
| 1372 #endif | 1373 #endif |
| 1373 | 1374 |
| 1374 /* Get the next event from the child. */ | 1375 /* Get the next event from the child. */ |
| 1375 | 1376 |
| 1376 static int | 1377 static int |
| 1377 get_child_debug_event (struct target_waitstatus *ourstatus) | 1378 get_child_debug_event (struct target_waitstatus *ourstatus) |
| 1378 { | 1379 { |
| 1379 ptid_t ptid; | 1380 ptid_t ptid; |
| 1380 | 1381 |
| 1381 last_sig = TARGET_SIGNAL_0; | 1382 last_sig = GDB_SIGNAL_0; |
| 1382 ourstatus->kind = TARGET_WAITKIND_SPURIOUS; | 1383 ourstatus->kind = TARGET_WAITKIND_SPURIOUS; |
| 1383 | 1384 |
| 1384 /* Check if GDB sent us an interrupt request. */ | 1385 /* Check if GDB sent us an interrupt request. */ |
| 1385 check_remote_input_interrupt_request (); | 1386 check_remote_input_interrupt_request (); |
| 1386 | 1387 |
| 1387 if (soft_interrupt_requested) | 1388 if (soft_interrupt_requested) |
| 1388 { | 1389 { |
| 1389 soft_interrupt_requested = 0; | 1390 soft_interrupt_requested = 0; |
| 1390 fake_breakpoint_event (); | 1391 fake_breakpoint_event (); |
| 1391 goto gotevent; | 1392 goto gotevent; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1521 | 1522 |
| 1522 case LOAD_DLL_DEBUG_EVENT: | 1523 case LOAD_DLL_DEBUG_EVENT: |
| 1523 OUTMSG2 (("gdbserver: kernel event LOAD_DLL_DEBUG_EVENT " | 1524 OUTMSG2 (("gdbserver: kernel event LOAD_DLL_DEBUG_EVENT " |
| 1524 "for pid=%d tid=%x\n", | 1525 "for pid=%d tid=%x\n", |
| 1525 (unsigned) current_event.dwProcessId, | 1526 (unsigned) current_event.dwProcessId, |
| 1526 (unsigned) current_event.dwThreadId)); | 1527 (unsigned) current_event.dwThreadId)); |
| 1527 CloseHandle (current_event.u.LoadDll.hFile); | 1528 CloseHandle (current_event.u.LoadDll.hFile); |
| 1528 handle_load_dll (); | 1529 handle_load_dll (); |
| 1529 | 1530 |
| 1530 ourstatus->kind = TARGET_WAITKIND_LOADED; | 1531 ourstatus->kind = TARGET_WAITKIND_LOADED; |
| 1531 ourstatus->value.sig = TARGET_SIGNAL_TRAP; | 1532 ourstatus->value.sig = GDB_SIGNAL_TRAP; |
| 1532 break; | 1533 break; |
| 1533 | 1534 |
| 1534 case UNLOAD_DLL_DEBUG_EVENT: | 1535 case UNLOAD_DLL_DEBUG_EVENT: |
| 1535 OUTMSG2 (("gdbserver: kernel event UNLOAD_DLL_DEBUG_EVENT " | 1536 OUTMSG2 (("gdbserver: kernel event UNLOAD_DLL_DEBUG_EVENT " |
| 1536 "for pid=%d tid=%x\n", | 1537 "for pid=%d tid=%x\n", |
| 1537 (unsigned) current_event.dwProcessId, | 1538 (unsigned) current_event.dwProcessId, |
| 1538 (unsigned) current_event.dwThreadId)); | 1539 (unsigned) current_event.dwThreadId)); |
| 1539 handle_unload_dll (); | 1540 handle_unload_dll (); |
| 1540 ourstatus->kind = TARGET_WAITKIND_LOADED; | 1541 ourstatus->kind = TARGET_WAITKIND_LOADED; |
| 1541 ourstatus->value.sig = TARGET_SIGNAL_TRAP; | 1542 ourstatus->value.sig = GDB_SIGNAL_TRAP; |
| 1542 break; | 1543 break; |
| 1543 | 1544 |
| 1544 case EXCEPTION_DEBUG_EVENT: | 1545 case EXCEPTION_DEBUG_EVENT: |
| 1545 OUTMSG2 (("gdbserver: kernel event EXCEPTION_DEBUG_EVENT " | 1546 OUTMSG2 (("gdbserver: kernel event EXCEPTION_DEBUG_EVENT " |
| 1546 "for pid=%d tid=%x\n", | 1547 "for pid=%d tid=%x\n", |
| 1547 (unsigned) current_event.dwProcessId, | 1548 (unsigned) current_event.dwProcessId, |
| 1548 (unsigned) current_event.dwThreadId)); | 1549 (unsigned) current_event.dwThreadId)); |
| 1549 handle_exception (ourstatus); | 1550 handle_exception (ourstatus); |
| 1550 break; | 1551 break; |
| 1551 | 1552 |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1822 /* Initialize the Win32 backend. */ | 1823 /* Initialize the Win32 backend. */ |
| 1823 void | 1824 void |
| 1824 initialize_low (void) | 1825 initialize_low (void) |
| 1825 { | 1826 { |
| 1826 set_target_ops (&win32_target_ops); | 1827 set_target_ops (&win32_target_ops); |
| 1827 if (the_low_target.breakpoint != NULL) | 1828 if (the_low_target.breakpoint != NULL) |
| 1828 set_breakpoint_data (the_low_target.breakpoint, | 1829 set_breakpoint_data (the_low_target.breakpoint, |
| 1829 the_low_target.breakpoint_len); | 1830 the_low_target.breakpoint_len); |
| 1830 the_low_target.arch_setup (); | 1831 the_low_target.arch_setup (); |
| 1831 } | 1832 } |
| OLD | NEW |