2004-09-24 Robert Picco <Robert.Picco@hp.com>
Committed by Andrew Cagney. * remote.c (set_remote_protocol_p_packet_cmd, remote_protocol_p) (show_remote_protocol_p_packet_cmd): New. Implement 'p' packet. configuration. (fetch_register_using_p): Implement 'p' packet. Based on code by Fernando Nasser. (remote_fetch_registers): Call fetch_register_using_p. (init_all_packet_configs, show_remote_cmd) (_initialize_remote): Add p-packet.
This commit is contained in:
parent
62ece330ee
commit
b96ec7ac6d
@ -1,3 +1,15 @@
|
||||
2004-09-24 Robert Picco <Robert.Picco@hp.com>
|
||||
|
||||
Committed by Andrew Cagney.
|
||||
* remote.c (set_remote_protocol_p_packet_cmd, remote_protocol_p)
|
||||
(show_remote_protocol_p_packet_cmd): New. Implement 'p' packet.
|
||||
configuration.
|
||||
(fetch_register_using_p): Implement 'p' packet. Based on code by
|
||||
Fernando Nasser.
|
||||
(remote_fetch_registers): Call fetch_register_using_p.
|
||||
(init_all_packet_configs, show_remote_cmd)
|
||||
(_initialize_remote): Add p-packet.
|
||||
|
||||
2004-09-24 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* inf-ptrace.c (inf_ptrace_kill_inferior): Call ptrace directly
|
||||
|
81
gdb/remote.c
81
gdb/remote.c
@ -961,6 +961,23 @@ show_remote_protocol_qPart_auxv_packet_cmd (char *args, int from_tty,
|
||||
show_packet_config_cmd (&remote_protocol_qPart_auxv);
|
||||
}
|
||||
|
||||
static struct packet_config remote_protocol_p;
|
||||
|
||||
static void
|
||||
set_remote_protocol_p_packet_cmd (char *args, int from_tty,
|
||||
struct cmd_list_element *c)
|
||||
{
|
||||
update_packet_config (&remote_protocol_p);
|
||||
}
|
||||
|
||||
static void
|
||||
show_remote_protocol_p_packet_cmd (char *args, int from_tty,
|
||||
struct cmd_list_element *c)
|
||||
{
|
||||
show_packet_config_cmd (&remote_protocol_p);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Tokens for use by the asynchronous signal handlers for SIGINT */
|
||||
static void *sigint_remote_twice_token;
|
||||
@ -2041,6 +2058,7 @@ init_all_packet_configs (void)
|
||||
{
|
||||
int i;
|
||||
update_packet_config (&remote_protocol_P);
|
||||
update_packet_config (&remote_protocol_p);
|
||||
update_packet_config (&remote_protocol_qSymbol);
|
||||
update_packet_config (&remote_protocol_vcont);
|
||||
for (i = 0; i < NR_Z_PACKET_TYPES; i++)
|
||||
@ -3150,6 +3168,36 @@ static int register_bytes_found;
|
||||
/* Read the remote registers into the block REGS. */
|
||||
/* Currently we just read all the registers, so we don't use regnum. */
|
||||
|
||||
static int
|
||||
fetch_register_using_p (int regnum)
|
||||
{
|
||||
struct remote_state *rs = get_remote_state ();
|
||||
char *buf = alloca (rs->remote_packet_size), *p;
|
||||
char regp[MAX_REGISTER_SIZE];
|
||||
int i;
|
||||
|
||||
buf[0] = 'p';
|
||||
bin2hex((char *) ®num, &buf[1], sizeof(regnum));
|
||||
buf[9] = 0;
|
||||
remote_send (buf, rs->remote_packet_size);
|
||||
if (buf[0] != 0 && buf[0] != 'E') {
|
||||
p = buf;
|
||||
i = 0;
|
||||
while (p[0] != 0) {
|
||||
if (p[1] == 0) {
|
||||
error("fetch_register_using_p: early buf termination");
|
||||
return 0;
|
||||
}
|
||||
regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
|
||||
p += 2;
|
||||
}
|
||||
regcache_raw_supply (current_regcache, regnum, regp);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
remote_fetch_registers (int regnum)
|
||||
{
|
||||
@ -3170,6 +3218,31 @@ remote_fetch_registers (int regnum)
|
||||
"Attempt to fetch a non G-packet register when this "
|
||||
"remote.c does not support the p-packet.");
|
||||
}
|
||||
switch (remote_protocol_p.support)
|
||||
{
|
||||
case PACKET_DISABLE:
|
||||
break;
|
||||
case PACKET_ENABLE:
|
||||
if (fetch_register_using_p (regnum))
|
||||
return;
|
||||
else
|
||||
error ("Protocol error: p packet not recognized by stub");
|
||||
case PACKET_SUPPORT_UNKNOWN:
|
||||
if (fetch_register_using_p (regnum))
|
||||
{
|
||||
/* The stub recognized the 'p' packet. Remember this. */
|
||||
remote_protocol_p.support = PACKET_ENABLE;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The stub does not support the 'P' packet. Use 'G'
|
||||
instead, and don't try using 'P' in the future (it
|
||||
will just waste our time). */
|
||||
remote_protocol_p.support = PACKET_DISABLE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sprintf (buf, "g");
|
||||
remote_send (buf, (rs->remote_packet_size));
|
||||
@ -5332,6 +5405,7 @@ show_remote_cmd (char *args, int from_tty)
|
||||
remote_show_cmdlist for a list of sub commands to show. */
|
||||
show_remote_protocol_Z_packet_cmd (args, from_tty, NULL);
|
||||
show_remote_protocol_P_packet_cmd (args, from_tty, NULL);
|
||||
show_remote_protocol_p_packet_cmd (args, from_tty, NULL);
|
||||
show_remote_protocol_qSymbol_packet_cmd (args, from_tty, NULL);
|
||||
show_remote_protocol_vcont_packet_cmd (args, from_tty, NULL);
|
||||
show_remote_protocol_binary_download_cmd (args, from_tty, NULL);
|
||||
@ -5528,6 +5602,13 @@ in a memory packet.\n",
|
||||
&remote_set_cmdlist, &remote_show_cmdlist,
|
||||
1);
|
||||
|
||||
add_packet_config_cmd (&remote_protocol_p,
|
||||
"p", "fetch-register",
|
||||
set_remote_protocol_p_packet_cmd,
|
||||
show_remote_protocol_p_packet_cmd,
|
||||
&remote_set_cmdlist, &remote_show_cmdlist,
|
||||
1);
|
||||
|
||||
add_packet_config_cmd (&remote_protocol_Z[Z_PACKET_SOFTWARE_BP],
|
||||
"Z0", "software-breakpoint",
|
||||
set_remote_protocol_Z_software_bp_packet_cmd,
|
||||
|
Loading…
Reference in New Issue
Block a user