forked from Imagelibrary/binutils-gdb
* coffread.c (read_enum_type): Use the size of a target int when
describing enum. * defs.h: added new #define for TARGET_PTR_BIT, defaults to size of target int. * h8300-tdep.c, remote-hms.c, tm-h8300.h: too many changes to count * symtab.c (lookup_reference_type, lookup_ptr_type): use TARGET_PTR_BIT to determine size of a pointer * values.c (unpack_long): when unpacking a REF or a PTR don't assume the size of the type.
This commit is contained in:
489
gdb/remote-hms.c
489
gdb/remote-hms.c
@@ -1,4 +1,4 @@
|
||||
/* Remote debugging interface for HMS Monitor Version 1.0
|
||||
/* Remote debugging interface for Hitachi HMS Monitor Version 1.0
|
||||
|
||||
Copyright 1992 Free Software Foundation, Inc.
|
||||
|
||||
@@ -55,22 +55,197 @@ static int hms_clear_breakpoints();
|
||||
|
||||
extern struct target_ops hms_ops;
|
||||
|
||||
#define DEBUG
|
||||
static int quiet = 1;
|
||||
|
||||
#ifdef DEBUG
|
||||
# define DENTER(NAME) (printf_filtered("Entering %s\n",NAME), fflush(stdout))
|
||||
# define DEXIT(NAME) (printf_filtered("Exiting %s\n",NAME), fflush(stdout))
|
||||
# define DENTER(NAME) if (!quiet) (printf_filtered("Entering %s\n",NAME), fflush(stdout))
|
||||
# define DEXIT(NAME) if (!quiet) (printf_filtered("Exiting %s\n",NAME), fflush(stdout))
|
||||
#else
|
||||
# define DENTER(NAME)
|
||||
# define DEXIT(NAME)
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
/* Caching stuff stolen from remote-nindy.c */
|
||||
|
||||
static int timeout = 5;
|
||||
/* The data cache records all the data read from the remote machine
|
||||
since the last time it stopped.
|
||||
|
||||
Each cache block holds LINE_SIZE bytes of data
|
||||
starting at a multiple-of-LINE_SIZE address. */
|
||||
|
||||
|
||||
#define LINE_SIZE_POWER 4
|
||||
#define LINE_SIZE (1<<LINE_SIZE_POWER) /* eg 1<<3 == 8 */
|
||||
#define LINE_SIZE_MASK ((LINE_SIZE-1)) /* eg 7*2+1= 111*/
|
||||
#define DCACHE_SIZE 64 /* Number of cache blocks */
|
||||
#define XFORM(x) ((x&LINE_SIZE_MASK)>>2)
|
||||
struct dcache_block {
|
||||
struct dcache_block *next, *last;
|
||||
unsigned int addr; /* Address for which data is recorded. */
|
||||
int data[LINE_SIZE/sizeof(int)];
|
||||
};
|
||||
|
||||
struct dcache_block dcache_free, dcache_valid;
|
||||
|
||||
/* Free all the data cache blocks, thus discarding all cached data. */
|
||||
static
|
||||
void
|
||||
dcache_flush ()
|
||||
{
|
||||
register struct dcache_block *db;
|
||||
|
||||
while ((db = dcache_valid.next) != &dcache_valid)
|
||||
{
|
||||
remque (db);
|
||||
insque (db, &dcache_free);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If addr is present in the dcache, return the address of the block
|
||||
* containing it.
|
||||
*/
|
||||
static
|
||||
struct dcache_block *
|
||||
dcache_hit (addr)
|
||||
unsigned int addr;
|
||||
{
|
||||
register struct dcache_block *db;
|
||||
|
||||
if (addr & 3)
|
||||
abort ();
|
||||
|
||||
/* Search all cache blocks for one that is at this address. */
|
||||
db = dcache_valid.next;
|
||||
while (db != &dcache_valid)
|
||||
{
|
||||
if ((addr & ~LINE_SIZE_MASK)== db->addr)
|
||||
return db;
|
||||
db = db->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Return the int data at address ADDR in dcache block DC. */
|
||||
static
|
||||
int
|
||||
dcache_value (db, addr)
|
||||
struct dcache_block *db;
|
||||
unsigned int addr;
|
||||
{
|
||||
if (addr & 3)
|
||||
abort ();
|
||||
return (db->data[XFORM(addr)]);
|
||||
}
|
||||
|
||||
/* Get a free cache block, put or keep it on the valid list,
|
||||
and return its address. The caller should store into the block
|
||||
the address and data that it describes, then remque it from the
|
||||
free list and insert it into the valid list. This procedure
|
||||
prevents errors from creeping in if a ninMemGet is interrupted
|
||||
(which used to put garbage blocks in the valid list...). */
|
||||
static
|
||||
struct dcache_block *
|
||||
dcache_alloc ()
|
||||
{
|
||||
register struct dcache_block *db;
|
||||
|
||||
if ((db = dcache_free.next) == &dcache_free)
|
||||
{
|
||||
/* If we can't get one from the free list, take last valid and put
|
||||
it on the free list. */
|
||||
db = dcache_valid.last;
|
||||
remque (db);
|
||||
insque (db, &dcache_free);
|
||||
}
|
||||
|
||||
remque (db);
|
||||
insque (db, &dcache_valid);
|
||||
return (db);
|
||||
}
|
||||
|
||||
/* Return the contents of the word at address ADDR in the remote machine,
|
||||
using the data cache. */
|
||||
static
|
||||
int
|
||||
dcache_fetch (addr)
|
||||
CORE_ADDR addr;
|
||||
{
|
||||
register struct dcache_block *db;
|
||||
|
||||
db = dcache_hit (addr);
|
||||
if (db == 0)
|
||||
{
|
||||
db = dcache_alloc ();
|
||||
immediate_quit++;
|
||||
hms_read_inferior_memory(addr & ~LINE_SIZE_MASK, (unsigned char *)db->data, LINE_SIZE);
|
||||
immediate_quit--;
|
||||
db->addr = addr & ~LINE_SIZE_MASK;
|
||||
remque (db); /* Off the free list */
|
||||
insque (db, &dcache_valid); /* On the valid list */
|
||||
}
|
||||
return (dcache_value (db, addr));
|
||||
}
|
||||
|
||||
/* Write the word at ADDR both in the data cache and in the remote machine. */
|
||||
static void
|
||||
dcache_poke (addr, data)
|
||||
CORE_ADDR addr;
|
||||
int data;
|
||||
{
|
||||
register struct dcache_block *db;
|
||||
|
||||
/* First make sure the word is IN the cache. DB is its cache block. */
|
||||
db = dcache_hit (addr);
|
||||
if (db == 0)
|
||||
{
|
||||
db = dcache_alloc ();
|
||||
immediate_quit++;
|
||||
hms_write_inferior_memory(addr & ~LINE_SIZE_MASK, (unsigned char *)db->data, LINE_SIZE);
|
||||
immediate_quit--;
|
||||
db->addr = addr & ~LINE_SIZE_MASK;
|
||||
remque (db); /* Off the free list */
|
||||
insque (db, &dcache_valid); /* On the valid list */
|
||||
}
|
||||
|
||||
/* Modify the word in the cache. */
|
||||
db->data[XFORM(addr)] = data;
|
||||
|
||||
/* Send the changed word. */
|
||||
immediate_quit++;
|
||||
hms_write_inferior_memory(addr, (unsigned char *)&data, 4);
|
||||
immediate_quit--;
|
||||
}
|
||||
|
||||
/* The cache itself. */
|
||||
struct dcache_block the_cache[DCACHE_SIZE];
|
||||
|
||||
/* Initialize the data cache. */
|
||||
static void
|
||||
dcache_init ()
|
||||
{
|
||||
register i;
|
||||
register struct dcache_block *db;
|
||||
|
||||
db = the_cache;
|
||||
dcache_free.next = dcache_free.last = &dcache_free;
|
||||
dcache_valid.next = dcache_valid.last = &dcache_valid;
|
||||
for (i=0;i<DCACHE_SIZE;i++,db++)
|
||||
insque (db, &dcache_free);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* I/O stuff stolen from remote-eb.c
|
||||
***********************************************************************/
|
||||
|
||||
static int timeout = 2;
|
||||
static char *dev_name = "/dev/ttya";
|
||||
|
||||
|
||||
static int quiet;
|
||||
|
||||
|
||||
/* Descriptor for I/O to remote machine. Initialize it to -1 so that
|
||||
hms_open knows that we don't have a file open when the program
|
||||
@@ -79,6 +254,8 @@ int hms_desc = -1;
|
||||
#define OPEN(x) ((x) >= 0)
|
||||
|
||||
|
||||
void hms_open();
|
||||
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
static void
|
||||
@@ -109,20 +286,6 @@ int turnon;
|
||||
ioctl (desc, TIOCSETP, &sg);
|
||||
}
|
||||
|
||||
/* Suck up all the input from the hms */
|
||||
slurp_input()
|
||||
{
|
||||
char buf[8];
|
||||
|
||||
#ifdef HAVE_TERMIO
|
||||
/* termio does the timeout for us. */
|
||||
while (read (hms_desc, buf, 8) > 0);
|
||||
#else
|
||||
alarm (timeout);
|
||||
while (read (hms_desc, buf, 8) > 0);
|
||||
alarm (0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Read a character from the remote system, doing all the fancy
|
||||
timeout stuff. */
|
||||
@@ -138,24 +301,49 @@ readchar ()
|
||||
#else
|
||||
alarm (timeout);
|
||||
if (read (hms_desc, &buf, 1) < 0)
|
||||
{
|
||||
if (errno == EINTR)
|
||||
error ("Timeout reading from remote system.");
|
||||
else
|
||||
perror_with_name ("remote");
|
||||
}
|
||||
{
|
||||
if (errno == EINTR)
|
||||
error ("Timeout reading from remote system.");
|
||||
else
|
||||
perror_with_name ("remote");
|
||||
}
|
||||
alarm (0);
|
||||
#endif
|
||||
|
||||
if (buf == '\0')
|
||||
error ("Timeout reading from remote system.");
|
||||
error ("Timeout reading from remote system.");
|
||||
|
||||
if (!quiet)
|
||||
printf("'%c'",buf);
|
||||
if (!quiet)
|
||||
printf("%c",buf);
|
||||
|
||||
return buf & 0x7f;
|
||||
}
|
||||
|
||||
static int
|
||||
readchar_nofail ()
|
||||
{
|
||||
char buf;
|
||||
|
||||
buf = '\0';
|
||||
#ifdef HAVE_TERMIO
|
||||
/* termio does the timeout for us. */
|
||||
read (hms_desc, &buf, 1);
|
||||
#else
|
||||
alarm (timeout);
|
||||
if (read (hms_desc, &buf, 1) < 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
alarm (0);
|
||||
#endif
|
||||
|
||||
if (buf == '\0')
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return buf & 0x7f;
|
||||
}
|
||||
|
||||
/* Keep discarding input from the remote system, until STRING is found.
|
||||
Let the user break out immediately. */
|
||||
static void
|
||||
@@ -267,16 +455,10 @@ volatile int n_alarms;
|
||||
void
|
||||
hms_timer ()
|
||||
{
|
||||
#if 0
|
||||
if (kiodebug)
|
||||
printf ("hms_timer called\n");
|
||||
#endif
|
||||
n_alarms++;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* malloc'd name of the program on the remote system. */
|
||||
static char *prog_name = NULL;
|
||||
|
||||
/* Number of SIGTRAPs we need to simulate. That is, the next
|
||||
NEED_ARTIFICIAL_TRAP calls to hms_wait should just return
|
||||
@@ -289,15 +471,16 @@ hms_kill(arg,from_tty)
|
||||
char *arg;
|
||||
int from_tty;
|
||||
{
|
||||
#if 0
|
||||
DENTER("hms_kill()");
|
||||
fprintf (hms_stream, "K");
|
||||
|
||||
fprintf (hms_stream, "\r");
|
||||
expect_prompt ();
|
||||
DEXIT("hms_kill()");
|
||||
#endif
|
||||
}
|
||||
|
||||
static check_open()
|
||||
{
|
||||
if (!OPEN(hms_desc)) {
|
||||
hms_open("",0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Download a file specified in 'args', to the hms.
|
||||
*/
|
||||
@@ -312,15 +495,14 @@ int fromtty;
|
||||
char buffer[1024];
|
||||
|
||||
DENTER("hms_load()");
|
||||
if (!OPEN(hms_desc))
|
||||
{
|
||||
printf_filtered("HMS not open. Use 'target' command to open HMS\n");
|
||||
return;
|
||||
}
|
||||
check_open();
|
||||
|
||||
dcache_flush();
|
||||
inferior_pid = 0;
|
||||
abfd = bfd_openr(args,"coff-h8300");
|
||||
if (!abfd)
|
||||
{
|
||||
printf_filtered("Can't open a bfd on file\n");
|
||||
printf_filtered("Unable to open file %s\n", args);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -366,7 +548,8 @@ hms_create_inferior (execfile, args, env)
|
||||
error ("No exec file specified");
|
||||
|
||||
entry_pt = (int) bfd_get_start_address (exec_bfd);
|
||||
|
||||
check_open();
|
||||
|
||||
if (OPEN(hms_desc))
|
||||
{
|
||||
|
||||
@@ -376,28 +559,17 @@ hms_create_inferior (execfile, args, env)
|
||||
/* Clear the input because what the hms sends back is different
|
||||
* depending on whether it was running or not.
|
||||
*/
|
||||
/* slurp_input(); /* After this there should be a prompt */
|
||||
|
||||
hms_write_cr("r");
|
||||
|
||||
expect_prompt();
|
||||
printf_filtered("Do you want to download '%s' (y/n)? [y] : ",prog_name);
|
||||
{
|
||||
char buffer[10];
|
||||
gets(buffer);
|
||||
if (*buffer != 'n') {
|
||||
hms_load(prog_name,0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
insert_breakpoints (); /* Needed to get correct instruction in cache */
|
||||
proceed(entry_pt, -1, 0);
|
||||
|
||||
|
||||
} else
|
||||
{
|
||||
printf_filtered("Hms not open yet.\n");
|
||||
}
|
||||
}
|
||||
DEXIT("hms_create_inferior()");
|
||||
}
|
||||
|
||||
@@ -412,22 +584,12 @@ hms_create_inferior (execfile, args, env)
|
||||
#endif
|
||||
|
||||
static struct {int rate, damn_b;} baudtab[] = {
|
||||
{0, B0},
|
||||
{50, B50},
|
||||
{75, B75},
|
||||
{110, B110},
|
||||
{134, B134},
|
||||
{150, B150},
|
||||
{200, B200},
|
||||
{300, B300},
|
||||
{600, B600},
|
||||
{1200, B1200},
|
||||
{1800, B1800},
|
||||
{2400, B2400},
|
||||
{4800, B4800},
|
||||
{9600, B9600},
|
||||
{19200, B19200},
|
||||
{38400, B38400},
|
||||
{300, B300},
|
||||
{1200, B1200},
|
||||
{2400, B2400},
|
||||
{4800, B4800},
|
||||
{-1, -1},
|
||||
};
|
||||
|
||||
@@ -438,7 +600,7 @@ static int damn_b (rate)
|
||||
|
||||
for (i = 0; baudtab[i].rate != -1; i++)
|
||||
if (rate == baudtab[i].rate) return baudtab[i].damn_b;
|
||||
return B38400; /* Random */
|
||||
return B19200;
|
||||
}
|
||||
|
||||
|
||||
@@ -485,31 +647,32 @@ char **p;
|
||||
}
|
||||
|
||||
static int baudrate = 9600;
|
||||
static void
|
||||
hms_open (name, from_tty)
|
||||
char *name;
|
||||
int from_tty;
|
||||
{
|
||||
TERMINAL sg;
|
||||
unsigned int prl;
|
||||
char *p;
|
||||
|
||||
DENTER("hms_open()");
|
||||
if(name == 0)
|
||||
{
|
||||
name = "";
|
||||
|
||||
}
|
||||
|
||||
printf("Input string %s\n", name);
|
||||
|
||||
prog_name = get_word(&name);
|
||||
|
||||
hms_close (0);
|
||||
|
||||
hms_desc = open (dev_name, O_RDWR);
|
||||
if (hms_desc < 0)
|
||||
perror_with_name (dev_name);
|
||||
static int
|
||||
is_baudrate_right()
|
||||
{
|
||||
|
||||
|
||||
/* Put this port into NORMAL mode, send the 'normal' character */
|
||||
hms_write("\001", 1); /* Control A */
|
||||
hms_write("\r", 1); /* Cr */
|
||||
|
||||
while ( readchar_nofail()) /* Skip noise we put there */
|
||||
;
|
||||
|
||||
hms_write("r");
|
||||
if (readchar_nofail() == 'r')
|
||||
return 1;
|
||||
|
||||
/* Not the right baudrate, or the board's not on */
|
||||
return 0;
|
||||
|
||||
|
||||
}
|
||||
static void
|
||||
set_rate()
|
||||
{
|
||||
TERMINAL sg;
|
||||
ioctl (hms_desc, TIOCGETP, &sg);
|
||||
#ifdef HAVE_TERMIO
|
||||
sg.c_cc[VMIN] = 0; /* read with timeout. */
|
||||
@@ -524,9 +687,59 @@ hms_open (name, from_tty)
|
||||
#endif
|
||||
|
||||
ioctl (hms_desc, TIOCSETP, &sg);
|
||||
}
|
||||
|
||||
static void
|
||||
get_baudrate_right()
|
||||
{
|
||||
|
||||
int which_rate = 0;
|
||||
|
||||
while (!is_baudrate_right())
|
||||
{
|
||||
if (baudtab[which_rate].rate == -1)
|
||||
{
|
||||
which_rate = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
which_rate++;
|
||||
}
|
||||
|
||||
baudrate = baudtab[which_rate].rate;
|
||||
printf_filtered("Board not responding, trying %d baud\n",baudrate);
|
||||
QUIT;
|
||||
set_rate();
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
hms_open (name, from_tty)
|
||||
char *name;
|
||||
int from_tty;
|
||||
{
|
||||
|
||||
unsigned int prl;
|
||||
char *p;
|
||||
|
||||
DENTER("hms_open()");
|
||||
if(name == 0)
|
||||
{
|
||||
name = "";
|
||||
|
||||
}
|
||||
|
||||
hms_close (0);
|
||||
|
||||
hms_desc = open (dev_name, O_RDWR);
|
||||
if (hms_desc < 0)
|
||||
perror_with_name (dev_name);
|
||||
|
||||
set_rate();
|
||||
|
||||
dcache_init();
|
||||
|
||||
|
||||
push_target (&hms_ops);
|
||||
/* start_remote (); /* Initialize gdb process mechanisms */
|
||||
|
||||
|
||||
@@ -543,11 +756,7 @@ hms_open (name, from_tty)
|
||||
perror ("hms_open: error in signal");
|
||||
#endif
|
||||
|
||||
|
||||
/* Put this port into NORMAL mode, send the 'normal' character */
|
||||
hms_write("\001", 1); /* Control A */
|
||||
hms_write("\r", 1); /* Cr */
|
||||
expect_prompt ();
|
||||
get_baudrate_right();
|
||||
|
||||
/* Hello? Are you there? */
|
||||
write (hms_desc, "\r", 1);
|
||||
@@ -558,7 +767,7 @@ hms_open (name, from_tty)
|
||||
hms_clear_breakpoints();
|
||||
|
||||
|
||||
printf_filtered("Remote debugging on an H8/300 HMS via %s %s.\n",dev_name,prog_name);
|
||||
printf_filtered("Remote debugging on an H8/300 HMS via %s.\n",dev_name);
|
||||
|
||||
DEXIT("hms_open()");
|
||||
}
|
||||
@@ -603,8 +812,6 @@ hms_attach (args, from_tty)
|
||||
{
|
||||
|
||||
DENTER("hms_attach()");
|
||||
if (from_tty)
|
||||
printf_filtered ("Attaching to remote program %s.\n", prog_name);
|
||||
|
||||
/* push_target(&hms_ops); /* This done in hms_open() */
|
||||
|
||||
@@ -655,6 +862,8 @@ hms_resume (step, sig)
|
||||
int step, sig;
|
||||
{
|
||||
DENTER("hms_resume()");
|
||||
dcache_flush();
|
||||
|
||||
if (step)
|
||||
{
|
||||
hms_write_cr("s");
|
||||
@@ -686,7 +895,7 @@ hms_wait (status)
|
||||
of the string cannot recur in the string, or we will not
|
||||
find some cases of the string in the input. */
|
||||
|
||||
static char bpt[] = "At breakpoint:";
|
||||
static char bpt[] = "At breakpoint:\r";
|
||||
/* It would be tempting to look for "\n[__exit + 0x8]\n"
|
||||
but that requires loading symbols with "yc i" and even if
|
||||
we did do that we don't know that the file has symbols. */
|
||||
@@ -703,43 +912,44 @@ hms_wait (status)
|
||||
int ch_handled;
|
||||
int old_timeout = timeout;
|
||||
int old_immediate_quit = immediate_quit;
|
||||
|
||||
int swallowed_cr = 0;
|
||||
|
||||
DENTER("hms_wait()");
|
||||
|
||||
WSETEXIT ((*status), 0);
|
||||
|
||||
if (need_artificial_trap != 0)
|
||||
{
|
||||
WSETSTOP ((*status), SIGTRAP);
|
||||
need_artificial_trap--;
|
||||
return 0;
|
||||
}
|
||||
{
|
||||
WSETSTOP ((*status), SIGTRAP);
|
||||
need_artificial_trap--;
|
||||
return 0;
|
||||
}
|
||||
|
||||
timeout = 0; /* Don't time out -- user program is running. */
|
||||
immediate_quit = 1; /* Helps ability to QUIT */
|
||||
timeout = 0; /* Don't time out -- user program is running. */
|
||||
immediate_quit = 1; /* Helps ability to QUIT */
|
||||
while (1) {
|
||||
QUIT; /* Let user quit and leave process running */
|
||||
QUIT; /* Let user quit and leave process running */
|
||||
ch_handled = 0;
|
||||
ch = readchar ();
|
||||
if (ch == *bp) {
|
||||
bp++;
|
||||
if (*bp == '\0')
|
||||
break;
|
||||
break;
|
||||
ch_handled = 1;
|
||||
|
||||
*swallowed_p++ = ch;
|
||||
} else
|
||||
bp = bpt;
|
||||
} else
|
||||
bp = bpt;
|
||||
if (ch == *ep || *ep == '?') {
|
||||
ep++;
|
||||
if (*ep == '\0')
|
||||
break;
|
||||
break;
|
||||
|
||||
if (!ch_handled)
|
||||
*swallowed_p++ = ch;
|
||||
*swallowed_p++ = ch;
|
||||
ch_handled = 1;
|
||||
}, sal.line);
|
||||
d979 3
|
||||
} else
|
||||
ep = exitmsg;
|
||||
if (!ch_handled) {
|
||||
char *p;
|
||||
/* Print out any characters which have been swallowed. */
|
||||
@@ -769,9 +979,6 @@ d979 3
|
||||
|
||||
timeout = old_timeout;
|
||||
immediate_quit = old_immediate_quit;
|
||||
printf ("%s is at %s:%d.\n",
|
||||
local_hex_string(sal.pc),
|
||||
sal.symtab->filename, sal.line);
|
||||
DEXIT("hms_wait()");
|
||||
return 0;
|
||||
}
|
||||
@@ -851,15 +1058,15 @@ if (!quiet)
|
||||
}
|
||||
}
|
||||
|
||||
printf ("Line %d of \"%s\" is at pc %s but contains no code.\n",
|
||||
sal.line, sal.symtab->filename, local_hex_string(start_pc));
|
||||
hms_write_cr(s)
|
||||
char *s;
|
||||
{
|
||||
hms_write( s, strlen(s));
|
||||
printf ("Line %d of \"%s\" starts at pc %s",
|
||||
sal.line, sal.symtab->filename,
|
||||
local_hex_string(start_pc));
|
||||
printf (" and ends at %s.\n",
|
||||
local_hex_string(end_pc));
|
||||
hms_write("\r",1);
|
||||
}
|
||||
|
||||
static void
|
||||
hms_fetch_registers ()
|
||||
{
|
||||
#define REGREPLY_SIZE 79
|
||||
char linebuf[REGREPLY_SIZE+1];
|
||||
@@ -867,8 +1074,8 @@ hms_write( s, strlen(s));
|
||||
int s ;
|
||||
int gottok;
|
||||
|
||||
printf ("Line number %d is out of range for \"%s\".\n",
|
||||
sal.line, sal.symtab->filename);
|
||||
REGISTER_TYPE reg[NUM_REGS];
|
||||
int foo[8];
|
||||
check_open();
|
||||
|
||||
do
|
||||
@@ -942,7 +1149,7 @@ hms_store_register (regno)
|
||||
int regno;
|
||||
{
|
||||
|
||||
printf ("Expression not found\n");
|
||||
/* printf("hms_store_register() called.\n"); fflush(stdout); /* */
|
||||
if (regno == -1)
|
||||
hms_store_registers ();
|
||||
else
|
||||
@@ -1020,7 +1227,7 @@ hms_xfer_inferior_memory(memaddr, myaddr, len, write, target)
|
||||
addr = memaddr & - sizeof (int);
|
||||
count = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
|
||||
|
||||
printf ("Expression not found\n");
|
||||
|
||||
buffer = (int *)alloca (count * sizeof (int));
|
||||
if (write)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user