/* Remote debugging interface for Am290*0 running MiniMON monitor, for GDB.
- Copyright (C) 1990, 1991 Free Software Foundation, Inc.
+ Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
Originally written by Daniel Mann at AMD.
This file is part of GDB.
You should get tagged at compile time if you need to make any
changes/additions. */
-#include <stdio.h>
#include "defs.h"
#include "inferior.h"
#include "wait.h"
extern int stop_soon_quietly; /* for wait_for_inferior */
-extern struct value *call_function_by_hand();
-
static void mm_resume();
static void mm_fetch_registers ();
static int fetch_register ();
-static int mm_store_registers ();
+static void mm_store_registers ();
static int store_register ();
static int regnum_to_srnum();
static void mm_close ();
/* Find the first whitespace character, it separates dev_name from
prog_name. */
for (p = name;
- *p != '\0' && !isspace (*p); p++)
+ p && *p && !isspace (*p); p++)
;
- if (*p == '\0')
+ if (p == 0 || *p == '\0')
erroid:
error ("Usage : <command> <serial-device> <baud-rate> [progname]");
dev_name = (char*)malloc (p - name + 1);
{
int val = -1;
supply_register (FPE_REGNUM, &val);
- supply_register (INT_REGNUM, &val);
+ supply_register (INTE_REGNUM, &val);
supply_register (FPS_REGNUM, &val);
supply_register (EXO_REGNUM, &val);
}
/****************************************************** REMOTE_STORE_REGISTERS
-** Store register regno into the target.
+ * Store register regno into the target.
* If regno==-1 then store all the registers.
+ * Result is 0 for success, -1 for failure.
*/
-static int
+static void
mm_store_registers (regno)
int regno;
{
+ int result;
- if (regno >= 0)
- return(store_register(regno));
+ if (regno >= 0) {
+ store_register(regno);
+ return;
+ }
DENTER("mm_store_registers()");
+ result = 0;
out_msg_buf->write_r_msg.code= WRITE_REQ;
out_msg_buf->write_r_msg.data[0] = read_register (GR1_REGNUM);
msg_send_serial( out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
#if defined(GR64_REGNUM)
/* Global registers gr64-gr95 */
out_msg_buf->write_r_msg.data[regno-GR64_REGNUM] = read_register (regno);
}
msg_send_serial(out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
#endif /* GR64_REGNUM */
/* Global registers gr96-gr127 */
out_msg_buf->write_r_msg.data[regno-GR96_REGNUM] = read_register (regno);
}
msg_send_serial( out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
/* Local Registers */
out_msg_buf->write_r_msg.memory_space = LOCAL_REG;
out_msg_buf->write_r_msg.data[regno-LR0_REGNUM] = read_register (regno);
}
msg_send_serial( out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
/* Protected Special Registers */
/* VAB through TMR */
for (regno = 0 ; regno<=9 ; regno++) /* VAB through TMR */
out_msg_buf->write_r_msg.data[regno] = read_register (SR_REGNUM(regno));
msg_send_serial( out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
/* PC0, PC1, PC2 possibly as shadow registers */
out_msg_buf->write_r_msg.byte_count = 4* 3;
else
out_msg_buf->write_r_msg.address = 10; /* PC0 */
msg_send_serial( out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
/* LRU and MMU */
out_msg_buf->write_r_msg.byte_count = 4* 2;
for (regno=13 ; regno<=14 ; regno++) /* LRU and MMU */
out_msg_buf->write_r_msg.data[regno-13] = read_register (SR_REGNUM(regno));
msg_send_serial( out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
/* Unprotected Special Registers */
out_msg_buf->write_r_msg.byte_count = 4*8;
for (regno = 128 ; regno<=135 ; regno++)
out_msg_buf->write_r_msg.data[regno-128] = read_register(SR_REGNUM(regno));
msg_send_serial( out_msg_buf);
- expect_msg(WRITE_ACK,in_msg_buf,1);
+ if (!expect_msg(WRITE_ACK,in_msg_buf,1)) {
+ result = -1;
+ }
registers_changed ();
DEXIT("mm_store_registers()");
+ /* FIXME return result; it is ignored by caller. */
}
/*************************************************** REMOTE_PREPARE_TO_STORE */
return(addr);
#endif
}
-/* FIXME! Merge these two. */
-static int
-mm_xfer_inferior_memory (memaddr, myaddr, len, write)
- CORE_ADDR memaddr;
- char *myaddr;
- int len;
- int write;
-{
-
- memaddr = translate_addr(memaddr);
-
- if (write)
- return mm_write_inferior_memory (memaddr, myaddr, len);
- else
- return mm_read_inferior_memory (memaddr, myaddr, len);
-}
/******************************************************* REMOTE_FILES_INFO */
static void
/* You may need to do an init_target_mm() */
/* init_target_mm(?,?,?,?,?,?,?,?); */
immediate_quit--;
- symbol_file_add (arg_string, from_tty, text_addr, 0);
+ /* symbol_file_add (arg_string, from_tty, text_addr, 0, 0); */
#endif
}
return(nread);
}
+/* FIXME! Merge these two. */
+static int
+mm_xfer_inferior_memory (memaddr, myaddr, len, write)
+ CORE_ADDR memaddr;
+ char *myaddr;
+ int len;
+ int write;
+{
+
+ memaddr = translate_addr(memaddr);
+
+ if (write)
+ return mm_write_inferior_memory (memaddr, myaddr, len);
+ else
+ return mm_read_inferior_memory (memaddr, myaddr, len);
+}
+
+
/********************************************************** MSG_SEND_SERIAL
** This function is used to send a message over the
** serial line.
case FC_REGNUM: return(134);
case CR_REGNUM: return(135);
case FPE_REGNUM: return(160);
- case INT_REGNUM: return(161);
+ case INTE_REGNUM: return(161);
case FPS_REGNUM: return(162);
case EXO_REGNUM:return(164);
default:
0, 0, 0, 0, 0, /* Terminal handling */
mm_kill, /* FIXME, kill */
mm_load,
- call_function_by_hand,
0, /* lookup_symbol */
mm_create_inferior, /* create_inferior */
mm_mourn, /* mourn_inferior FIXME */