xref: /openbsd-src/gnu/usr.bin/binutils/gdb/remote-utils.h (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1e93f7393Sniklas /* Generic support for remote debugging interfaces.
2e93f7393Sniklas 
3*b725ae77Skettenis    Copyright 1993, 1994, 2000, 2001 Free Software Foundation, Inc.
4e93f7393Sniklas 
5e93f7393Sniklas    This file is part of GDB.
6e93f7393Sniklas 
7e93f7393Sniklas    This program is free software; you can redistribute it and/or modify
8e93f7393Sniklas    it under the terms of the GNU General Public License as published by
9e93f7393Sniklas    the Free Software Foundation; either version 2 of the License, or
10e93f7393Sniklas    (at your option) any later version.
11e93f7393Sniklas 
12e93f7393Sniklas    This program is distributed in the hope that it will be useful,
13e93f7393Sniklas    but WITHOUT ANY WARRANTY; without even the implied warranty of
14e93f7393Sniklas    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15e93f7393Sniklas    GNU General Public License for more details.
16e93f7393Sniklas 
17e93f7393Sniklas    You should have received a copy of the GNU General Public License
18e93f7393Sniklas    along with this program; if not, write to the Free Software
19*b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
20*b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
21e93f7393Sniklas 
22e93f7393Sniklas #ifndef REMOTE_UTILS_H
23e93f7393Sniklas #define REMOTE_UTILS_H
24e93f7393Sniklas 
25*b725ae77Skettenis struct target_ops;
26*b725ae77Skettenis 
27e93f7393Sniklas #include "target.h"
28*b725ae77Skettenis struct serial;
29e93f7393Sniklas 
30e93f7393Sniklas /* Stuff that should be shared (and handled consistently) among the various
31e93f7393Sniklas    remote targets.  */
32e93f7393Sniklas 
33*b725ae77Skettenis struct _sr_settings
34*b725ae77Skettenis   {
35e93f7393Sniklas     unsigned int timeout;
36e93f7393Sniklas 
37e93f7393Sniklas     int retries;
38e93f7393Sniklas 
39e93f7393Sniklas     char *device;
40*b725ae77Skettenis     struct serial *desc;
41e93f7393Sniklas 
42e93f7393Sniklas   };
43e93f7393Sniklas 
44e93f7393Sniklas extern struct _sr_settings sr_settings;
45e93f7393Sniklas 
46e93f7393Sniklas /* get and set debug value. */
47e93f7393Sniklas #define sr_get_debug()			(remote_debug)
48e93f7393Sniklas #define sr_set_debug(newval)		(remote_debug = (newval))
49e93f7393Sniklas 
50e93f7393Sniklas /* get and set timeout. */
51e93f7393Sniklas #define sr_get_timeout()		(sr_settings.timeout)
52e93f7393Sniklas #define sr_set_timeout(newval)		(sr_settings.timeout = (newval))
53e93f7393Sniklas 
54e93f7393Sniklas /* get and set device. */
55e93f7393Sniklas #define sr_get_device()			(sr_settings.device)
56e93f7393Sniklas #define sr_set_device(newval) \
57e93f7393Sniklas { \
58*b725ae77Skettenis     if (sr_settings.device) xfree (sr_settings.device); \
59e93f7393Sniklas     sr_settings.device = (newval); \
60e93f7393Sniklas }
61e93f7393Sniklas 
62e93f7393Sniklas /* get and set descriptor value. */
63e93f7393Sniklas #define sr_get_desc()			(sr_settings.desc)
64e93f7393Sniklas #define sr_set_desc(newval)		(sr_settings.desc = (newval))
65e93f7393Sniklas 
66e93f7393Sniklas /* get and set retries. */
67e93f7393Sniklas #define sr_get_retries()		(sr_settings.retries)
68e93f7393Sniklas #define sr_set_retries(newval)		(sr_settings.retries = (newval))
69e93f7393Sniklas 
70e93f7393Sniklas #define sr_is_open()			(sr_settings.desc != NULL)
71e93f7393Sniklas 
72e93f7393Sniklas #define sr_check_open() 	{ if (!sr_is_open()) \
73e93f7393Sniklas 				    error ("Remote device not open"); }
74e93f7393Sniklas 
75*b725ae77Skettenis struct gr_settings
76*b725ae77Skettenis   {
77e93f7393Sniklas     char *prompt;
78e93f7393Sniklas     struct target_ops *ops;
79*b725ae77Skettenis     int (*clear_all_breakpoints) (void);
80*b725ae77Skettenis     void (*checkin) (void);
81e93f7393Sniklas   };
82e93f7393Sniklas 
83e93f7393Sniklas extern struct gr_settings *gr_settings;
84e93f7393Sniklas 
85e93f7393Sniklas /* get and set prompt. */
86e93f7393Sniklas #define gr_get_prompt()			(gr_settings->prompt)
87e93f7393Sniklas #define gr_set_prompt(newval)		(gr_settings->prompt = (newval))
88e93f7393Sniklas 
89e93f7393Sniklas /* get and set ops. */
90e93f7393Sniklas #define gr_get_ops()			(gr_settings->ops)
91e93f7393Sniklas #define gr_set_ops(newval)		(gr_settings->ops = (newval))
92e93f7393Sniklas 
93e93f7393Sniklas #define gr_clear_all_breakpoints()	((gr_settings->clear_all_breakpoints)())
94e93f7393Sniklas #define gr_checkin()			((gr_settings->checkin)())
95e93f7393Sniklas 
96e93f7393Sniklas /* Keep discarding input until we see the prompt.
97e93f7393Sniklas 
98e93f7393Sniklas    The convention for dealing with the prompt is that you
99e93f7393Sniklas    o give your command
100e93f7393Sniklas    o *then* wait for the prompt.
101e93f7393Sniklas 
102e93f7393Sniklas    Thus the last thing that a procedure does with the serial line
103e93f7393Sniklas    will be an gr_expect_prompt().  Exception:  resume does not
104e93f7393Sniklas    wait for the prompt, because the terminal is being handed over
105e93f7393Sniklas    to the inferior.  However, the next thing which happens after that
106e93f7393Sniklas    is a bug_wait which does wait for the prompt.
107e93f7393Sniklas    Note that this includes abnormal exit, e.g. error().  This is
108e93f7393Sniklas    necessary to prevent getting into states from which we can't
109e93f7393Sniklas    recover.  */
110e93f7393Sniklas 
111e93f7393Sniklas #define gr_expect_prompt()	sr_expect(gr_get_prompt())
112e93f7393Sniklas 
113*b725ae77Skettenis int gr_multi_scan (char *list[], int passthrough);
114*b725ae77Skettenis int sr_get_hex_digit (int ignore_space);
115*b725ae77Skettenis int sr_pollchar (void);
116*b725ae77Skettenis int sr_readchar (void);
117*b725ae77Skettenis int sr_timed_read (char *buf, int n);
118*b725ae77Skettenis long sr_get_hex_word (void);
119*b725ae77Skettenis void gr_close (int quitting);
120*b725ae77Skettenis void gr_create_inferior (char *execfile, char *args, char **env);
121*b725ae77Skettenis void gr_detach (char *args, int from_tty);
122*b725ae77Skettenis void gr_files_info (struct target_ops *ops);
123*b725ae77Skettenis void gr_generic_checkin (void);
124*b725ae77Skettenis void gr_kill (void);
125*b725ae77Skettenis void gr_mourn (void);
126*b725ae77Skettenis void gr_prepare_to_store (void);
127*b725ae77Skettenis void sr_expect (char *string);
128*b725ae77Skettenis void sr_get_hex_byte (char *byt);
129*b725ae77Skettenis void sr_scan_args (char *proto, char *args);
130*b725ae77Skettenis void sr_write (char *a, int l);
131*b725ae77Skettenis void sr_write_cr (char *s);
132e93f7393Sniklas 
133*b725ae77Skettenis void gr_open (char *args, int from_tty, struct gr_settings *gr_settings);
134*b725ae77Skettenis void gr_load_image (char *, int from_tty);
135e93f7393Sniklas #endif /* REMOTE_UTILS_H */
136