/* Remote target communications for serial-line targets in custom GDB protocol
Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GDB.
#include "regcache.h"
#include "value.h"
#include "gdb_assert.h"
+#include "observer.h"
#include <ctype.h>
#include <sys/time.h>
static long read_frame (char *buf, long sizeof_buf);
-static int remote_insert_breakpoint (CORE_ADDR, char *);
+static int remote_insert_breakpoint (CORE_ADDR, bfd_byte *);
-static int remote_remove_breakpoint (CORE_ADDR, char *);
+static int remote_remove_breakpoint (CORE_ADDR, bfd_byte *);
static int hexnumlen (ULONGEST num);
int regnum;
struct remote_state *rs = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_state);
- if (deprecated_register_bytes () != 0)
- rs->sizeof_g_packet = deprecated_register_bytes ();
- else
- rs->sizeof_g_packet = 0;
+ rs->sizeof_g_packet = 0;
/* Assume a 1:1 regnum<->pnum table. */
rs->regs = GDBARCH_OBSTACK_CALLOC (gdbarch, NUM_REGS + NUM_PSEUDO_REGS,
/* ...name = REGISTER_NAME (regnum); */
/* Compute packet size by accumulating the size of all registers. */
- if (deprecated_register_bytes () == 0)
- rs->sizeof_g_packet += register_size (current_gdbarch, regnum);
+ if (regnum < NUM_REGS)
+ rs->sizeof_g_packet += register_size (current_gdbarch, regnum);
}
/* Default maximum number of characters in a packet body. Many
#ifndef MAX_REMOTE_PACKET_SIZE
#define MAX_REMOTE_PACKET_SIZE 16384
#endif
- /* NOTE: 16 is just chosen at random. */
+ /* NOTE: 20 ensures we can write at least one byte. */
#ifndef MIN_REMOTE_PACKET_SIZE
-#define MIN_REMOTE_PACKET_SIZE 16
+#define MIN_REMOTE_PACKET_SIZE 20
#endif
long what_they_get;
if (config->fixed_p)
int fixed_p = config->fixed_p;
long size = config->size;
if (args == NULL)
- error ("Argument required (integer, `fixed' or `limited').");
+ error (_("Argument required (integer, `fixed' or `limited')."));
else if (strcmp (args, "hard") == 0
|| strcmp (args, "fixed") == 0)
fixed_p = 1;
char *end;
size = strtoul (args, &end, 0);
if (args == end)
- error ("Invalid %s (bad syntax).", config->name);
+ error (_("Invalid %s (bad syntax)."), config->name);
#if 0
/* Instead of explicitly capping the size of a packet to
MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
instead allowed to set the size to something arbitrarily
large. */
if (size > MAX_REMOTE_PACKET_SIZE)
- error ("Invalid %s (too large).", config->name);
+ error (_("Invalid %s (too large)."), config->name);
#endif
}
/* Extra checks? */
if (fixed_p && !config->fixed_p)
{
- if (! query ("The target may not be able to correctly handle a %s\n"
- "of %ld bytes. Change the packet size? ",
+ if (! query (_("The target may not be able to correctly handle a %s\n"
+ "of %ld bytes. Change the packet size? "),
config->name, size))
- error ("Packet size not changed.");
+ error (_("Packet size not changed."));
}
/* Update the config. */
config->fixed_p = fixed_p;
static void
show_memory_packet_size (struct memory_packet_config *config)
{
- printf_filtered ("The %s is %ld. ", config->name, config->size);
+ printf_filtered (_("The %s is %ld. "), config->name, config->size);
if (config->fixed_p)
- printf_filtered ("Packets are fixed at %ld bytes.\n",
+ printf_filtered (_("Packets are fixed at %ld bytes.\n"),
get_memory_packet_size (config));
else
- printf_filtered ("Packets are limited to %ld bytes.\n",
+ printf_filtered (_("Packets are limited to %ld bytes.\n"),
get_memory_packet_size (config));
}
switch (config->detect)
{
case AUTO_BOOLEAN_AUTO:
- printf_filtered ("Support for remote protocol `%s' (%s) packet is auto-detected, currently %s.\n",
+ printf_filtered (_("Support for remote protocol `%s' (%s) packet is auto-detected, currently %s.\n"),
config->name, config->title, support);
break;
case AUTO_BOOLEAN_TRUE:
case AUTO_BOOLEAN_FALSE:
- printf_filtered ("Support for remote protocol `%s' (%s) packet is currently %s.\n",
+ printf_filtered (_("Support for remote protocol `%s' (%s) packet is currently %s.\n"),
config->name, config->title, support);
break;
}
char *name,
char *title,
cmd_sfunc_ftype *set_func,
- cmd_sfunc_ftype *show_func,
+ show_value_ftype *show_func,
struct cmd_list_element **set_remote_list,
struct cmd_list_element **show_remote_list,
int legacy)
{
- struct cmd_list_element *set_cmd;
- struct cmd_list_element *show_cmd;
char *set_doc;
char *show_doc;
- char *help_doc;
- char *print;
char *cmd_name;
+
config->name = name;
config->title = title;
config->detect = AUTO_BOOLEAN_AUTO;
name, title);
show_doc = xstrprintf ("Show current use of remote protocol `%s' (%s) packet",
name, title);
- print = xstrprintf ("Current use of remote protocol `%s' (%s) is %%s",
- name, title);
/* set/show TITLE-packet {auto,on,off} */
cmd_name = xstrprintf ("%s-packet", title);
add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
- &config->detect, set_doc, show_doc,
- "", print,
+ &config->detect, set_doc, show_doc, NULL, /* help_doc */
set_func, show_func,
set_remote_list, show_remote_list);
/* set/show remote NAME-packet {auto,on,off} -- legacy. */
break;
case PACKET_DISABLE:
internal_error (__FILE__, __LINE__,
- "packet_ok: attempt to use a disabled packet");
+ _("packet_ok: attempt to use a disabled packet"));
break;
case PACKET_ENABLE:
break;
if (config->detect == AUTO_BOOLEAN_AUTO)
/* If the stub previously indicated that the packet was
supported then there is a protocol error.. */
- error ("Protocol error: %s (%s) conflicting enabled responses.",
+ error (_("Protocol error: %s (%s) conflicting enabled responses."),
config->name, config->title);
else
/* The user set it wrong. */
- error ("Enabled packet %s (%s) not recognized by stub",
+ error (_("Enabled packet %s (%s) not recognized by stub"),
config->name, config->title);
break;
case PACKET_SUPPORT_UNKNOWN:
}
static void
-show_remote_protocol_vcont_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_vcont_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_vcont);
}
}
static void
-show_remote_protocol_qSymbol_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_qSymbol_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_qSymbol);
}
}
static void
-show_remote_protocol_P_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_P_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_P);
}
}
static void
-show_remote_protocol_Z_software_bp_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_Z_software_bp_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_SOFTWARE_BP]);
}
}
static void
-show_remote_protocol_Z_hardware_bp_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_Z_hardware_bp_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_HARDWARE_BP]);
}
}
static void
-show_remote_protocol_Z_write_wp_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_Z_write_wp_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_WRITE_WP]);
}
}
static void
-show_remote_protocol_Z_read_wp_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_Z_read_wp_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_READ_WP]);
}
}
static void
-show_remote_protocol_Z_access_wp_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_Z_access_wp_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_Z[Z_PACKET_ACCESS_WP]);
}
}
static void
-show_remote_protocol_Z_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
int i;
for (i = 0; i < NR_Z_PACKET_TYPES; i++)
}
static void
-show_remote_protocol_binary_download_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_binary_download_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_binary_download);
}
}
static void
-show_remote_protocol_qPart_auxv_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_qPart_auxv_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_qPart_auxv);
}
+/* Should we try the 'qGetTLSAddr' (Get Thread Local Storage Address) request? */
+static struct packet_config remote_protocol_qGetTLSAddr;
+
+static void
+set_remote_protocol_qGetTLSAddr_packet_cmd (char *args, int from_tty,
+ struct cmd_list_element *c)
+{
+ update_packet_config (&remote_protocol_qGetTLSAddr);
+}
+
+static void
+show_remote_protocol_qGetTLSAddr_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
+{
+ show_packet_config_cmd (&remote_protocol_qGetTLSAddr);
+}
+
static struct packet_config remote_protocol_p;
static void
}
static void
-show_remote_protocol_p_packet_cmd (char *args, int from_tty,
- struct cmd_list_element *c)
+show_remote_protocol_p_packet_cmd (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
{
show_packet_config_cmd (&remote_protocol_p);
}
pkt = unpack_threadid (pkt, &ref);
if (mask == 0)
- warning ("Incomplete response to threadinfo request\n");
+ warning (_("Incomplete response to threadinfo request."));
if (!threadmatch (&ref, expectedref))
{ /* This is an answer to a different request. */
- warning ("ERROR RMT Thread info mismatch\n");
+ warning (_("ERROR RMT Thread info mismatch."));
return 0;
}
copy_threadref (&info->threadid, &ref);
pkt = unpack_byte (pkt, &length); /* length */
if (!(tag & mask)) /* Tags out of synch with mask. */
{
- warning ("ERROR RMT: threadinfo tag mismatch\n");
+ warning (_("ERROR RMT: threadinfo tag mismatch."));
retval = 0;
break;
}
{
if (length != 16)
{
- warning ("ERROR RMT: length of threadid is not 16\n");
+ warning (_("ERROR RMT: length of threadid is not 16."));
retval = 0;
break;
}
mask = mask & ~(TAG_EXISTS);
if (length > 8)
{
- warning ("ERROR RMT: 'exists' length too long\n");
+ warning (_("ERROR RMT: 'exists' length too long."));
retval = 0;
break;
}
mask = mask & ~TAG_MOREDISPLAY;
continue;
}
- warning ("ERROR RMT: unknown thread info tag\n");
+ warning (_("ERROR RMT: unknown thread info tag."));
break; /* Not a tag we know about. */
}
return retval;
exit
wait for packet, then exit
*/
- warning ("HMM: threadlist did not echo arg thread, dropping it\n");
+ warning (_("HMM: threadlist did not echo arg thread, dropping it."));
return 0; /* I choose simply exiting. */
}
if (*result_count <= 0)
{
if (*done != 1)
{
- warning ("RMT ERROR : failed to get remote thread list\n");
+ warning (_("RMT ERROR : failed to get remote thread list."));
result = 0;
}
return result; /* break; */
if (*result_count > result_limit)
{
*result_count = 0;
- warning ("RMT ERROR: threadlist response longer than requested\n");
+ warning (_("RMT ERROR: threadlist response longer than requested."));
return 0;
}
return result;
if (loopcount++ > looplimit)
{
result = 0;
- warning ("Remote fetch threadlist -infinite loop-\n");
+ warning (_("Remote fetch threadlist -infinite loop-."));
break;
}
if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
int tid;
if (remote_desc == 0) /* paranoia */
- error ("Command can only be used when connected to the remote target.");
+ error (_("Command can only be used when connected to the remote target."));
if (use_threadinfo_query)
{
if (remote_desc == 0) /* paranoia */
internal_error (__FILE__, __LINE__,
- "remote_threads_extra_info");
+ _("remote_threads_extra_info"));
if (use_threadextra_query)
{
this command. */
if (buf[0] == 'E')
{
- warning ("Remote failure reply: %s", buf);
+ warning (_("Remote failure reply: %s"), buf);
return;
}
lose = 1;
if (lose)
- error ("Malformed response to offset query, %s", buf);
+ error (_("Malformed response to offset query, %s"), buf);
if (symfile_objfile == NULL)
return;
downloading. */
update_packet_config (&remote_protocol_binary_download);
update_packet_config (&remote_protocol_qPart_auxv);
+ update_packet_config (&remote_protocol_qGetTLSAddr);
}
/* Symbol look-up. */
to be. */
if (!udp_warning && strncmp (name, "udp:", 4) == 0)
{
- warning ("The remote protocol may be unreliable over UDP.");
- warning ("Some events may be lost, rendering further debugging "
- "impossible.");
+ warning (_("\
+The remote protocol may be unreliable over UDP.\n\
+Some events may be lost, rendering further debugging impossible."));
udp_warning = 1;
}
remote_open_1 (char *name, int from_tty, struct target_ops *target,
int extended_p, int async_p)
{
- struct exception ex;
struct remote_state *rs = get_remote_state ();
if (name == 0)
- error ("To open a remote debug connection, you need to specify what\n"
+ error (_("To open a remote debug connection, you need to specify what\n"
"serial device is attached to the remote system\n"
- "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
+ "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
/* See FIXME above. */
if (!async_p)
been fixed - the function set_cmd_context() makes it possible for
all the ``target ....'' commands to share a common callback
function. See cli-dump.c. */
- ex = catch_exception (uiout, remote_start_remote, NULL, RETURN_MASK_ALL);
- if (ex.reason < 0)
- {
- pop_target ();
- if (async_p)
- wait_forever_enabled_p = 1;
- throw_exception (ex);
- }
+ {
+ struct gdb_exception ex
+ = catch_exception (uiout, remote_start_remote, NULL, RETURN_MASK_ALL);
+ if (ex.reason < 0)
+ {
+ pop_target ();
+ if (async_p)
+ wait_forever_enabled_p = 1;
+ throw_exception (ex);
+ }
+ }
if (async_p)
wait_forever_enabled_p = 1;
remote_check_symbols (symfile_objfile);
}
#endif
+
+ observer_notify_inferior_created (¤t_target, from_tty);
}
/* This takes a program previously attached to and detaches it. After
char *buf = alloca (rs->remote_packet_size);
if (args)
- error ("Argument given to \"detach\" when remotely debugging.");
+ error (_("Argument given to \"detach\" when remotely debugging."));
/* Tell the remote target to detach. */
strcpy (buf, "D");
static void
remote_disconnect (char *args, int from_tty)
{
- struct remote_state *rs = get_remote_state ();
- char *buf = alloca (rs->remote_packet_size);
-
if (args)
- error ("Argument given to \"detach\" when remotely debugging.");
+ error (_("Argument given to \"detach\" when remotely debugging."));
/* Unregister the file descriptor from the event loop. */
if (target_is_async_p ())
else if (a >= 'A' && a <= 'F')
return a - 'A' + 10;
else
- error ("Reply contains invalid hex digit %d", a);
+ error (_("Reply contains invalid hex digit %d"), a);
}
static int
struct remote_state *rs = get_remote_state ();
char *buf = alloca (rs->remote_packet_size);
int pid = PIDGET (ptid);
- char *p;
last_sent_signal = siggnal;
last_sent_step = step;
Give up (and stop debugging it)? "))
{
target_mourn_inferior ();
- throw_reason (RETURN_QUIT);
+ deprecated_throw_reason (RETURN_QUIT);
}
target_terminal_inferior ();
switch (buf[0])
{
case 'E': /* Error of some sort. */
- warning ("Remote failure reply: %s", buf);
+ warning (_("Remote failure reply: %s"), buf);
continue;
case 'F': /* File-I/O request. */
remote_fileio_request (buf);
continue;
case 'T': /* Status with PC, SP, FP, ... */
{
- int i;
char regs[MAX_REGISTER_SIZE];
/* Expedited reply, containing Signal, {regno, reg} repeat. */
{
p1 = (unsigned char *) strchr (p, ':');
if (p1 == NULL)
- warning ("Malformed packet(a) (missing colon): %s\n\
-Packet: '%s'\n",
+ warning (_("Malformed packet(a) (missing colon): %s\n\
+Packet: '%s'\n"),
p, buf);
if (strncmp (p, "thread", p1 - p) == 0)
{
p = p1;
if (*p++ != ':')
- error ("Malformed packet(b) (missing colon): %s\n\
-Packet: '%s'\n",
+ error (_("Malformed packet(b) (missing colon): %s\n\
+Packet: '%s'\n"),
p, buf);
if (reg == NULL)
- error ("Remote sent bad register number %s: %s\n\
-Packet: '%s'\n",
+ error (_("Remote sent bad register number %s: %s\n\
+Packet: '%s'\n"),
phex_nz (pnum, 0), p, buf);
fieldsize = hex2bin (p, regs,
p += 2 * fieldsize;
if (fieldsize < register_size (current_gdbarch,
reg->regnum))
- warning ("Remote reply is too short: %s", buf);
+ warning (_("Remote reply is too short: %s"), buf);
regcache_raw_supply (current_regcache,
reg->regnum, regs);
}
if (*p++ != ';')
- error ("Remote register badly formatted: %s\nhere: %s",
+ error (_("Remote register badly formatted: %s\nhere: %s"),
buf, p);
}
}
}
/* else fallthrough */
default:
- warning ("Invalid remote reply: %s", buf);
+ warning (_("Invalid remote reply: %s"), buf);
continue;
}
}
switch (buf[0])
{
case 'E': /* Error of some sort. */
- warning ("Remote failure reply: %s", buf);
+ warning (_("Remote failure reply: %s"), buf);
continue;
case 'F': /* File-I/O request. */
remote_fileio_request (buf);
continue;
case 'T': /* Status with PC, SP, FP, ... */
{
- int i;
char regs[MAX_REGISTER_SIZE];
/* Expedited reply, containing Signal, {regno, reg} repeat. */
{
p1 = (unsigned char *) strchr (p, ':');
if (p1 == NULL)
- error ("Malformed packet(a) (missing colon): %s\n\
-Packet: '%s'\n",
+ error (_("Malformed packet(a) (missing colon): %s\n\
+Packet: '%s'\n"),
p, buf);
if (strncmp (p, "thread", p1 - p) == 0)
{
struct packet_reg *reg = packet_reg_from_pnum (rs, pnum);
p = p1;
if (*p++ != ':')
- error ("Malformed packet(b) (missing colon): %s\n\
-Packet: '%s'\n",
+ error (_("Malformed packet(b) (missing colon): %s\n\
+Packet: '%s'\n"),
p, buf);
if (reg == NULL)
- error ("Remote sent bad register number %ld: %s\n\
-Packet: '%s'\n",
+ error (_("Remote sent bad register number %ld: %s\n\
+Packet: '%s'\n"),
pnum, p, buf);
fieldsize = hex2bin (p, regs,
p += 2 * fieldsize;
if (fieldsize < register_size (current_gdbarch,
reg->regnum))
- warning ("Remote reply is too short: %s", buf);
+ warning (_("Remote reply is too short: %s"), buf);
regcache_raw_supply (current_regcache, reg->regnum, regs);
}
if (*p++ != ';')
- error ("Remote register badly formatted: %s\nhere: %s",
+ error (_("Remote register badly formatted: %s\nhere: %s"),
buf, p);
}
}
}
/* else fallthrough */
default:
- warning ("Invalid remote reply: %s", buf);
+ warning (_("Invalid remote reply: %s"), buf);
continue;
}
}
{
if (p[1] == 0)
{
- error ("fetch_register_using_p: early buf termination");
+ error (_("fetch_register_using_p: early buf termination"));
return 0;
}
gdb_assert (reg != NULL);
if (!reg->in_g_packet)
internal_error (__FILE__, __LINE__,
- "Attempt to fetch a non G-packet register when this "
- "remote.c does not support the p-packet.");
+ _("Attempt to fetch a non G-packet register when this "
+ "remote.c does not support the p-packet."));
}
switch (remote_protocol_p.support)
{
if (fetch_register_using_p (regnum))
return;
else
- error ("Protocol error: p packet not recognized by stub");
+ error (_("Protocol error: p packet not recognized by stub"));
case PACKET_SUPPORT_UNKNOWN:
if (fetch_register_using_p (regnum))
{
in the buffer is not a hex character, assume that has happened
and try to fetch another packet to read. */
while ((buf[0] < '0' || buf[0] > '9')
+ && (buf[0] < 'A' || buf[0] > 'F')
&& (buf[0] < 'a' || buf[0] > 'f')
&& buf[0] != 'x') /* New: unavailable register value. */
{
break;
if (p[1] == 0)
{
- warning ("Remote reply is of odd length: %s", buf);
+ warning (_("Remote reply is of odd length: %s"), buf);
/* Don't change register_bytes_found in this case, and don't
print a second warning. */
goto supply_them;
register_bytes_found = i;
if (REGISTER_BYTES_OK_P ()
&& !REGISTER_BYTES_OK (i))
- warning ("Remote reply is too short: %s", buf);
+ warning (_("Remote reply is too short: %s"), buf);
}
supply_them:
char *buf = alloca (rs->remote_packet_size);
char regp[MAX_REGISTER_SIZE];
char *p;
- int i;
sprintf (buf, "P%s=", phex_nz (reg->pnum, 0));
p = buf + strlen (buf);
struct remote_state *rs = get_remote_state ();
char *buf;
char *regs;
- int i;
char *p;
set_thread (PIDGET (inferior_ptid), 1);
if (store_register_using_P (regnum))
return;
else
- error ("Protocol error: P packet not recognized by stub");
+ error (_("Protocol error: P packet not recognized by stub"));
case PACKET_SUPPORT_UNKNOWN:
if (store_register_using_P (regnum))
{
{
int i;
regs = alloca (rs->sizeof_g_packet);
- memset (regs, rs->sizeof_g_packet, 0);
+ memset (regs, 0, rs->sizeof_g_packet);
for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
{
struct packet_reg *r = &rs->regs[i];
/* Verify that the target can support a binary download. */
check_binary_download (memaddr);
+ payload_size = get_memory_write_packet_size ();
+
/* Compute the size, and then allocate space for the largest
- possible packet. Include space for an extra trailing NULL. */
- sizeof_buf = get_memory_write_packet_size () + 1;
+ possible packet. Include space for an extra trailing NUL. */
+ sizeof_buf = payload_size + 1;
buf = alloca (sizeof_buf);
/* Compute the size of the actual payload by subtracting out the
- packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
- payload_size = (get_memory_write_packet_size () - (strlen ("$M,:#NN")
- + hexnumlen (memaddr)
- + hexnumlen (len)));
+ packet header and footer overhead: "$M<memaddr>,<len>:...#nn".
+ */
+ payload_size -= strlen ("$M,:#NN");
+ payload_size -= hexnumlen (memaddr);
/* Construct the packet header: "[MX]<memaddr>,<len>:". */
*p++ = 'X';
/* Best guess at number of bytes that will fit. */
todo = min (len, payload_size);
+ payload_size -= hexnumlen (todo);
+ todo = min (todo, payload_size);
break;
case PACKET_DISABLE:
*p++ = 'M';
/* Num bytes that will fit. */
todo = min (len, payload_size / 2);
+ payload_size -= hexnumlen (todo);
+ todo = min (todo, payload_size / 2);
break;
case PACKET_SUPPORT_UNKNOWN:
internal_error (__FILE__, __LINE__,
- "remote_write_bytes: bad internal state");
+ _("remote_write_bytes: bad internal state"));
default:
- internal_error (__FILE__, __LINE__, "bad switch");
+ internal_error (__FILE__, __LINE__, _("bad switch"));
}
+ if (todo <= 0)
+ internal_error (__FILE__, __LINE__,
+ _("minumum packet size too small to write data"));
/* Append "<memaddr>". */
memaddr = remote_address_masked (memaddr);
break;
case PACKET_SUPPORT_UNKNOWN:
internal_error (__FILE__, __LINE__,
- "remote_write_bytes: bad internal state");
+ _("remote_write_bytes: bad internal state"));
default:
- internal_error (__FILE__, __LINE__, "bad switch");
+ internal_error (__FILE__, __LINE__, _("bad switch"));
}
putpkt_binary (buf, (int) (p - buf));
{
case SERIAL_EOF:
target_mourn_inferior ();
- error ("Remote connection closed");
+ error (_("Remote connection closed"));
/* no return */
case SERIAL_ERROR:
- perror_with_name ("Remote communication error");
+ perror_with_name (_("Remote communication error"));
/* no return */
case SERIAL_TIMEOUT:
break;
getpkt (buf, sizeof_buf, 0);
if (buf[0] == 'E')
- error ("Remote failure reply: %s", buf);
+ error (_("Remote failure reply: %s"), buf);
}
/* Display a null-terminated packet on stdout, for debugging, using C
gdb_flush (gdb_stdlog);
}
if (serial_write (remote_desc, buf2, p - buf2))
- perror_with_name ("putpkt: write failed");
+ perror_with_name (_("putpkt: write failed"));
/* Read until either a timeout occurs (-2) or '+' is read. */
while (1)
}
buf[bc] = '\0';
- printf_filtered ("Repeat count %d too large for buffer: ",
+ printf_filtered (_("Repeat count %d too large for buffer: "),
repeat);
puts_filtered (buf);
puts_filtered ("\n");
{
QUIT;
target_mourn_inferior ();
- error ("Watchdog has expired. Target detached.\n");
+ error (_("Watchdog has expired. Target detached."));
}
if (remote_debug)
fputs_filtered ("Timed out.\n", gdb_stdlog);
/* We have tried hard enough, and just can't receive the packet.
Give up. */
- printf_unfiltered ("Ignoring packet error, continuing...\n");
+ printf_unfiltered (_("Ignoring packet error, continuing...\n"));
serial_write (remote_desc, "+", 1);
return 1;
}
of bytes returned by BREAKPOINT_FROM_PC. */
static int
-remote_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
+remote_insert_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache)
{
struct remote_state *rs = get_remote_state ();
#ifdef DEPRECATED_REMOTE_BREAKPOINT
}
static int
-remote_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
+remote_remove_breakpoint (CORE_ADDR addr, bfd_byte *contents_cache)
{
struct remote_state *rs = get_remote_state ();
int bp_size;
break;
default:
internal_error (__FILE__, __LINE__,
- "hw_bp_to_z: bad watchpoint type %d", type);
+ _("hw_bp_to_z: bad watchpoint type %d"), type);
}
}
enum Z_packet_type packet = watchpoint_to_Z_packet (type);
if (remote_protocol_Z[packet].support == PACKET_DISABLE)
- error ("Can't set hardware watchpoints without the '%s' (%s) packet\n",
+ error (_("Can't set hardware watchpoints without the '%s' (%s) packet."),
remote_protocol_Z[packet].name,
remote_protocol_Z[packet].title);
return 0;
}
internal_error (__FILE__, __LINE__,
- "remote_insert_watchpoint: reached end of function");
+ _("remote_insert_watchpoint: reached end of function"));
}
enum Z_packet_type packet = watchpoint_to_Z_packet (type);
if (remote_protocol_Z[packet].support == PACKET_DISABLE)
- error ("Can't clear hardware watchpoints without the '%s' (%s) packet\n",
+ error (_("Can't clear hardware watchpoints without the '%s' (%s) packet."),
remote_protocol_Z[packet].name,
remote_protocol_Z[packet].title);
return 0;
}
internal_error (__FILE__, __LINE__,
- "remote_remove_watchpoint: reached end of function");
+ _("remote_remove_watchpoint: reached end of function"));
}
BREAKPOINT_FROM_PC (&addr, &len);
if (remote_protocol_Z[Z_PACKET_HARDWARE_BP].support == PACKET_DISABLE)
- error ("Can't set hardware breakpoint without the '%s' (%s) packet\n",
+ error (_("Can't set hardware breakpoint without the '%s' (%s) packet."),
remote_protocol_Z[Z_PACKET_HARDWARE_BP].name,
remote_protocol_Z[Z_PACKET_HARDWARE_BP].title);
return 0;
}
internal_error (__FILE__, __LINE__,
- "remote_insert_hw_breakpoint: reached end of function");
+ _("remote_insert_hw_breakpoint: reached end of function"));
}
BREAKPOINT_FROM_PC (&addr, &len);
if (remote_protocol_Z[Z_PACKET_HARDWARE_BP].support == PACKET_DISABLE)
- error ("Can't clear hardware breakpoint without the '%s' (%s) packet\n",
+ error (_("Can't clear hardware breakpoint without the '%s' (%s) packet."),
remote_protocol_Z[Z_PACKET_HARDWARE_BP].name,
remote_protocol_Z[Z_PACKET_HARDWARE_BP].title);
return 0;
}
internal_error (__FILE__, __LINE__,
- "remote_remove_hw_breakpoint: reached end of function");
+ _("remote_remove_hw_breakpoint: reached end of function"));
}
/* Some targets are only capable of doing downloads, and afterwards
void
push_remote_target (char *name, int from_tty)
{
- printf_filtered ("Switching to remote protocol\n");
+ printf_filtered (_("Switching to remote protocol\n"));
remote_open (name, from_tty);
}
int mismatched = 0;
if (!exec_bfd)
- error ("command cannot be used without an exec file");
+ error (_("command cannot be used without an exec file"));
if (!current_target.to_shortname ||
strcmp (current_target.to_shortname, "remote") != 0)
- error ("command can only be used with remote target");
+ error (_("command can only be used with remote target"));
for (s = exec_bfd->sections; s; s = s->next)
{
getpkt (buf, (rs->remote_packet_size), 0);
if (buf[0] == 'E')
- error ("target memory fault, section %s, range 0x%s -- 0x%s",
+ error (_("target memory fault, section %s, range 0x%s -- 0x%s"),
sectname, paddr (lma), paddr (lma + size));
if (buf[0] != 'C')
- error ("remote target does not support this operation");
+ error (_("remote target does not support this operation"));
for (target_crc = 0, tmp = &buf[1]; *tmp; tmp++)
target_crc = target_crc * 16 + fromhex (*tmp);
do_cleanups (old_chain);
}
if (mismatched > 0)
- warning ("One or more sections of the remote executable does not match\n\
-the loaded file\n");
+ warning (_("One or more sections of the remote executable does not match\n\
+the loaded file\n"));
if (args && !matched)
- printf_filtered ("No loaded section named '%s'.\n", args);
+ printf_filtered (_("No loaded section named '%s'.\n"), args);
}
static LONGEST
/* Except for querying the minimum buffer size, target must be open. */
if (!remote_desc)
- error ("remote query is only available after target open");
+ error (_("remote query is only available after target open"));
gdb_assert (annex != NULL);
gdb_assert (readbuf != NULL);
struct ui_file *outbuf)
{
struct remote_state *rs = get_remote_state ();
- int i;
char *buf = alloca (rs->remote_packet_size);
char *p = buf;
if (!remote_desc)
- error ("remote rcmd is only available after target open");
+ error (_("remote rcmd is only available after target open"));
/* Send a NULL command across as an empty command. */
if (command == NULL)
p = strchr (buf, '\0');
if ((strlen (buf) + strlen (command) * 2 + 8/*misc*/) > (rs->remote_packet_size))
- error ("\"monitor\" command ``%s'' is too long\n", command);
+ error (_("\"monitor\" command ``%s'' is too long."), command);
/* Encode the actual command. */
bin2hex (command, p, 0);
if (putpkt (buf) < 0)
- error ("Communication problem with target\n");
+ error (_("Communication problem with target."));
/* get/display the response */
while (1)
buf[0] = '\0';
getpkt (buf, (rs->remote_packet_size), 0);
if (buf[0] == '\0')
- error ("Target does not support this command\n");
+ error (_("Target does not support this command."));
if (buf[0] == 'O' && buf[1] != 'K')
{
remote_console_output (buf + 1); /* 'O' message from stub. */
if (strlen (buf) == 3 && buf[0] == 'E'
&& isdigit (buf[1]) && isdigit (buf[2]))
{
- error ("Protocol error with Rcmd");
+ error (_("Protocol error with Rcmd"));
}
for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
{
char *buf = alloca (rs->remote_packet_size);
if (!remote_desc)
- error ("command can only be used with remote target");
+ error (_("command can only be used with remote target"));
if (!args)
- error ("remote-packet command requires packet text as argument");
+ error (_("remote-packet command requires packet text as argument"));
puts_filtered ("sending: ");
print_packet (args);
{
int sample_thread = SAMPLE_THREAD;
- printf_filtered ("Remote threadset test\n");
+ printf_filtered (_("Remote threadset test\n"));
set_thread (sample_thread, 1);
}
static void
init_remote_threadtests (void)
{
- add_com ("tlist", class_obscure, threadlist_test_cmd,
- "Fetch and print the remote list of thread identifiers, one pkt only");
+ add_com ("tlist", class_obscure, threadlist_test_cmd, _("\
+Fetch and print the remote list of thread identifiers, one pkt only"));
add_com ("tinfo", class_obscure, threadinfo_test_cmd,
- "Fetch and display info about one thread");
+ _("Fetch and display info about one thread"));
add_com ("tset", class_obscure, threadset_test_cmd,
- "Test setting to a different thread");
+ _("Test setting to a different thread"));
add_com ("tupd", class_obscure, threadlist_update_test_cmd,
- "Iterate through updating all remote thread info");
+ _("Iterate through updating all remote thread info"));
add_com ("talive", class_obscure, threadalive_test,
- " Remote thread alive test ");
+ _(" Remote thread alive test "));
}
#endif /* 0 */
static char *
remote_pid_to_str (ptid_t ptid)
{
- static char buf[30];
+ static char buf[32];
+ int size;
- sprintf (buf, "Thread %d", PIDGET (ptid));
+ size = snprintf (buf, sizeof buf, "thread %d", ptid_get_pid (ptid));
+ gdb_assert (size < sizeof buf);
return buf;
}
+/* Get the address of the thread local variable in OBJFILE which is
+ stored at OFFSET within the thread local storage for thread PTID. */
+
+static CORE_ADDR
+remote_get_thread_local_address (ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
+{
+ if (remote_protocol_qGetTLSAddr.support != PACKET_DISABLE)
+ {
+ struct remote_state *rs = get_remote_state ();
+ char *buf = alloca (rs->remote_packet_size);
+ char *p = buf;
+ enum packet_result result;
+
+ strcpy (p, "qGetTLSAddr:");
+ p += strlen (p);
+ p += hexnumstr (p, PIDGET (ptid));
+ *p++ = ',';
+ p += hexnumstr (p, offset);
+ *p++ = ',';
+ p += hexnumstr (p, lm);
+ *p++ = '\0';
+
+ putpkt (buf);
+ getpkt (buf, rs->remote_packet_size, 0);
+ result = packet_ok (buf, &remote_protocol_qGetTLSAddr);
+ if (result == PACKET_OK)
+ {
+ ULONGEST result;
+
+ unpack_varlen_hex (buf, &result);
+ return result;
+ }
+ else if (result == PACKET_UNKNOWN)
+ throw_error (TLS_GENERIC_ERROR,
+ _("Remote target doesn't support qGetTLSAddr packet"));
+ else
+ throw_error (TLS_GENERIC_ERROR,
+ _("Remote target failed to process qGetTLSAddr request"));
+ }
+ else
+ throw_error (TLS_GENERIC_ERROR,
+ _("TLS not supported or disabled on this target"));
+ /* Not reached. */
+ return 0;
+}
+
static void
init_remote_ops (void)
{
remote_ops.to_stop = remote_stop;
remote_ops.to_xfer_partial = remote_xfer_partial;
remote_ops.to_rcmd = remote_rcmd;
+ remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
remote_ops.to_stratum = process_stratum;
remote_ops.to_has_all_memory = 1;
remote_ops.to_has_memory = 1;
{
if (current_target.to_async_mask_value == 0)
internal_error (__FILE__, __LINE__,
- "Calling remote_async when async is masked");
+ _("Calling remote_async when async is masked"));
if (callback != NULL)
{
{
/* FIXME: cagney/2002-06-15: This function should iterate over
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);
- show_remote_protocol_qPart_auxv_packet_cmd (args, from_tty, NULL);
+ show_remote_protocol_Z_packet_cmd (gdb_stdout, from_tty, NULL, NULL);
+ show_remote_protocol_P_packet_cmd (gdb_stdout, from_tty, NULL, NULL);
+ show_remote_protocol_p_packet_cmd (gdb_stdout, from_tty, NULL, NULL);
+ show_remote_protocol_qSymbol_packet_cmd (gdb_stdout, from_tty, NULL, NULL);
+ show_remote_protocol_vcont_packet_cmd (gdb_stdout, from_tty, NULL, NULL);
+ show_remote_protocol_binary_download_cmd (gdb_stdout, from_tty, NULL, NULL);
+ show_remote_protocol_qPart_auxv_packet_cmd (gdb_stdout, from_tty, NULL, NULL);
+ show_remote_protocol_qGetTLSAddr_packet_cmd (gdb_stdout, from_tty, NULL, NULL);
}
static void
{
static struct cmd_list_element *remote_set_cmdlist;
static struct cmd_list_element *remote_show_cmdlist;
- struct cmd_list_element *tmpcmd;
/* architecture specific data */
remote_gdbarch_data_handle =
/* set/show remote ... */
- add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, "\
+ add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
Remote protocol specific variables\n\
Configure various remote-protocol specific variables such as\n\
-the packets being used",
+the packets being used"),
&remote_set_cmdlist, "set remote ",
0 /* allow-unknown */, &setlist);
- add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, "\
+ add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
Remote protocol specific variables\n\
Configure various remote-protocol specific variables such as\n\
-the packets being used",
+the packets being used"),
&remote_show_cmdlist, "show remote ",
0 /* allow-unknown */, &showlist);
- add_cmd ("compare-sections", class_obscure, compare_sections_command,
- "Compare section data on target to the exec file.\n\
-Argument is a single section name (default: all loaded sections).",
+ add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
+Compare section data on target to the exec file.\n\
+Argument is a single section name (default: all loaded sections)."),
&cmdlist);
- add_cmd ("packet", class_maintenance, packet_command,
- "Send an arbitrary packet to a remote target.\n\
+ add_cmd ("packet", class_maintenance, packet_command, _("\
+Send an arbitrary packet to a remote target.\n\
maintenance packet TEXT\n\
If GDB is talking to an inferior via the GDB serial protocol, then\n\
this command sends the string TEXT to the inferior, and displays the\n\
response packet. GDB supplies the initial `$' character, and the\n\
-terminating `#' character and checksum.",
+terminating `#' character and checksum."),
&maintenancelist);
- add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, "\
-Set whether to send break if interrupted.", "\
-Show whether to send break if interrupted.", "\
-If set, a break, instead of a cntrl-c, is sent to the remote target.", "\
-Whether to send break if interrupted is %s.",
- NULL, NULL,
+ add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
+Set whether to send break if interrupted."), _("\
+Show whether to send break if interrupted."), _("\
+If set, a break, instead of a cntrl-c, is sent to the remote target."),
+ NULL, NULL, /* FIXME: i18n: Whether to send break if interrupted is %s. */
&setlist, &showlist);
/* Install commands for configuring memory read/write packets. */
- add_cmd ("remotewritesize", no_class, set_memory_write_packet_size,
- "Set the maximum number of bytes per memory write packet (deprecated).\n",
+ add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
+Set the maximum number of bytes per memory write packet (deprecated)."),
&setlist);
- add_cmd ("remotewritesize", no_class, show_memory_write_packet_size,
- "Show the maximum number of bytes per memory write packet (deprecated).\n",
+ add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
+Show the maximum number of bytes per memory write packet (deprecated)."),
&showlist);
add_cmd ("memory-write-packet-size", no_class,
- set_memory_write_packet_size,
- "Set the maximum number of bytes per memory-write packet.\n"
- "Specify the number of bytes in a packet or 0 (zero) for the\n"
- "default packet size. The actual limit is further reduced\n"
- "dependent on the target. Specify ``fixed'' to disable the\n"
- "further restriction and ``limit'' to enable that restriction\n",
+ set_memory_write_packet_size, _("\
+Set the maximum number of bytes per memory-write packet.\n\
+Specify the number of bytes in a packet or 0 (zero) for the\n\
+default packet size. The actual limit is further reduced\n\
+dependent on the target. Specify ``fixed'' to disable the\n\
+further restriction and ``limit'' to enable that restriction."),
&remote_set_cmdlist);
add_cmd ("memory-read-packet-size", no_class,
- set_memory_read_packet_size,
- "Set the maximum number of bytes per memory-read packet.\n"
- "Specify the number of bytes in a packet or 0 (zero) for the\n"
- "default packet size. The actual limit is further reduced\n"
- "dependent on the target. Specify ``fixed'' to disable the\n"
- "further restriction and ``limit'' to enable that restriction\n",
+ set_memory_read_packet_size, _("\
+Set the maximum number of bytes per memory-read packet.\n\
+Specify the number of bytes in a packet or 0 (zero) for the\n\
+default packet size. The actual limit is further reduced\n\
+dependent on the target. Specify ``fixed'' to disable the\n\
+further restriction and ``limit'' to enable that restriction."),
&remote_set_cmdlist);
add_cmd ("memory-write-packet-size", no_class,
show_memory_write_packet_size,
- "Show the maximum number of bytes per memory-write packet.\n",
+ _("Show the maximum number of bytes per memory-write packet."),
&remote_show_cmdlist);
add_cmd ("memory-read-packet-size", no_class,
show_memory_read_packet_size,
- "Show the maximum number of bytes per memory-read packet.\n",
+ _("Show the maximum number of bytes per memory-read packet."),
&remote_show_cmdlist);
add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
- &remote_hw_watchpoint_limit, "\
-Set the maximum number of target hardware watchpoints.", "\
-Show the maximum number of target hardware watchpoints.", "\
-Specify a negative limit for unlimited.", "\
-The maximum number of target hardware watchpoints is %s.",
- NULL, NULL,
+ &remote_hw_watchpoint_limit, _("\
+Set the maximum number of target hardware watchpoints."), _("\
+Show the maximum number of target hardware watchpoints."), _("\
+Specify a negative limit for unlimited."),
+ NULL, NULL, /* FIXME: i18n: The maximum number of target hardware watchpoints is %s. */
&remote_set_cmdlist, &remote_show_cmdlist);
add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
- &remote_hw_breakpoint_limit, "\
-Set the maximum number of target hardware breakpoints.", "\
-Show the maximum number of target hardware breakpoints.", "\
-Specify a negative limit for unlimited.", "\
-The maximum number of target hardware breakpoints is %s.",
- NULL, NULL,
+ &remote_hw_breakpoint_limit, _("\
+Set the maximum number of target hardware breakpoints."), _("\
+Show the maximum number of target hardware breakpoints."), _("\
+Specify a negative limit for unlimited."),
+ NULL, NULL, /* FIXME: i18n: The maximum number of target hardware breakpoints is %s. */
&remote_set_cmdlist, &remote_show_cmdlist);
- deprecated_add_show_from_set
- (add_set_cmd ("remoteaddresssize", class_obscure,
- var_integer, (char *) &remote_address_size,
- "Set the maximum size of the address (in bits) \
-in a memory packet.\n",
- &setlist),
- &showlist);
+ add_setshow_integer_cmd ("remoteaddresssize", class_obscure,
+ &remote_address_size, _("\
+Set the maximum size of the address (in bits) in a memory packet."), _("\
+Show the maximum size of the address (in bits) in a memory packet."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
add_packet_config_cmd (&remote_protocol_binary_download,
"X", "binary-download",
show_remote_protocol_binary_download_cmd,
&remote_set_cmdlist, &remote_show_cmdlist,
1);
-#if 0
- /* XXXX - should ``set remotebinarydownload'' be retained for
- compatibility. */
- deprecated_add_show_from_set
- (add_set_cmd ("remotebinarydownload", no_class,
- var_boolean, (char *) &remote_binary_download,
- "Set binary downloads.\n", &setlist),
- &showlist);
-#endif
add_packet_config_cmd (&remote_protocol_vcont,
"vCont", "verbose-resume",
&remote_set_cmdlist, &remote_show_cmdlist,
0);
+ add_packet_config_cmd (&remote_protocol_qGetTLSAddr,
+ "qGetTLSAddr", "get-thread-local-storage-address",
+ set_remote_protocol_qGetTLSAddr_packet_cmd,
+ show_remote_protocol_qGetTLSAddr_packet_cmd,
+ &remote_set_cmdlist, &remote_show_cmdlist,
+ 0);
+
/* Keep the old ``set remote Z-packet ...'' working. */
add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
- &remote_Z_packet_detect, "\
-Set use of remote protocol `Z' packets", "\
-Show use of remote protocol `Z' packets ", "\
+ &remote_Z_packet_detect, _("\
+Set use of remote protocol `Z' packets"), _("\
+Show use of remote protocol `Z' packets "), _("\
When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
-packets.", "\
-Use of remote protocol `Z' packets is %s",
+packets."),
set_remote_protocol_Z_packet_cmd,
- show_remote_protocol_Z_packet_cmd,
+ show_remote_protocol_Z_packet_cmd, /* FIXME: i18n: Use of remote protocol `Z' packets is %s. */
&remote_set_cmdlist, &remote_show_cmdlist);
/* Eventually initialize fileio. See fileio.c */