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