Mon Aug 11 16:22:36 1997 Geoffrey Noer <noer@cygnus.com>

* ocd.c (ocd_insert_breakpoint, ocd_remove_breakpoint): macro
        BDM_BREAKPOINT already has braces around it, remove erroneous ones.
        * ser-ocd.c (ocd_write): conditionalize on _WIN32 instead of
        __CYGWIN32__
        * config/powerpc/tm-ppc-eabi.h: remove BDM_NUM_REGS, BDM_REGMAP
        * ppc-bdm.c: move BDM_NUM_REGS, BDM_REGMAP here from tm.h file,
        fill in doc fields of bdm_ppc_ops.
        (bdm_ppc_fetch_registers): don't ask for invalid registers such
        as the MQ or floating point regs not present on ppc 8xx boards
        (bdm_ppc_store_registers): don't write those same invalid registers
        * config/i386/cygwin32.mh: stop including ocd.o ser-ocd.o
        * config/powerpc/ppc-eabi.mt:
        * config/powerpc/ppcle-eabi.mt:
        * config/powerpc/ppc-sim.mt:
        * config/powerpc/ppcle-sim.mt: include ser-ocd.o
This commit is contained in:
Geoffrey Noer 1997-08-11 23:40:26 +00:00
parent 53a9bb1a32
commit 2549d2b385
9 changed files with 123 additions and 20 deletions

View file

@ -1,3 +1,21 @@
Mon Aug 11 16:22:36 1997 Geoffrey Noer <noer@cygnus.com>
* ocd.c (ocd_insert_breakpoint, ocd_remove_breakpoint): macro
BDM_BREAKPOINT already has braces around it, remove erroneous ones.
* ser-ocd.c (ocd_write): conditionalize on _WIN32 instead of
__CYGWIN32__
* config/powerpc/tm-ppc-eabi.h: remove BDM_NUM_REGS, BDM_REGMAP
* ppc-bdm.c: move BDM_NUM_REGS, BDM_REGMAP here from tm.h file,
fill in doc fields of bdm_ppc_ops.
(bdm_ppc_fetch_registers): don't ask for invalid registers such
as the MQ or floating point regs not present on ppc 8xx boards
(bdm_ppc_store_registers): don't write those same invalid registers
* config/i386/cygwin32.mh: stop including ocd.o ser-ocd.o
* config/powerpc/ppc-eabi.mt:
* config/powerpc/ppcle-eabi.mt:
* config/powerpc/ppc-sim.mt:
* config/powerpc/ppcle-sim.mt: include ser-ocd.o
Mon Aug 11 16:08:52 1997 Fred Fish <fnf@cygnus.com> Mon Aug 11 16:08:52 1997 Fred Fish <fnf@cygnus.com>
* frame.h (enum lval_type): Conditionalize on __GNUC__ * frame.h (enum lval_type): Conditionalize on __GNUC__

View file

@ -1,6 +1,6 @@
MH_CFLAGS= MH_CFLAGS=
XM_FILE=xm-cygwin32.h XM_FILE=xm-cygwin32.h
XDEPFILES=ser-tcp.o ocd.o ser-ocd.o XDEPFILES=ser-tcp.o
TERMCAP= TERMCAP=
NATDEPFILES= win32-nat.o NATDEPFILES= win32-nat.o
NAT_FILE=../nm-empty.h NAT_FILE=../nm-empty.h

View file

@ -1,3 +1,3 @@
# Target: PowerPC running eabi # Target: PowerPC running eabi
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ser-ocd.o
TM_FILE= tm-ppc-eabi.h TM_FILE= tm-ppc-eabi.h

View file

@ -1,5 +1,5 @@
# Target: PowerPC running eabi under the simulator # Target: PowerPC running eabi under the simulator
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ser-ocd.o
TM_FILE= tm-ppc-eabi.h TM_FILE= tm-ppc-eabi.h
SIM_OBS = remote-sim.o SIM_OBS = remote-sim.o

View file

@ -1,3 +1,3 @@
# Target: PowerPC running eabi in little endian mode # Target: PowerPC running eabi in little endian mode
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ser-ocd.o
TM_FILE= tm-ppcle-eabi.h TM_FILE= tm-ppcle-eabi.h

View file

@ -1,5 +1,5 @@
# Target: PowerPC running eabi in little endian mode under the simulator # Target: PowerPC running eabi in little endian mode under the simulator
TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o ppc-bdm.o ocd.o ser-ocd.o
TM_FILE= tm-ppcle-eabi.h TM_FILE= tm-ppcle-eabi.h
SIM_OBS = remote-sim.o SIM_OBS = remote-sim.o

View file

@ -1278,13 +1278,12 @@ ocd_load (args, from_tty)
clear_symtab_users (); clear_symtab_users ();
} }
/* This should be defined in each targets tm.h file */ /* This should be defined for each target */
/* But we want to be able to compile this file for some configurations /* But we want to be able to compile this file for some configurations
not yet supported fully */ not yet supported fully */
#ifndef BDM_BREAKPOINT
#define BDM_BREAKPOINT {0x0,0x0,0x0,0x0} /* For ppc 8xx */ #define BDM_BREAKPOINT {0x0,0x0,0x0,0x0} /* For ppc 8xx */
#endif /* #define BDM_BREAKPOINT {0x4a,0xfa} /* BGND insn used for CPU32 */
/* BDM (at least on CPU32) uses a different breakpoint */ /* BDM (at least on CPU32) uses a different breakpoint */
@ -1293,7 +1292,7 @@ ocd_insert_breakpoint (addr, contents_cache)
CORE_ADDR addr; CORE_ADDR addr;
char *contents_cache; char *contents_cache;
{ {
static char break_insn[] = {BDM_BREAKPOINT}; static char break_insn[] = BDM_BREAKPOINT;
int val; int val;
val = target_read_memory (addr, contents_cache, sizeof (break_insn)); val = target_read_memory (addr, contents_cache, sizeof (break_insn));
@ -1309,7 +1308,7 @@ ocd_remove_breakpoint (addr, contents_cache)
CORE_ADDR addr; CORE_ADDR addr;
char *contents_cache; char *contents_cache;
{ {
static char break_insn[] = {BDM_BREAKPOINT}; static char break_insn[] = BDM_BREAKPOINT;
int val; int val;
val = target_write_memory (addr, contents_cache, sizeof (break_insn)); val = target_write_memory (addr, contents_cache, sizeof (break_insn));

View file

@ -1,5 +1,5 @@
/* Remote target communications for the Macraigor Systems BDM Wiggler /* Remote target communications for the Macraigor Systems BDM Wiggler
talking to a Motorola PPC 505. talking to a Motorola PPC 8xx ADS board
Copyright 1996, 1997 Free Software Foundation, Inc. Copyright 1996, 1997 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -47,11 +47,34 @@ static void bdm_ppc_store_registers PARAMS ((int regno));
extern struct target_ops bdm_ppc_ops; /* Forward decl */ extern struct target_ops bdm_ppc_ops; /* Forward decl */
/*#define BDM_NUM_REGS 71*/
#define BDM_NUM_REGS 24
#define BDM_REGMAP \
2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, /* r0-r7 */ \
2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, /* r8-r15 */ \
2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, /* r16-r23 */ \
2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, /* r24-r31 */ \
\
2080, 2082, 2084, 2086, 2088, 2090, 2092, 2094, /* fp0->fp8 */ \
2096, 2098, 2100, 2102, 2104, 2106, 2108, 2110, /* fp0->fp8 */ \
2112, 2114, 2116, 2118, 2120, 2122, 2124, 2126, /* fp0->fp8 */ \
2128, 2130, 2132, 2134, 2136, 2138, 2140, 2142, /* fp0->fp8 */ \
\
26, /* pc (SRR0 (SPR 26)) */ \
2146, /* ps (MSR) */ \
2144, /* cnd (CR) */ \
8, /* lr (SPR 8) */ \
9, /* cnt (CTR (SPR 9)) */ \
1, /* xer (SPR 1) */ \
0, /* mq (SPR 0) */
char nowatchdog[4] = {0xff,0xff,0xff,0x88};
/* Open a connection to a remote debugger. /* Open a connection to a remote debugger.
NAME is the filename used for communication. */ NAME is the filename used for communication. */
char nowatchdog[4] = {0xff,0xff,0xff,0x88};
static void static void
bdm_ppc_open (name, from_tty) bdm_ppc_open (name, from_tty)
char *name; char *name;
@ -107,6 +130,7 @@ bdm_ppc_wait (pid, target_status)
static int bdm_regmap[] = {BDM_REGMAP}; static int bdm_regmap[] = {BDM_REGMAP};
/* Read the remote registers into regs. /* Read the remote registers into regs.
Fetch register REGNO, or all registers if REGNO == -1
The Wiggler uses the following codes to access the registers: The Wiggler uses the following codes to access the registers:
@ -118,7 +142,7 @@ static int bdm_regmap[] = {BDM_REGMAP};
26 - SPR 26 - SRR0 - pc 26 - SPR 26 - SRR0 - pc
1024 -> 2047 DCR 0 -> DCR 1023 (IBM PPC 4xx only) 1024 -> 2047 DCR 0 -> DCR 1023 (IBM PPC 4xx only)
2048 -> 2079 R0 -> R31 2048 -> 2079 R0 -> R31
2080 -> 2143 FP0 -> FP31 (64 bit regs) 2080 -> 2143 FP0 -> FP31 (64 bit regs) (IBM PPC 5xx only)
2144 CR (known as cnd in GDB) 2144 CR (known as cnd in GDB)
2145 FPCSR 2145 FPCSR
2146 MSR (known as ps in GDB) 2146 MSR (known as ps in GDB)
@ -129,10 +153,20 @@ bdm_ppc_fetch_registers (regno)
int regno; int regno;
{ {
int i; int i;
unsigned char *regs; unsigned char *regs, *beginregs, *endregs, *almostregs;
unsigned char midregs[32];
unsigned char mqreg[1];
int first_regno, last_regno; int first_regno, last_regno;
int first_bdm_regno, last_bdm_regno; int first_bdm_regno, last_bdm_regno;
int reglen; int reglen, beginreglen, endreglen;
#if 1
for (i = 0; i < (FPLAST_REGNUM - FP0_REGNUM + 1); i++)
{
midregs[i] = -1;
}
mqreg[0] = -1;
#endif
if (regno == -1) if (regno == -1)
{ {
@ -157,7 +191,44 @@ bdm_ppc_fetch_registers (regno)
return; /* Unsupported register */ return; /* Unsupported register */
} }
#if 1
/* Can't ask for floating point regs on ppc 8xx, also need to
avoid asking for the mq register. */
if (first_regno == last_regno) /* only want one reg */
{
/* printf("Asking for register %d\n", first_regno); */
/* if asking for an invalid register */
if ((first_regno == MQ_REGNUM) ||
((first_regno >= FP0_REGNUM) && (first_regno <= FPLAST_REGNUM)))
{
/* printf("invalid reg request!\n"); */
supply_register (first_regno, NULL);
return; /* Unsupported register */
}
else
{
regs = ocd_read_bdm_registers (first_bdm_regno,
last_bdm_regno, &reglen);
}
}
else /* want all regs */
{
/* printf("Asking for registers %d to %d\n", first_regno, last_regno); */
beginregs = ocd_read_bdm_registers (first_bdm_regno,
FP0_REGNUM - 1, &beginreglen);
endregs = (strcat (midregs,
ocd_read_bdm_registers (FPLAST_REGNUM + 1,
last_bdm_regno - 1, &endreglen)));
almostregs = (strcat (beginregs, endregs));
regs = (strcat (almostregs, mqreg));
reglen = beginreglen + 32 + endreglen + 1;
}
#endif
#if 0
regs = ocd_read_bdm_registers (first_bdm_regno, last_bdm_regno, &reglen); regs = ocd_read_bdm_registers (first_bdm_regno, last_bdm_regno, &reglen);
#endif
for (i = first_regno; i <= last_regno; i++) for (i = first_regno; i <= last_regno; i++)
{ {
@ -215,16 +286,31 @@ bdm_ppc_store_registers (regno)
bdm_regno = bdm_regmap [i]; bdm_regno = bdm_regmap [i];
/* only attempt to write if it's a valid ppc 8xx register */
/* (need to avoid FP regs and MQ reg) */
if ((i != MQ_REGNUM) && ((i < FP0_REGNUM) || (i > FPLAST_REGNUM)))
{
/* printf("write valid reg %d\n", bdm_regno); */
ocd_write_bdm_registers (bdm_regno, registers + REGISTER_BYTE (i), 4); ocd_write_bdm_registers (bdm_regno, registers + REGISTER_BYTE (i), 4);
} }
/*
else if (i == MQ_REGNUM)
printf("don't write invalid reg %d (MQ_REGNUM)\n", bdm_regno);
else
printf("don't write invalid reg %d\n", bdm_regno);
*/
}
} }
/* Define the target subroutine names */ /* Define the target subroutine names */
struct target_ops bdm_ppc_ops = { struct target_ops bdm_ppc_ops = {
"ocd", /* to_shortname */ "ocd", /* to_shortname */
"", /* to_longname */ "Remote target with On-Chip Debugging", /* to_longname */
"", /* to_doc */ "Use a remote target with On-Chip Debugging. To use a target box,\n\
specify the serial device it is connected to (e.g. /dev/ttya). To use\n\
a wiggler, specify wiggler and then the port it is connected to\n\
(e.g. wiggler lpt1).", /* to_doc */
bdm_ppc_open, /* to_open */ bdm_ppc_open, /* to_open */
ocd_close, /* to_close */ ocd_close, /* to_close */
NULL, /* to_attach */ NULL, /* to_attach */

View file

@ -159,7 +159,7 @@ ocd_write (scb, str, len)
{ {
char c; char c;
#ifdef __CYGWIN32__ #ifdef _WIN32
/* send packet to Wigglers.dll and store response so we can give it to /* send packet to Wigglers.dll and store response so we can give it to
remote-wiggler.c when get_packet is run */ remote-wiggler.c when get_packet is run */
dll_do_command (str, from_wiggler_buffer); dll_do_command (str, from_wiggler_buffer);