diff options
Diffstat (limited to 'gdb/gdbserver/win32-arm-low.c')
-rw-r--r-- | gdb/gdbserver/win32-arm-low.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/gdb/gdbserver/win32-arm-low.c b/gdb/gdbserver/win32-arm-low.c new file mode 100644 index 0000000..08c5a09 --- /dev/null +++ b/gdb/gdbserver/win32-arm-low.c @@ -0,0 +1,76 @@ +/* Copyright (C) 2007 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +#include "server.h" +#include "win32-low.h" + +/* Fetch register(s) from gdbserver regcache data. */ +static void +do_fetch_inferior_registers (win32_thread_info *th, int r) +{ + char *context_offset = regptr (&th->context, r); + supply_register (r, context_offset); +} + +#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x)) +static const int mappings[] = { + context_offset (R0), + context_offset (R1), + context_offset (R2), + context_offset (R3), + context_offset (R4), + context_offset (R5), + context_offset (R6), + context_offset (R7), + context_offset (R8), + context_offset (R9), + context_offset (R10), + context_offset (R11), + context_offset (R12), + context_offset (Sp), + context_offset (Lr), + context_offset (Pc), + -1, /* f0 */ + -1, /* f1 */ + -1, /* f2 */ + -1, /* f3 */ + -1, /* f4 */ + -1, /* f5 */ + -1, /* f6 */ + -1, /* f7 */ + -1, /* fps */ + context_offset (Psr), +}; +#undef context_offset + +static const unsigned char arm_wince_le_breakpoint[] = + { 0x10, 0x00, 0x00, 0xe6 }; + +struct win32_target_ops the_low_target = { + mappings, + sizeof (mappings) / sizeof (mappings[0]), + NULL, /* initial_stuff */ + NULL, /* store_debug_registers */ + NULL, /* load_debug_registers */ + do_fetch_inferior_registers, + NULL, /* single_step */ + arm_wince_le_breakpoint, + sizeof (arm_wince_le_breakpoint) / sizeof (arm_wince_le_breakpoint[0]), + "arm" /* arch_string */ +}; |