[ARC] Add SYNTAX_NOP and SYNTAX_1OP for extension instructions
[deliverable/binutils-gdb.git] / gdb / serial.c
CommitLineData
c906108c 1/* Generic serial interface routines
4fcf66da 2
618f726f 3 Copyright (C) 1992-2016 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
50a9e2f1 212 if (strcmp (name, "pc") == 0)
c906108c 213 ops = serial_interface_lookup ("pc");
61012eef 214 else if (startswith (name, "lpt"))
c906108c 215 ops = serial_interface_lookup ("parallel");
61012eef 216 else if (startswith (name, "|"))
c2c6d25f
JM
217 {
218 ops = serial_interface_lookup ("pipe");
8b9e3a15
VP
219 /* Discard ``|'' and any space before the command itself. */
220 ++open_name;
529480d0 221 open_name = skip_spaces_const (open_name);
c2c6d25f 222 }
2821caf1
JB
223 /* Check for a colon, suggesting an IP address/port pair.
224 Do this *after* checking for all the interesting prefixes. We
225 don't want to constrain the syntax of what can follow them. */
226 else if (strchr (name, ':'))
227 ops = serial_interface_lookup ("tcp");
c906108c
SS
228 else
229 ops = serial_interface_lookup ("hardwire");
230
231 if (!ops)
232 return NULL;
233
00340e1b
PA
234 return serial_open_ops_1 (ops, open_name);
235}
c906108c 236
00340e1b 237/* Open up a serial for OPS, passing OPEN_NAME to the open method. */
c906108c 238
00340e1b
PA
239static struct serial *
240serial_open_ops_1 (const struct serial_ops *ops, const char *open_name)
241{
242 struct serial *scb;
243
244 scb = new_serial (ops);
c906108c 245
766062f6 246 /* `...->open (...)' would get expanded by the open(2) syscall macro. */
652aaa24 247 if ((*scb->ops->open) (scb, open_name))
c906108c 248 {
b8c9b27d 249 xfree (scb);
c906108c
SS
250 return NULL;
251 }
252
5eb3b062 253 scb->next = scb_base;
5eb3b062 254 scb_base = scb;
c906108c
SS
255
256 if (serial_logfile != NULL)
257 {
258 serial_logfp = gdb_fopen (serial_logfile, "w");
259 if (serial_logfp == NULL)
260 perror_with_name (serial_logfile);
261 }
262
263 return scb;
264}
265
00340e1b
PA
266/* See serial.h. */
267
268struct serial *
269serial_open_ops (const struct serial_ops *ops)
270{
271 return serial_open_ops_1 (ops, NULL);
272}
273
58f07bae
PA
274/* Open a new serial stream using a file handle, using serial
275 interface ops OPS. */
276
277static struct serial *
fcd488ca 278serial_fdopen_ops (const int fd, const struct serial_ops *ops)
c906108c 279{
819cc324 280 struct serial *scb;
c906108c 281
0ea3f30e 282 if (!ops)
58f07bae
PA
283 {
284 ops = serial_interface_lookup ("terminal");
285 if (!ops)
286 ops = serial_interface_lookup ("hardwire");
287 }
c906108c
SS
288
289 if (!ops)
290 return NULL;
291
00340e1b 292 scb = new_serial (ops);
c906108c 293
5eb3b062 294 scb->next = scb_base;
5eb3b062 295 scb_base = scb;
c906108c 296
58f07bae
PA
297 if ((ops->fdopen) != NULL)
298 (*ops->fdopen) (scb, fd);
299 else
300 scb->fd = fd;
301
c906108c
SS
302 return scb;
303}
304
58f07bae
PA
305struct serial *
306serial_fdopen (const int fd)
307{
308 return serial_fdopen_ops (fd, NULL);
309}
310
c2c6d25f 311static void
819cc324 312do_serial_close (struct serial *scb, int really_close)
c906108c 313{
819cc324 314 struct serial *tmp_scb;
c906108c 315
c906108c
SS
316 if (serial_logfp)
317 {
318 fputs_unfiltered ("\nEnd of log\n", serial_logfp);
319 serial_current_type = 0;
320
c378eb4e 321 /* XXX - What if serial_logfp == gdb_stdout or gdb_stderr? */
d9fcf2fb 322 ui_file_delete (serial_logfp);
c906108c
SS
323 serial_logfp = NULL;
324 }
325
c378eb4e 326 /* ensure that the FD has been taken out of async mode. */
c2c6d25f
JM
327 if (scb->async_handler != NULL)
328 serial_async (scb, NULL, NULL);
329
c906108c
SS
330 if (really_close)
331 scb->ops->close (scb);
332
ddefb60f
PA
333 /* For serial_is_open. */
334 scb->bufp = NULL;
335
5eb3b062
PA
336 if (scb_base == scb)
337 scb_base = scb_base->next;
338 else
339 for (tmp_scb = scb_base; tmp_scb; tmp_scb = tmp_scb->next)
340 {
341 if (tmp_scb->next != scb)
342 continue;
343
344 tmp_scb->next = tmp_scb->next->next;
345 break;
346 }
347
ddefb60f 348 serial_unref (scb);
c906108c
SS
349}
350
c2c6d25f 351void
819cc324 352serial_close (struct serial *scb)
c2c6d25f
JM
353{
354 do_serial_close (scb, 1);
355}
356
357void
819cc324 358serial_un_fdopen (struct serial *scb)
c2c6d25f
JM
359{
360 do_serial_close (scb, 0);
361}
362
ddefb60f
PA
363int
364serial_is_open (struct serial *scb)
365{
366 return scb->bufp != NULL;
367}
368
369void
370serial_ref (struct serial *scb)
371{
372 scb->refcnt++;
373}
374
375void
376serial_unref (struct serial *scb)
377{
378 --scb->refcnt;
379 if (scb->refcnt == 0)
380 xfree (scb);
381}
382
c2c6d25f 383int
819cc324 384serial_readchar (struct serial *scb, int timeout)
c2c6d25f
JM
385{
386 int ch;
387
2df3850c 388 /* FIXME: cagney/1999-10-11: Don't enable this check until the ASYNC
c378eb4e 389 code is finished. */
2cd58942 390 if (0 && serial_is_async_p (scb) && timeout < 0)
8e65ff28 391 internal_error (__FILE__, __LINE__,
e2e0b3e5 392 _("serial_readchar: blocking read in async mode"));
2df3850c 393
c2c6d25f
JM
394 ch = scb->ops->readchar (scb, timeout);
395 if (serial_logfp != NULL)
396 {
2acceee2 397 serial_logchar (serial_logfp, 'r', ch, timeout);
c2c6d25f
JM
398
399 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 400 in case we are getting ready to dump core or something. */
c2c6d25f
JM
401 gdb_flush (serial_logfp);
402 }
2cd58942 403 if (serial_debug_p (scb))
2acceee2
JM
404 {
405 fprintf_unfiltered (gdb_stdlog, "[");
406 serial_logchar (gdb_stdlog, 'r', ch, timeout);
407 fprintf_unfiltered (gdb_stdlog, "]");
408 gdb_flush (gdb_stdlog);
409 }
c2c6d25f
JM
410
411 return (ch);
412}
413
414int
c628b528 415serial_write (struct serial *scb, const void *buf, size_t count)
c2c6d25f
JM
416{
417 if (serial_logfp != NULL)
418 {
19ba03f4 419 const char *str = (const char *) buf;
c628b528 420 size_t c;
c2c6d25f 421
c628b528
PA
422 for (c = 0; c < count; c++)
423 serial_logchar (serial_logfp, 'w', str[c] & 0xff, 0);
c2c6d25f
JM
424
425 /* Make sure that the log file is as up-to-date as possible,
c378eb4e 426 in case we are getting ready to dump core or something. */
c2c6d25f
JM
427 gdb_flush (serial_logfp);
428 }
9214d371
DE
429 if (serial_debug_p (scb))
430 {
19ba03f4 431 const char *str = (const char *) buf;
c628b528 432 size_t c;
9214d371 433
c628b528 434 for (c = 0; c < count; c++)
9214d371
DE
435 {
436 fprintf_unfiltered (gdb_stdlog, "[");
0e58ee40 437 serial_logchar (gdb_stdlog, 'w', str[c] & 0xff, 0);
9214d371
DE
438 fprintf_unfiltered (gdb_stdlog, "]");
439 }
440 gdb_flush (gdb_stdlog);
441 }
c2c6d25f 442
c628b528 443 return (scb->ops->write (scb, buf, count));
c2c6d25f
JM
444}
445
446void
819cc324 447serial_printf (struct serial *desc, const char *format,...)
c2c6d25f
JM
448{
449 va_list args;
450 char *buf;
451 va_start (args, format);
452
e623b504 453 buf = xstrvprintf (format, args);
2cd58942 454 serial_write (desc, buf, strlen (buf));
c2c6d25f 455
b8c9b27d 456 xfree (buf);
c2c6d25f
JM
457 va_end (args);
458}
459
460int
819cc324 461serial_drain_output (struct serial *scb)
c2c6d25f
JM
462{
463 return scb->ops->drain_output (scb);
464}
465
466int
819cc324 467serial_flush_output (struct serial *scb)
c2c6d25f
JM
468{
469 return scb->ops->flush_output (scb);
470}
471
472int
819cc324 473serial_flush_input (struct serial *scb)
c2c6d25f
JM
474{
475 return scb->ops->flush_input (scb);
476}
477
478int
819cc324 479serial_send_break (struct serial *scb)
c2c6d25f
JM
480{
481 if (serial_logfp != NULL)
2acceee2 482 serial_logchar (serial_logfp, 'w', SERIAL_BREAK, 0);
c2c6d25f
JM
483
484 return (scb->ops->send_break (scb));
485}
486
487void
819cc324 488serial_raw (struct serial *scb)
c2c6d25f
JM
489{
490 scb->ops->go_raw (scb);
491}
492
493serial_ttystate
819cc324 494serial_get_tty_state (struct serial *scb)
c2c6d25f
JM
495{
496 return scb->ops->get_tty_state (scb);
497}
498
1e182ce8
UW
499serial_ttystate
500serial_copy_tty_state (struct serial *scb, serial_ttystate ttystate)
501{
502 return scb->ops->copy_tty_state (scb, ttystate);
503}
504
c2c6d25f 505int
819cc324 506serial_set_tty_state (struct serial *scb, serial_ttystate ttystate)
c2c6d25f
JM
507{
508 return scb->ops->set_tty_state (scb, ttystate);
509}
510
511void
819cc324 512serial_print_tty_state (struct serial *scb,
c2c6d25f 513 serial_ttystate ttystate,
d9fcf2fb 514 struct ui_file *stream)
c2c6d25f
JM
515{
516 scb->ops->print_tty_state (scb, ttystate, stream);
517}
518
519int
819cc324 520serial_noflush_set_tty_state (struct serial *scb,
c2c6d25f
JM
521 serial_ttystate new_ttystate,
522 serial_ttystate old_ttystate)
523{
524 return scb->ops->noflush_set_tty_state (scb, new_ttystate, old_ttystate);
525}
526
527int
819cc324 528serial_setbaudrate (struct serial *scb, int rate)
c2c6d25f
JM
529{
530 return scb->ops->setbaudrate (scb, rate);
531}
532
533int
819cc324 534serial_setstopbits (struct serial *scb, int num)
c2c6d25f
JM
535{
536 return scb->ops->setstopbits (scb, num);
537}
538
236af5e3
YG
539/* See serial.h. */
540
541int
542serial_setparity (struct serial *scb, int parity)
543{
544 return scb->ops->setparity (scb, parity);
545}
546
c2c6d25f 547int
819cc324 548serial_can_async_p (struct serial *scb)
c2c6d25f
JM
549{
550 return (scb->ops->async != NULL);
551}
552
553int
819cc324 554serial_is_async_p (struct serial *scb)
c2c6d25f
JM
555{
556 return (scb->ops->async != NULL) && (scb->async_handler != NULL);
557}
558
559void
819cc324 560serial_async (struct serial *scb,
c2c6d25f
JM
561 serial_event_ftype *handler,
562 void *context)
563{
05ce04a4 564 int changed = ((scb->async_handler == NULL) != (handler == NULL));
433759f7 565
c2c6d25f
JM
566 scb->async_handler = handler;
567 scb->async_context = context;
05ce04a4
VP
568 /* Only change mode if there is a need. */
569 if (changed)
570 scb->ops->async (scb, handler != NULL);
c2c6d25f
JM
571}
572
2acceee2 573void
819cc324 574serial_debug (struct serial *scb, int debug_p)
2acceee2
JM
575{
576 scb->debug_p = debug_p;
577}
578
579int
819cc324 580serial_debug_p (struct serial *scb)
2acceee2
JM
581{
582 return scb->debug_p || global_serial_debug_p;
583}
584
0ea3f30e
DJ
585#ifdef USE_WIN32API
586void
587serial_wait_handle (struct serial *scb, HANDLE *read, HANDLE *except)
588{
589 if (scb->ops->wait_handle)
590 scb->ops->wait_handle (scb, read, except);
591 else
592 {
593 *read = (HANDLE) _get_osfhandle (scb->fd);
594 *except = NULL;
595 }
596}
c3e2b812
DJ
597
598void
599serial_done_wait_handle (struct serial *scb)
600{
601 if (scb->ops->done_wait_handle)
602 scb->ops->done_wait_handle (scb);
603}
0ea3f30e 604#endif
2acceee2 605
58f07bae
PA
606int
607serial_pipe (struct serial *scbs[2])
608{
fcd488ca 609 const struct serial_ops *ops;
58f07bae
PA
610 int fildes[2];
611
612 ops = serial_interface_lookup ("pipe");
613 if (!ops)
614 {
615 errno = ENOSYS;
616 return -1;
617 }
618
619 if (gdb_pipe (fildes) == -1)
620 return -1;
621
622 scbs[0] = serial_fdopen_ops (fildes[0], ops);
623 scbs[1] = serial_fdopen_ops (fildes[1], ops);
624 return 0;
625}
626
e3abfe1d
AC
627/* Serial set/show framework. */
628
629static struct cmd_list_element *serial_set_cmdlist;
630static struct cmd_list_element *serial_show_cmdlist;
631
632static void
633serial_set_cmd (char *args, int from_tty)
634{
3e43a32a
MS
635 printf_unfiltered ("\"set serial\" must be followed "
636 "by the name of a command.\n");
635c7e8a 637 help_list (serial_set_cmdlist, "set serial ", all_commands, gdb_stdout);
e3abfe1d
AC
638}
639
640static void
641serial_show_cmd (char *args, int from_tty)
642{
643 cmd_show_list (serial_show_cmdlist, from_tty, "");
644}
645
0d12017b
JB
646/* Baud rate specified for talking to serial target systems. Default
647 is left as -1, so targets can choose their own defaults. */
648/* FIXME: This means that "show serial baud" and gr_files_info can
649 print -1 or (unsigned int)-1. This is a Bad User Interface. */
650
651int baud_rate = -1;
652
653static void
654serial_baud_show_cmd (struct ui_file *file, int from_tty,
655 struct cmd_list_element *c, const char *value)
656{
657 fprintf_filtered (file, _("Baud rate for remote serial I/O is %s.\n"),
658 value);
659}
e3abfe1d 660
236af5e3
YG
661/* Parity for serial port. */
662
663int serial_parity = GDBPARITY_NONE;
664
665static const char parity_none[] = "none";
666static const char parity_odd[] = "odd";
667static const char parity_even[] = "even";
668static const char *const parity_enums[] =
669 {parity_none, parity_odd, parity_even, NULL};
670static const char *parity = parity_none;
671
672/* Set serial_parity value. */
673
674static void
675set_parity (char *ignore_args, int from_tty, struct cmd_list_element *c)
676{
677 if (parity == parity_odd)
678 serial_parity = GDBPARITY_ODD;
679 else if (parity == parity_even)
680 serial_parity = GDBPARITY_EVEN;
681 else
682 serial_parity = GDBPARITY_NONE;
683}
684
c906108c 685void
c2c6d25f 686_initialize_serial (void)
c906108c
SS
687{
688#if 0
1bedd215
AC
689 add_com ("connect", class_obscure, connect_command, _("\
690Connect the terminal directly up to the command monitor.\n\
691Use <CR>~. or <CR>~^D to break out."));
c906108c
SS
692#endif /* 0 */
693
1bedd215
AC
694 add_prefix_cmd ("serial", class_maintenance, serial_set_cmd, _("\
695Set default serial/parallel port configuration."),
e3abfe1d
AC
696 &serial_set_cmdlist, "set serial ",
697 0/*allow-unknown*/,
698 &setlist);
699
1bedd215
AC
700 add_prefix_cmd ("serial", class_maintenance, serial_show_cmd, _("\
701Show default serial/parallel port configuration."),
e3abfe1d
AC
702 &serial_show_cmdlist, "show serial ",
703 0/*allow-unknown*/,
704 &showlist);
705
0d12017b
JB
706 /* If target is open when baud changes, it doesn't take effect until
707 the next open (I think, not sure). */
708 add_setshow_zinteger_cmd ("baud", no_class, &baud_rate, _("\
709Set baud rate for remote serial I/O."), _("\
710Show baud rate for remote serial I/O."), _("\
711This value is used to set the speed of the serial port when debugging\n\
712using remote targets."),
713 NULL,
714 serial_baud_show_cmd,
715 &serial_set_cmdlist, &serial_show_cmdlist);
716
236af5e3
YG
717 add_setshow_enum_cmd ("parity", no_class, parity_enums,
718 &parity, _("\
719Set parity for remote serial I/O"), _("\
720Show parity for remote serial I/O"), NULL,
721 set_parity,
722 NULL, /* FIXME: i18n: */
723 &serial_set_cmdlist, &serial_show_cmdlist);
724
f397e303
AC
725 add_setshow_filename_cmd ("remotelogfile", no_class, &serial_logfile, _("\
726Set filename for remote session recording."), _("\
727Show filename for remote session recording."), _("\
c906108c 728This file is used to record the remote session for future playback\n\
f397e303
AC
729by gdbserver."),
730 NULL,
731 NULL, /* FIXME: i18n: */
732 &setlist, &showlist);
c906108c 733
7ab04401
AC
734 add_setshow_enum_cmd ("remotelogbase", no_class, logbase_enums,
735 &serial_logbase, _("\
736Set numerical base for remote session logging"), _("\
737Show numerical base for remote session logging"), NULL,
738 NULL,
739 NULL, /* FIXME: i18n: */
740 &setlist, &showlist);
2acceee2 741
ccce17b0
YQ
742 add_setshow_zuinteger_cmd ("serial", class_maintenance,
743 &global_serial_debug_p, _("\
85c07804
AC
744Set serial debugging."), _("\
745Show serial debugging."), _("\
746When non-zero, serial port debugging is enabled."),
ccce17b0
YQ
747 NULL,
748 NULL, /* FIXME: i18n: */
749 &setdebuglist, &showdebuglist);
c906108c 750}
This page took 1.565391 seconds and 4 git commands to generate.