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