X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fdbug-rom.c;h=b4bbba24517ae4a8d4ed3b8e8c61ab6d3a6ced0c;hb=6ed3211e19f2ca09ba2c39b1a94e58612e492ffe;hp=6b9787f4d4a77f589e75e5b4a4164a1cd6dc5743;hpb=abd8680d6efd97e7ba848a6392ee3ad72be18cd0;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/dbug-rom.c b/gdb/dbug-rom.c index 6b9787f4d4..b4bbba2451 100644 --- a/gdb/dbug-rom.c +++ b/gdb/dbug-rom.c @@ -1,5 +1,6 @@ /* Remote debugging interface to dBUG ROM monitor for GDB, the GNU debugger. - Copyright 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1998, 1999, 2000, 2001, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. Written by Stan Shebs of Cygnus Support. @@ -7,7 +8,7 @@ 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 + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -16,9 +17,7 @@ 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., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ /* dBUG is a monitor supplied on various Motorola boards, including m68k, ColdFire, and PowerPC-based designs. The code here assumes @@ -30,17 +29,18 @@ #include "target.h" #include "monitor.h" #include "serial.h" +#include "regcache.h" -static void dbug_open PARAMS ((char *args, int from_tty)); +#include "m68k-tdep.h" + +static void dbug_open (char *args, int from_tty); static void -dbug_supply_register (regname, regnamelen, val, vallen) - char *regname; - int regnamelen; - char *val; - int vallen; +dbug_supply_register (struct regcache *regcache, char *regname, + int regnamelen, char *val, int vallen) { int regno; + struct gdbarch *gdbarch = get_regcache_arch (regcache); if (regnamelen != 2) return; @@ -50,28 +50,28 @@ dbug_supply_register (regname, regnamelen, val, vallen) case 'S': if (regname[1] != 'R') return; - regno = PS_REGNUM; + regno = gdbarch_ps_regnum (gdbarch); break; case 'P': if (regname[1] != 'C') return; - regno = PC_REGNUM; + regno = gdbarch_pc_regnum (gdbarch); break; case 'D': if (regname[1] < '0' || regname[1] > '7') return; - regno = regname[1] - '0' + D0_REGNUM; + regno = regname[1] - '0' + M68K_D0_REGNUM; break; case 'A': if (regname[1] < '0' || regname[1] > '7') return; - regno = regname[1] - '0' + A0_REGNUM; + regno = regname[1] - '0' + M68K_A0_REGNUM; break; default: return; } - monitor_supply_register (regno, val); + monitor_supply_register (regcache, regno, val); } /* This array of registers needs to match the indexes used by GDB. The @@ -79,13 +79,24 @@ dbug_supply_register (regname, regnamelen, val, vallen) different names than GDB does, and don't support all the registers either. So, typing "info reg sp" becomes an "A7". */ -static char *dbug_regnames[NUM_REGS] = +static const char * +dbug_regname (int index) { - "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", - "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", - "SR", "PC" - /* no float registers */ -}; + static char *regnames[] = + { + "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", + "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", + "SR", "PC" + /* no float registers */ + }; + + if (index >= ARRAY_SIZE (regnames) || index < 0) + return NULL; + else + return regnames[index]; + +} + static struct target_ops dbug_ops; static struct monitor_ops dbug_cmds; @@ -129,7 +140,7 @@ init_dbug_cmds (void) dbug_cmds.getreg.term_cmd = NULL; /* getreg.term_cmd */ dbug_cmds.dump_registers = "rd\r"; /* dump_registers */ dbug_cmds.register_pattern = "\\(\\w+\\) +:\\([0-9a-fA-F]+\\b\\)"; /* register_pattern */ - dbug_cmds.supply_register = dbug_supply_register; /* supply_register */ + dbug_cmds.supply_register = dbug_supply_register; dbug_cmds.load_routine = NULL; /* load_routine (defaults to SRECs) */ dbug_cmds.load = "dl\r"; /* download command */ dbug_cmds.loadresp = "\n"; /* load response */ @@ -138,20 +149,21 @@ init_dbug_cmds (void) dbug_cmds.cmd_end = NULL; /* optional command terminator */ dbug_cmds.target = &dbug_ops; /* target operations */ dbug_cmds.stopbits = SERIAL_1_STOPBITS; /* number of stop bits */ - dbug_cmds.regnames = dbug_regnames; /* registers names */ + dbug_cmds.regnames = NULL; /* registers names */ + dbug_cmds.regname = dbug_regname; dbug_cmds.magic = MONITOR_OPS_MAGIC; /* magic */ } /* init_debug_ops */ static void -dbug_open (args, from_tty) - char *args; - int from_tty; +dbug_open (char *args, int from_tty) { monitor_open (args, &dbug_cmds, from_tty); } +extern initialize_file_ftype _initialize_dbug_rom; /* -Wmissing-prototypes */ + void -_initialize_dbug_rom () +_initialize_dbug_rom (void) { init_dbug_cmds (); init_monitor_ops (&dbug_ops);