Add target_ops argument to to_pid_to_exec_file
[deliverable/binutils-gdb.git] / gdb / serial.c
CommitLineData
c906108c 1/* Generic serial interface routines
4fcf66da 2
ecd75fc8 3 Copyright (C) 1992-2014 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
21#include <ctype.h>
22#include "serial.h"
0e9f083f 23#include <string.h>
c906108c 24#include "gdbcmd.h"
529480d0 25#include "cli/cli-utils.h"
c906108c 26
c2c6d25f 27extern void _initialize_serial (void);
392a587b 28
c378eb4e 29/* Is serial being debugged? */
2acceee2 30
ccce17b0 31static unsigned int global_serial_debug_p;
2acceee2 32
fcd488ca
TT
33typedef const struct serial_ops *serial_ops_p;
34DEF_VEC_P (serial_ops_p);
c906108c 35
fcd488ca
TT
36/* Serial I/O handlers. */
37
38VEC (serial_ops_p) *serial_ops_list = NULL;
c906108c 39
5eb3b062
PA
40/* Pointer to list of scb's. */
41
42static struct serial *scb_base;
43
c906108c 44/* Non-NULL gives filename which contains a recording of the remote session,
c378eb4e 45 suitable for playback by gdbserver. */
c906108c
SS
46
47static char *serial_logfile = NULL;
d9fcf2fb 48static struct ui_file *serial_logfp = NULL;
c906108c 49
fcd488ca 50static const struct serial_ops *serial_interface_lookup (const char *);
3e43a32a
MS
51static void serial_logchar (struct ui_file *stream,
52 int ch_type, int ch, int timeout);
53904c9e
AC
53static const char logbase_hex[] = "hex";
54static const char logbase_octal[] = "octal";
55static const char logbase_ascii[] = "ascii";
40478521 56static const char *const logbase_enums[] =
c5aa993b 57{logbase_hex, logbase_octal, logbase_ascii, NULL};
53904c9e 58static const char *serial_logbase = logbase_ascii;
c906108c 59\f
c5aa993b 60
c906108c
SS
61static int serial_current_type = 0;
62
c378eb4e 63/* Log char CH of type CHTYPE, with TIMEOUT. */
c906108c
SS
64
65/* Define bogus char to represent a BREAK. Should be careful to choose a value
66 that can't be confused with a normal char, or an error code. */
67#define SERIAL_BREAK 1235
68
69static void
d9fcf2fb 70serial_logchar (struct ui_file *stream, int ch_type, int ch, int timeout)
c906108c
SS
71{
72 if (ch_type != serial_current_type)
73 {
2acceee2 74 fprintf_unfiltered (stream, "\n%c ", ch_type);
c906108c
SS
75 serial_current_type = ch_type;
76 }
77
78 if (serial_logbase != logbase_ascii)
2acceee2 79 fputc_unfiltered (' ', stream);
c906108c
SS
80
81 switch (ch)
82 {
83 case SERIAL_TIMEOUT:
2acceee2 84 fprintf_unfiltered (stream, "<Timeout: %d seconds>", timeout);
c906108c
SS
85 return;
86 case SERIAL_ERROR:
2acceee2 87 fprintf_unfiltered (stream, "<Error: %s>", safe_strerror (errno));
c906108c
SS
88 return;
89 case SERIAL_EOF:
2acceee2 90 fputs_unfiltered ("<Eof>", stream);
c906108c
SS
91 return;
92 case SERIAL_BREAK:
2acceee2 93 fputs_unfiltered ("<Break>", stream);
c906108c
SS
94 return;
95 default:
96 if (serial_logbase == logbase_hex)
2acceee2 97 fprintf_unfiltered (stream, "%02x", ch & 0xff);
c906108c 98 else if (serial_logbase == logbase_octal)
2acceee2 99 fprintf_unfiltered (stream, "%03o", ch & 0xff);
c906108c
SS
100 else
101 switch (ch)
102 {
c5aa993b 103 case '\\':
2acceee2 104 fputs_unfiltered ("\\\\", stream);
c5aa993b
JM
105 break;
106 case '\b':
2acceee2 107 fputs_unfiltered ("\\b", stream);
c5aa993b
JM
108 break;
109 case '\f':
2acceee2 110 fputs_unfiltered ("\\f", stream);
c5aa993b
JM
111 break;
112 case '\n':
2acceee2 113 fputs_unfiltered ("\\n", stream);
c5aa993b
JM
114 break;
115 case '\r':
2acceee2 116 fputs_unfiltered ("\\r", stream);
c5aa993b
JM
117 break;
118 case '\t':
2acceee2 119 fputs_unfiltered ("\\t", stream);
c5aa993b
JM
120 break;
121 case '\v':
2acceee2 122 fputs_unfiltered ("\\v", stream);
c5aa993b
JM
123 break;
124 default:
3e43a32a
MS
125 fprintf_unfiltered (stream,
126 isprint (ch) ? "%c" : "\\x%02x", ch & 0xFF);
c5aa993b 127 break;
c906108c
SS
128 }
129 }
130}
131
132void
c2c6d25f 133serial_log_command (const char *cmd)
c906108c
SS
134{
135 if (!serial_logfp)
136 return;
137
138 serial_current_type = 'c';
139
140 fputs_unfiltered ("\nc ", serial_logfp);
141 fputs_unfiltered (cmd, serial_logfp);
142
143 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 144 in case we are getting ready to dump core or something. */
c906108c
SS
145 gdb_flush (serial_logfp);
146}
147
c2c6d25f 148\f
fcd488ca 149static const struct serial_ops *
58f07bae 150serial_interface_lookup (const char *name)
c906108c 151{
fcd488ca
TT
152 const struct serial_ops *ops;
153 int i;
c906108c 154
fcd488ca 155 for (i = 0; VEC_iterate (serial_ops_p, serial_ops_list, i, ops); ++i)
c906108c
SS
156 if (strcmp (name, ops->name) == 0)
157 return ops;
158
159 return NULL;
160}
161
162void
fcd488ca 163serial_add_interface (const struct serial_ops *optable)
c906108c 164{
fcd488ca 165 VEC_safe_push (serial_ops_p, serial_ops_list, optable);
c906108c
SS
166}
167
5eb3b062
PA
168/* Return the open serial device for FD, if found, or NULL if FD is
169 not already opened. */
170
171struct serial *
172serial_for_fd (int fd)
173{
174 struct serial *scb;
175
176 for (scb = scb_base; scb; scb = scb->next)
177 if (scb->fd == fd)
178 return scb;
179
180 return NULL;
181}
182
c378eb4e 183/* Open up a device or a network socket, depending upon the syntax of NAME. */
c906108c 184
819cc324 185struct serial *
c2c6d25f 186serial_open (const char *name)
c906108c 187{
819cc324 188 struct serial *scb;
fcd488ca 189 const struct serial_ops *ops;
c2c6d25f 190 const char *open_name = name;
c906108c 191
50a9e2f1 192 if (strcmp (name, "pc") == 0)
c906108c 193 ops = serial_interface_lookup ("pc");
c906108c
SS
194 else if (strncmp (name, "lpt", 3) == 0)
195 ops = serial_interface_lookup ("parallel");
43e526b9 196 else if (strncmp (name, "|", 1) == 0)
c2c6d25f
JM
197 {
198 ops = serial_interface_lookup ("pipe");
8b9e3a15
VP
199 /* Discard ``|'' and any space before the command itself. */
200 ++open_name;
529480d0 201 open_name = skip_spaces_const (open_name);
c2c6d25f 202 }
2821caf1
JB
203 /* Check for a colon, suggesting an IP address/port pair.
204 Do this *after* checking for all the interesting prefixes. We
205 don't want to constrain the syntax of what can follow them. */
206 else if (strchr (name, ':'))
207 ops = serial_interface_lookup ("tcp");
c906108c
SS
208 else
209 ops = serial_interface_lookup ("hardwire");
210
211 if (!ops)
212 return NULL;
213
70ba0933 214 scb = XNEW (struct serial);
c906108c
SS
215
216 scb->ops = ops;
217
218 scb->bufcnt = 0;
219 scb->bufp = scb->buf;
65cc4390 220 scb->error_fd = -1;
ddefb60f 221 scb->refcnt = 1;
c906108c 222
766062f6 223 /* `...->open (...)' would get expanded by the open(2) syscall macro. */
652aaa24 224 if ((*scb->ops->open) (scb, open_name))
c906108c 225 {
b8c9b27d 226 xfree (scb);
c906108c
SS
227 return NULL;
228 }
229
4fcf66da 230 scb->name = xstrdup (name);
5eb3b062 231 scb->next = scb_base;
2acceee2
JM
232 scb->debug_p = 0;
233 scb->async_state = 0;
c2c6d25f
JM
234 scb->async_handler = NULL;
235 scb->async_context = NULL;
5eb3b062 236 scb_base = scb;
c906108c
SS
237
238 if (serial_logfile != NULL)
239 {
240 serial_logfp = gdb_fopen (serial_logfile, "w");
241 if (serial_logfp == NULL)
242 perror_with_name (serial_logfile);
243 }
244
245 return scb;
246}
247
58f07bae
PA
248/* Open a new serial stream using a file handle, using serial
249 interface ops OPS. */
250
251static struct serial *
fcd488ca 252serial_fdopen_ops (const int fd, const struct serial_ops *ops)
c906108c 253{
819cc324 254 struct serial *scb;
c906108c 255
0ea3f30e 256 if (!ops)
58f07bae
PA
257 {
258 ops = serial_interface_lookup ("terminal");
259 if (!ops)
260 ops = serial_interface_lookup ("hardwire");
261 }
c906108c
SS
262
263 if (!ops)
264 return NULL;
265
fc270c35 266 scb = XCNEW (struct serial);
c906108c
SS
267
268 scb->ops = ops;
269
270 scb->bufcnt = 0;
271 scb->bufp = scb->buf;
58f07bae 272 scb->error_fd = -1;
ddefb60f 273 scb->refcnt = 1;
c906108c
SS
274
275 scb->name = NULL;
5eb3b062 276 scb->next = scb_base;
2acceee2
JM
277 scb->debug_p = 0;
278 scb->async_state = 0;
c2c6d25f
JM
279 scb->async_handler = NULL;
280 scb->async_context = NULL;
5eb3b062 281 scb_base = scb;
c906108c 282
58f07bae
PA
283 if ((ops->fdopen) != NULL)
284 (*ops->fdopen) (scb, fd);
285 else
286 scb->fd = fd;
287
c906108c
SS
288 return scb;
289}
290
58f07bae
PA
291struct serial *
292serial_fdopen (const int fd)
293{
294 return serial_fdopen_ops (fd, NULL);
295}
296
c2c6d25f 297static void
819cc324 298do_serial_close (struct serial *scb, int really_close)
c906108c 299{
819cc324 300 struct serial *tmp_scb;
c906108c 301
c906108c
SS
302 if (serial_logfp)
303 {
304 fputs_unfiltered ("\nEnd of log\n", serial_logfp);
305 serial_current_type = 0;
306
c378eb4e 307 /* XXX - What if serial_logfp == gdb_stdout or gdb_stderr? */
d9fcf2fb 308 ui_file_delete (serial_logfp);
c906108c
SS
309 serial_logfp = NULL;
310 }
311
c378eb4e 312 /* ensure that the FD has been taken out of async mode. */
c2c6d25f
JM
313 if (scb->async_handler != NULL)
314 serial_async (scb, NULL, NULL);
315
c906108c
SS
316 if (really_close)
317 scb->ops->close (scb);
318
319 if (scb->name)
b8c9b27d 320 xfree (scb->name);
c906108c 321
ddefb60f
PA
322 /* For serial_is_open. */
323 scb->bufp = NULL;
324
5eb3b062
PA
325 if (scb_base == scb)
326 scb_base = scb_base->next;
327 else
328 for (tmp_scb = scb_base; tmp_scb; tmp_scb = tmp_scb->next)
329 {
330 if (tmp_scb->next != scb)
331 continue;
332
333 tmp_scb->next = tmp_scb->next->next;
334 break;
335 }
336
ddefb60f 337 serial_unref (scb);
c906108c
SS
338}
339
c2c6d25f 340void
819cc324 341serial_close (struct serial *scb)
c2c6d25f
JM
342{
343 do_serial_close (scb, 1);
344}
345
346void
819cc324 347serial_un_fdopen (struct serial *scb)
c2c6d25f
JM
348{
349 do_serial_close (scb, 0);
350}
351
ddefb60f
PA
352int
353serial_is_open (struct serial *scb)
354{
355 return scb->bufp != NULL;
356}
357
358void
359serial_ref (struct serial *scb)
360{
361 scb->refcnt++;
362}
363
364void
365serial_unref (struct serial *scb)
366{
367 --scb->refcnt;
368 if (scb->refcnt == 0)
369 xfree (scb);
370}
371
c2c6d25f 372int
819cc324 373serial_readchar (struct serial *scb, int timeout)
c2c6d25f
JM
374{
375 int ch;
376
2df3850c 377 /* FIXME: cagney/1999-10-11: Don't enable this check until the ASYNC
c378eb4e 378 code is finished. */
2cd58942 379 if (0 && serial_is_async_p (scb) && timeout < 0)
8e65ff28 380 internal_error (__FILE__, __LINE__,
e2e0b3e5 381 _("serial_readchar: blocking read in async mode"));
2df3850c 382
c2c6d25f
JM
383 ch = scb->ops->readchar (scb, timeout);
384 if (serial_logfp != NULL)
385 {
2acceee2 386 serial_logchar (serial_logfp, 'r', ch, timeout);
c2c6d25f
JM
387
388 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 389 in case we are getting ready to dump core or something. */
c2c6d25f
JM
390 gdb_flush (serial_logfp);
391 }
2cd58942 392 if (serial_debug_p (scb))
2acceee2
JM
393 {
394 fprintf_unfiltered (gdb_stdlog, "[");
395 serial_logchar (gdb_stdlog, 'r', ch, timeout);
396 fprintf_unfiltered (gdb_stdlog, "]");
397 gdb_flush (gdb_stdlog);
398 }
c2c6d25f
JM
399
400 return (ch);
401}
402
403int
c628b528 404serial_write (struct serial *scb, const void *buf, size_t count)
c2c6d25f
JM
405{
406 if (serial_logfp != NULL)
407 {
c628b528
PA
408 const char *str = buf;
409 size_t c;
c2c6d25f 410
c628b528
PA
411 for (c = 0; c < count; c++)
412 serial_logchar (serial_logfp, 'w', str[c] & 0xff, 0);
c2c6d25f
JM
413
414 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 415 in case we are getting ready to dump core or something. */
c2c6d25f
JM
416 gdb_flush (serial_logfp);
417 }
9214d371
DE
418 if (serial_debug_p (scb))
419 {
c628b528
PA
420 const char *str = buf;
421 size_t c;
9214d371 422
c628b528 423 for (c = 0; c < count; c++)
9214d371
DE
424 {
425 fprintf_unfiltered (gdb_stdlog, "[");
426 serial_logchar (gdb_stdlog, 'w', str[count] & 0xff, 0);
427 fprintf_unfiltered (gdb_stdlog, "]");
428 }
429 gdb_flush (gdb_stdlog);
430 }
c2c6d25f 431
c628b528 432 return (scb->ops->write (scb, buf, count));
c2c6d25f
JM
433}
434
435void
819cc324 436serial_printf (struct serial *desc, const char *format,...)
c2c6d25f
JM
437{
438 va_list args;
439 char *buf;
440 va_start (args, format);
441
e623b504 442 buf = xstrvprintf (format, args);
2cd58942 443 serial_write (desc, buf, strlen (buf));
c2c6d25f 444
b8c9b27d 445 xfree (buf);
c2c6d25f
JM
446 va_end (args);
447}
448
449int
819cc324 450serial_drain_output (struct serial *scb)
c2c6d25f
JM
451{
452 return scb->ops->drain_output (scb);
453}
454
455int
819cc324 456serial_flush_output (struct serial *scb)
c2c6d25f
JM
457{
458 return scb->ops->flush_output (scb);
459}
460
461int
819cc324 462serial_flush_input (struct serial *scb)
c2c6d25f
JM
463{
464 return scb->ops->flush_input (scb);
465}
466
467int
819cc324 468serial_send_break (struct serial *scb)
c2c6d25f
JM
469{
470 if (serial_logfp != NULL)
2acceee2 471 serial_logchar (serial_logfp, 'w', SERIAL_BREAK, 0);
c2c6d25f
JM
472
473 return (scb->ops->send_break (scb));
474}
475
476void
819cc324 477serial_raw (struct serial *scb)
c2c6d25f
JM
478{
479 scb->ops->go_raw (scb);
480}
481
482serial_ttystate
819cc324 483serial_get_tty_state (struct serial *scb)
c2c6d25f
JM
484{
485 return scb->ops->get_tty_state (scb);
486}
487
1e182ce8
UW
488serial_ttystate
489serial_copy_tty_state (struct serial *scb, serial_ttystate ttystate)
490{
491 return scb->ops->copy_tty_state (scb, ttystate);
492}
493
c2c6d25f 494int
819cc324 495serial_set_tty_state (struct serial *scb, serial_ttystate ttystate)
c2c6d25f
JM
496{
497 return scb->ops->set_tty_state (scb, ttystate);
498}
499
500void
819cc324 501serial_print_tty_state (struct serial *scb,
c2c6d25f 502 serial_ttystate ttystate,
d9fcf2fb 503 struct ui_file *stream)
c2c6d25f
JM
504{
505 scb->ops->print_tty_state (scb, ttystate, stream);
506}
507
508int
819cc324 509serial_noflush_set_tty_state (struct serial *scb,
c2c6d25f
JM
510 serial_ttystate new_ttystate,
511 serial_ttystate old_ttystate)
512{
513 return scb->ops->noflush_set_tty_state (scb, new_ttystate, old_ttystate);
514}
515
516int
819cc324 517serial_setbaudrate (struct serial *scb, int rate)
c2c6d25f
JM
518{
519 return scb->ops->setbaudrate (scb, rate);
520}
521
522int
819cc324 523serial_setstopbits (struct serial *scb, int num)
c2c6d25f
JM
524{
525 return scb->ops->setstopbits (scb, num);
526}
527
528int
819cc324 529serial_can_async_p (struct serial *scb)
c2c6d25f
JM
530{
531 return (scb->ops->async != NULL);
532}
533
534int
819cc324 535serial_is_async_p (struct serial *scb)
c2c6d25f
JM
536{
537 return (scb->ops->async != NULL) && (scb->async_handler != NULL);
538}
539
540void
819cc324 541serial_async (struct serial *scb,
c2c6d25f
JM
542 serial_event_ftype *handler,
543 void *context)
544{
05ce04a4 545 int changed = ((scb->async_handler == NULL) != (handler == NULL));
433759f7 546
c2c6d25f
JM
547 scb->async_handler = handler;
548 scb->async_context = context;
05ce04a4
VP
549 /* Only change mode if there is a need. */
550 if (changed)
551 scb->ops->async (scb, handler != NULL);
c2c6d25f
JM
552}
553
2acceee2 554void
819cc324 555serial_debug (struct serial *scb, int debug_p)
2acceee2
JM
556{
557 scb->debug_p = debug_p;
558}
559
560int
819cc324 561serial_debug_p (struct serial *scb)
2acceee2
JM
562{
563 return scb->debug_p || global_serial_debug_p;
564}
565
0ea3f30e
DJ
566#ifdef USE_WIN32API
567void
568serial_wait_handle (struct serial *scb, HANDLE *read, HANDLE *except)
569{
570 if (scb->ops->wait_handle)
571 scb->ops->wait_handle (scb, read, except);
572 else
573 {
574 *read = (HANDLE) _get_osfhandle (scb->fd);
575 *except = NULL;
576 }
577}
c3e2b812
DJ
578
579void
580serial_done_wait_handle (struct serial *scb)
581{
582 if (scb->ops->done_wait_handle)
583 scb->ops->done_wait_handle (scb);
584}
0ea3f30e 585#endif
2acceee2 586
58f07bae
PA
587int
588serial_pipe (struct serial *scbs[2])
589{
fcd488ca 590 const struct serial_ops *ops;
58f07bae
PA
591 int fildes[2];
592
593 ops = serial_interface_lookup ("pipe");
594 if (!ops)
595 {
596 errno = ENOSYS;
597 return -1;
598 }
599
600 if (gdb_pipe (fildes) == -1)
601 return -1;
602
603 scbs[0] = serial_fdopen_ops (fildes[0], ops);
604 scbs[1] = serial_fdopen_ops (fildes[1], ops);
605 return 0;
606}
607
e3abfe1d
AC
608/* Serial set/show framework. */
609
610static struct cmd_list_element *serial_set_cmdlist;
611static struct cmd_list_element *serial_show_cmdlist;
612
613static void
614serial_set_cmd (char *args, int from_tty)
615{
3e43a32a
MS
616 printf_unfiltered ("\"set serial\" must be followed "
617 "by the name of a command.\n");
e3abfe1d
AC
618 help_list (serial_set_cmdlist, "set serial ", -1, gdb_stdout);
619}
620
621static void
622serial_show_cmd (char *args, int from_tty)
623{
624 cmd_show_list (serial_show_cmdlist, from_tty, "");
625}
626
0d12017b
JB
627/* Baud rate specified for talking to serial target systems. Default
628 is left as -1, so targets can choose their own defaults. */
629/* FIXME: This means that "show serial baud" and gr_files_info can
630 print -1 or (unsigned int)-1. This is a Bad User Interface. */
631
632int baud_rate = -1;
633
634static void
635serial_baud_show_cmd (struct ui_file *file, int from_tty,
636 struct cmd_list_element *c, const char *value)
637{
638 fprintf_filtered (file, _("Baud rate for remote serial I/O is %s.\n"),
639 value);
640}
e3abfe1d 641
c906108c 642void
c2c6d25f 643_initialize_serial (void)
c906108c
SS
644{
645#if 0
1bedd215
AC
646 add_com ("connect", class_obscure, connect_command, _("\
647Connect the terminal directly up to the command monitor.\n\
648Use <CR>~. or <CR>~^D to break out."));
c906108c
SS
649#endif /* 0 */
650
1bedd215
AC
651 add_prefix_cmd ("serial", class_maintenance, serial_set_cmd, _("\
652Set default serial/parallel port configuration."),
e3abfe1d
AC
653 &serial_set_cmdlist, "set serial ",
654 0/*allow-unknown*/,
655 &setlist);
656
1bedd215
AC
657 add_prefix_cmd ("serial", class_maintenance, serial_show_cmd, _("\
658Show default serial/parallel port configuration."),
e3abfe1d
AC
659 &serial_show_cmdlist, "show serial ",
660 0/*allow-unknown*/,
661 &showlist);
662
0d12017b
JB
663 /* If target is open when baud changes, it doesn't take effect until
664 the next open (I think, not sure). */
665 add_setshow_zinteger_cmd ("baud", no_class, &baud_rate, _("\
666Set baud rate for remote serial I/O."), _("\
667Show baud rate for remote serial I/O."), _("\
668This value is used to set the speed of the serial port when debugging\n\
669using remote targets."),
670 NULL,
671 serial_baud_show_cmd,
672 &serial_set_cmdlist, &serial_show_cmdlist);
673
674 /* The commands "set/show serial baud" used to have a different name.
675 Add aliases to those names to facilitate the transition, and mark
676 them as deprecated, in order to make users aware of the fact that
677 the command names have been changed. */
678 {
679 const char *cmd_name;
680 struct cmd_list_element *cmd;
681
682 /* FIXME: There is a limitation in the deprecation mechanism,
683 and the warning ends up not being displayed for prefixed
684 aliases. So use a real command instead of an alias. */
685 add_setshow_zinteger_cmd ("remotebaud", class_alias, &baud_rate, _("\
686Set baud rate for remote serial I/O."), _("\
687Show baud rate for remote serial I/O."), _("\
688This value is used to set the speed of the serial port when debugging\n\
689using remote targets."),
690 NULL,
691 serial_baud_show_cmd,
692 &setlist, &showlist);
693 cmd_name = "remotebaud";
694 cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
695 deprecate_cmd (cmd, "set serial baud");
696 cmd_name
697 = "remotebaud"; /* needed because lookup_cmd updates the pointer */
698 cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
699 deprecate_cmd (cmd, "show serial baud");
700 }
701
f397e303
AC
702 add_setshow_filename_cmd ("remotelogfile", no_class, &serial_logfile, _("\
703Set filename for remote session recording."), _("\
704Show filename for remote session recording."), _("\
c906108c 705This file is used to record the remote session for future playback\n\
f397e303
AC
706by gdbserver."),
707 NULL,
708 NULL, /* FIXME: i18n: */
709 &setlist, &showlist);
c906108c 710
7ab04401
AC
711 add_setshow_enum_cmd ("remotelogbase", no_class, logbase_enums,
712 &serial_logbase, _("\
713Set numerical base for remote session logging"), _("\
714Show numerical base for remote session logging"), NULL,
715 NULL,
716 NULL, /* FIXME: i18n: */
717 &setlist, &showlist);
2acceee2 718
ccce17b0
YQ
719 add_setshow_zuinteger_cmd ("serial", class_maintenance,
720 &global_serial_debug_p, _("\
85c07804
AC
721Set serial debugging."), _("\
722Show serial debugging."), _("\
723When non-zero, serial port debugging is enabled."),
ccce17b0
YQ
724 NULL,
725 NULL, /* FIXME: i18n: */
726 &setdebuglist, &showdebuglist);
c906108c 727}
This page took 2.389464 seconds and 4 git commands to generate.