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