* configure.in: Check for working mmap, ansi headers, string.h,

strings.h, and memory.h.
* configure: Regenerated.

* gdb_stat.h: New file, "portable" <sys/stat.h>.
* gdb_string.h: New file, "portable" <string.h>.

* altos-xdep.c, arm-tdep.c, arm-xdep.c, convex-tdep.c,
convex-xdep.c, coredep.c, cxux-nat.c, dbxread.c, exec.c,
gould-xdep.c, hppa-tdep.c, i386aix-nat.c, i386b-nat.c,
i386mach-nat.c, i386v-nat.c, infptrace.c, m88k-nat.c, main.c,
mdebugread.c, objfiles.c, os9kread.c, procfs.c, pyr-xdep.c,
rs6000-nat.c, source.c, standalone.c, stuff.c, sun386-nat.c,
symfile.c, symm-nat.c, symm-tdep.c, symtab.c, top.c, ultra3-nat.c,
ultra3-xdep.c, umax-xdep.c, xcoffread.c: Include "gdb_stat.h"
instead of <sys/stat.h>.

* alpha-tdep.c, breakpoint.c, buildsym.c, c-typeprint.c,
ch-typeprint.c, coffread.c, command.c, core-sol2.c, core-svr4.c,
core.c, corelow.c, cp-valprint.c, dbxread.c, dcache.c, demangle.c,
dpx2-nat.c, dstread.c, dwarfread.c, elfread.c, environ.c, eval.c,
exec.c, f-lang.c, f-typeprint.c, f-valprint.c, findvar.c,
fork-child.c, gdbtypes.c, hpread.c, i386-tdep.c, infcmd.c,
inflow.c, infptrace.c, infrun.c, irix5-nat.c, language.c,
m2-typeprint.c, main.c, mdebugread.c, minsyms.c, mipsread.c,
monitor.c, nlmread.c, objfiles.c, os9kread.c, osfsolib.c, parse.c,
printcmd.c, procfs.c, regex.c, remote-adapt.c, remote-arc.c,
remote-array.c, remote-bug.c, remote-e7000.c, remote-eb.c,
remote-es.c, remote-hms.c, remote-mm.c, remote-os9k.c,
remote-pa.c, remote-sim.c, remote-st.c, remote-udi.c,
remote-utils.c, remote-vx.c, remote-vx29k.c, remote-vx68.c,
remote-vx960.c, remote-vxmips.c, remote-vxsparc.c, remote.c,
solib.c, somread.c, source.c, stabsread.c, stack.c, symfile.c,
symmisc.c, symtab.c, target.c, top.c, typeprint.c, utils.c,
valarith.c, valops.c, valprint.c, values.c, xcoffread.c: Include
"gdb_string.h" instead of <string.h>.
* gdbtk.c: Likewise.

* config/xm-sysv4.h, i386/xm-ptx.h, m68k/xm-sun3os4.h,
sparc/xm-sun4os4.h (HAVE_MMAP): Removed.

* config/xm-lynx.h, config/i386/xm-ptx.h,
config/m68k/nm-apollo68b.h, config/m68k/xm-hp300hpux.h,
config/mips/xm-irix3.h, config/mips/xm-mips.h,
config/mips/xm-news-mips.h, config/mips/xm-riscos.h,
config/pa/hppah.h, config/rs6000/xm-rs6000.h,
config/sparc/xm-sun4os4.h, config/sparc/xm-sun4sol2.h,
config/vax/xm-vaxbsd.h, config/vax/xm-vaxult.h,
config/vax/xm-vaxult2.h (MEM_FNS_DECLARED): Removed.
* config/mips/xm-irix3.h, config/mips/xm-mips.h,
config/pa/xm-hppah.h (memcpy, memset): Removed declarations.
This commit is contained in:
J.T. Conklin 1995-08-01 20:14:27 +00:00
parent a1bdcf913a
commit 2b57629364
137 changed files with 2207 additions and 1157 deletions

View file

@ -135,6 +135,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
running and the debugger should
continue to wait for 'W', 'T', etc.
thread alive TXX Find out if the thread XX is alive.
reply OK thread is still alive
ENN thread is dead
remote restart RXX Restart the remote server
extended ops ! Use the extended remote protocol.
Sticky -- only needs to be set once.
kill request k
toggle debug d toggle debug flag (see 386 & 68k stubs)
@ -165,7 +174,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
"0* " means the same as "0000". */
#include "defs.h"
#include <string.h>
#include "gdb_string.h"
#include <fcntl.h>
#include "frame.h"
#include "inferior.h"
@ -213,10 +222,24 @@ static int remote_start_remote PARAMS ((char *dummy));
static void remote_open PARAMS ((char *name, int from_tty));
static void extended_remote_open PARAMS ((char *name, int from_tty));
static void remote_open_1 PARAMS ((char *, int, struct target_ops *));
static void remote_close PARAMS ((int quitting));
static void remote_store_registers PARAMS ((int regno));
static void remote_mourn PARAMS ((void));
static void extended_remote_restart PARAMS ((void));
static void extended_remote_mourn PARAMS ((void));
static void extended_remote_create_inferior PARAMS ((char *, char *, char **));
static void remote_mourn_1 PARAMS ((struct target_ops *));
static void getpkt PARAMS ((char *buf, int forever));
static int putpkt PARAMS ((char *buf));
@ -242,6 +265,7 @@ static void remote_interrupt_twice PARAMS ((int signo));
static void interrupt_query PARAMS ((void));
extern struct target_ops remote_ops; /* Forward decl */
extern struct target_ops extended_remote_ops; /* Forward decl */
/* This was 5 seconds, which is a long time to sit and wait.
Unless this is going though some terminal server or multiplexer or
@ -313,7 +337,7 @@ set_thread (th, gen)
cont_thread = th;
}
/* Return nonzero if the thread TH is still alive on the remote system. */
/* Return nonzero if the thread TH is still alive on the remote system. */
static int
remote_thread_alive (th)
@ -330,6 +354,25 @@ remote_thread_alive (th)
getpkt (buf, 0);
return (buf[0] == 'O' && buf[1] == 'K');
}
/* Restart the remote side; this is an extended protocol operation. */
static void
extended_remote_restart ()
{
char buf[PBUFSIZ];
/* Send the restart command; for reasons I don't understand the
remote side really expects a number after the "R". */
buf[0] = 'R';
sprintf (&buf[1], "%x", 0);
putpkt (buf);
/* Now query for status so this looks just like we restarted
gdbserver from scratch. */
putpkt ("?");
getpkt (buf, 0);
}
/* Clean up connection to a remote debugger. */
@ -420,12 +463,41 @@ remote_start_remote (dummy)
/* Open a connection to a remote debugger.
NAME is the filename used for communication. */
static DCACHE *remote_dcache;
static void
remote_open (name, from_tty)
char *name;
int from_tty;
{
remote_open_1 (name, from_tty, &remote_ops);
}
/* Open a connection to a remote debugger using the extended
remote gdb protocol. NAME is hte filename used for communication. */
static void
extended_remote_open (name, from_tty)
char *name;
int from_tty;
{
char buf[PBUFSIZ];
/* Do the basic remote open stuff. */
remote_open_1 (name, from_tty, &extended_remote_ops);
/* Now tell the remote that we're using the extended protocol. */
putpkt ("!");
getpkt (buf, 0);
}
/* Generic code for opening a connection to a remote target. */
static DCACHE *remote_dcache;
static void
remote_open_1 (name, from_tty, target)
char *name;
int from_tty;
struct target_ops *target;
{
if (name == 0)
error ("To open a remote debug connection, you need to specify what serial\n\
@ -433,7 +505,7 @@ device is attached to the remote system (e.g. /dev/ttya).");
target_preopen (from_tty);
unpush_target (&remote_ops);
unpush_target (target);
remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
@ -463,7 +535,7 @@ device is attached to the remote system (e.g. /dev/ttya).");
puts_filtered (name);
puts_filtered ("\n");
}
push_target (&remote_ops); /* Switch to using remote target now */
push_target (target); /* Switch to using remote target now */
/* Start out by trying the 'P' request to set registers. We set this each
time that we open a new target so that if the user switches from one
@ -669,20 +741,21 @@ remote_wait (pid, status)
{
unsigned char *p1;
char *p_temp;
unsigned LONGEST val;
regno = strtol (p, &p_temp, 16); /* Read the register number */
regno = strtol ((const char *) p, &p_temp, 16); /* Read the register number */
p1 = (unsigned char *)p_temp;
if (p1 == p)
{
p1 = (unsigned char *) strchr (p, ':');
p1 = (unsigned char *) strchr ((const char *) p, ':');
if (p1 == NULL)
warning ("Malformed packet (missing colon): %s\n\
Packet: '%s'\n",
p, buf);
if (strncmp (p, "thread", p1 - p) == 0)
if (strncmp ((const char *) p, "thread", p1 - p) == 0)
{
thread_num = strtol (++p1, &p_temp, 16);
thread_num = strtol ((const char *) ++p1, &p_temp, 16);
p = (unsigned char *)p_temp;
}
}
@ -696,17 +769,20 @@ Packet: '%s'\n",
p, buf);
if (regno >= NUM_REGS)
warning ("Remote sent bad register number %d: %s\n\
warning ("Remote sent bad register number %ld: %s\n\
Packet: '%s'\n",
regno, p, buf);
val = 0L;
for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
{
if (p[0] == 0 || p[1] == 0)
warning ("Remote reply is too short: %s", buf);
regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
val = val * 256 + fromhex (p[0]) * 16 + fromhex (p[1]);
p += 2;
}
store_unsigned_integer (regs, REGISTER_RAW_SIZE (regno), val);
supply_register (regno, regs);
}
@ -750,8 +826,8 @@ Packet: '%s'\n",
last_sent_signal = TARGET_SIGNAL_0;
target_terminal_inferior ();
strcpy (buf, last_sent_step ? "s" : "c");
putpkt (buf);
strcpy ((char *) buf, last_sent_step ? "s" : "c");
putpkt ((char *) buf);
continue;
}
/* else fallthrough */
@ -928,6 +1004,7 @@ remote_store_registers (regno)
/* Read a word from remote address ADDR and return it.
This goes through the data cache. */
#if 0 /* unused? */
static int
remote_fetch_word (addr)
CORE_ADDR addr;
@ -945,6 +1022,7 @@ remote_store_word (addr, word)
{
dcache_poke (remote_dcache, addr, word);
}
#endif /* 0 (unused?) */
/* Write memory data directly to the remote machine.
@ -1403,7 +1481,6 @@ getpkt (buf, forever)
char *buf;
int forever;
{
char *bp;
int c;
int tries;
int timeout;
@ -1502,9 +1579,62 @@ remote_kill ()
static void
remote_mourn ()
{
unpush_target (&remote_ops);
remote_mourn_1 (&remote_ops);
}
static void
extended_remote_mourn ()
{
/* We do _not_ want to mourn the target like this; this will
remove the extended remote target from the target stack,
and the next time the user says "run" it'll fail.
FIXME: What is the right thing to do here? */
#if 0
remote_mourn_1 (&extended_remote_ops);
#endif
}
/* Worker function for remote_mourn. */
static void
remote_mourn_1 (target)
struct target_ops *target;
{
unpush_target (target);
generic_mourn_inferior ();
}
/* In the extended protocol we want to be able to do things like
"run" and have them basically work as expected. So we need
a special create_inferior function.
FIXME: One day add support for changing the exec file
we're debugging, arguments and an environment. */
static void
extended_remote_create_inferior (exec_file, args, env)
char *exec_file;
char *args;
char **env;
{
/* Rip out the breakpoints; we'll reinsert them after restarting
the remote server. */
remove_breakpoints ();
/* Now restart the remote server. */
extended_remote_restart ();
/* Now put the breakpoints back in. This way we're safe if the
restart function works via a unix fork on the remote side. */
insert_breakpoints ();
/* Clean up from the last time we were running. */
clear_proceed_status ();
/* Let the remote process run. */
proceed (-1, TARGET_SIGNAL_0, 0);
}
#ifdef REMOTE_BREAKPOINT
@ -1512,9 +1642,6 @@ remote_mourn ()
than other targets. */
static unsigned char break_insn[] = REMOTE_BREAKPOINT;
/* Check that it fits in BREAKPOINT_MAX bytes. */
static unsigned char check_break_insn_size[BREAKPOINT_MAX] = REMOTE_BREAKPOINT;
#else /* No REMOTE_BREAKPOINT. */
/* Same old breakpoint instruction. This code does nothing different
@ -1602,8 +1729,55 @@ Specify the serial device it is connected to (e.g. /dev/ttya).", /* to_doc */
OPS_MAGIC /* to_magic */
};
struct target_ops extended_remote_ops = {
"extended-remote", /* to_shortname */
"Extended remote serial target in gdb-specific protocol",/* to_longname */
"Use a remote computer via a serial line, using a gdb-specific protocol.\n\
Specify the serial device it is connected to (e.g. /dev/ttya).", /* to_doc */
extended_remote_open, /* to_open */
remote_close, /* to_close */
NULL, /* to_attach */
remote_detach, /* to_detach */
remote_resume, /* to_resume */
remote_wait, /* to_wait */
remote_fetch_registers, /* to_fetch_registers */
remote_store_registers, /* to_store_registers */
remote_prepare_to_store, /* to_prepare_to_store */
remote_xfer_memory, /* to_xfer_memory */
remote_files_info, /* to_files_info */
remote_insert_breakpoint, /* to_insert_breakpoint */
remote_remove_breakpoint, /* to_remove_breakpoint */
NULL, /* to_terminal_init */
NULL, /* to_terminal_inferior */
NULL, /* to_terminal_ours_for_output */
NULL, /* to_terminal_ours */
NULL, /* to_terminal_info */
remote_kill, /* to_kill */
generic_load, /* to_load */
NULL, /* to_lookup_symbol */
extended_remote_create_inferior,/* to_create_inferior */
extended_remote_mourn, /* to_mourn_inferior */
0, /* to_can_run */
0, /* to_notice_signals */
remote_thread_alive, /* to_thread_alive */
0, /* to_stop */
process_stratum, /* to_stratum */
NULL, /* to_next */
1, /* to_has_all_memory */
1, /* to_has_memory */
1, /* to_has_stack */
1, /* to_has_registers */
1, /* to_has_execution */
NULL, /* sections */
NULL, /* sections_end */
OPS_MAGIC /* to_magic */
};
void
_initialize_remote ()
{
add_target (&remote_ops);
add_target (&extended_remote_ops);
}