GDB (xrefs)
/tmp/gdb-8.1/gdb/top.h
Go to the documentation of this file.
1 /* Top level stuff for GDB, the GNU debugger.
2 
3  Copyright (C) 1986-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
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
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
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.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 #ifndef TOP_H
21 #define TOP_H
22 
23 #include "buffer.h"
24 #include "event-loop.h"
25 #include "value.h"
26 
27 struct tl_interp_info;
28 
29 /* Prompt state. */
30 
32 {
33  /* The command line is blocked simulating synchronous execution.
34  This is used to implement the foreground execution commands
35  ('run', 'continue', etc.). We won't display the prompt and
36  accept further commands until the execution is actually over. */
38 
39  /* The command finished; display the prompt before returning back to
40  the top level. */
42 
43  /* We've displayed the prompt already, ready for input. */
45 };
46 
47 /* All about a user interface instance. Each user interface has its
48  own I/O files/streams, readline state, its own top level
49  interpreter (for the main UI, this is the interpreter specified
50  with -i on the command line) and secondary interpreters (for
51  interpreter-exec ...), etc. There's always one UI associated with
52  stdin/stdout/stderr, but the user can create secondary UIs, for
53  example, to create a separate MI channel on its own stdio
54  streams. */
55 
56 struct ui
57 {
58  /* Create a new UI. */
59  ui (FILE *instream, FILE *outstream, FILE *errstream);
60  ~ui ();
61 
63 
64  /* Pointer to next in singly-linked list. */
65  struct ui *next;
66 
67  /* Convenient handle (UI number). Unique across all UIs. */
68  int num;
69 
70  /* The UI's command line buffer. This is to used to accumulate
71  input until we have a whole command line. */
73 
74  /* The callback used by the event loop whenever an event is detected
75  on the UI's input file descriptor. This function incrementally
76  builds a buffer where it accumulates the line read up to the
77  point of invocation. In the special case in which the character
78  read is newline, the function invokes the INPUT_HANDLER callback
79  (see below). */
81 
82  /* The function to invoke when a complete line of input is ready for
83  processing. */
84  void (*input_handler) (char *);
85 
86  /* True if this UI is using the readline library for command
87  editing; false if using GDB's own simple readline emulation, with
88  no editing support. */
90 
91  /* Each UI has its own independent set of interpreters. */
93 
94  /* True if the UI is in async mode, false if in sync mode. If in
95  sync mode, a synchronous execution command (e.g, "next") does not
96  return until the command is finished. If in async mode, then
97  running a synchronous command returns right after resuming the
98  target. Waiting for the command's completion is later done on
99  the top event loop. For the main UI, this starts out disabled,
100  until all the explicit command line arguments (e.g., `gdb -ex
101  "start" -ex "next"') are processed. */
102  int async;
103 
104  /* The number of nested readline secondary prompts that are
105  currently active. */
107 
108  /* The UI's stdin. Set to stdin for the main UI. */
110 
111  /* stdio stream that command input is being read from. Set to stdin
112  normally. Set by source_command to the file we are sourcing.
113  Set to NULL if we are executing a user-defined command or
114  interacting via a GUI. */
115  FILE *instream;
116  /* Standard output stream. */
117  FILE *outstream;
118  /* Standard error stream. */
119  FILE *errstream;
120 
121  /* The file descriptor for the input stream, so that we can register
122  it with the event loop. */
123  int input_fd;
124 
125  /* Whether ISATTY returns true on input_fd. Cached here because
126  quit_force needs to know this _after_ input_fd might be
127  closed. */
129 
130  /* See enum prompt_state's description. */
132 
133  /* The fields below that start with "m_" are "private". They're
134  meant to be accessed through wrapper macros that make them look
135  like globals. */
136 
137  /* The ui_file streams. */
138  /* Normal results */
140  /* Input stream */
142  /* Serious error notifications */
144  /* Log/debug/trace messages that should bypass normal stdout/stderr
145  filtering. For moment, always call this stream using
146  *_unfiltered. In the very near future that restriction shall be
147  removed - either call shall be unfiltered. (cagney 1999-06-13). */
149 
150  /* The current ui_out. */
152 };
153 
154 /* The main UI. This is the UI that is bound to stdin/stdout/stderr.
155  It always exists and is created automatically when GDB starts
156  up. */
157 extern struct ui *main_ui;
158 
159 /* The current UI. */
160 extern struct ui *current_ui;
161 
162 /* The list of all UIs. */
163 extern struct ui *ui_list;
164 
165 /* State for SWITCH_THRU_ALL_UIS. */
167 {
168 public:
169 
171  {
173  }
174 
175  /* If done iterating, return true; otherwise return false. */
176  bool done () const
177  {
178  return m_iter == NULL;
179  }
180 
181  /* Move to the next UI, setting current_ui if iteration is not yet
182  complete. */
183  void next ()
184  {
185  m_iter = m_iter->next;
186  if (m_iter != NULL)
187  current_ui = m_iter;
188  }
189 
190  private:
191 
192  /* No need for these. They are intentionally not defined
193  anywhere. */
196 
197  /* Used to iterate through the UIs. */
198  struct ui *m_iter;
199 
200  /* Save and restore current_ui. */
202 };
203 
204  /* Traverse through all UI, and switch the current UI to the one
205  being iterated. */
206 #define SWITCH_THRU_ALL_UIS() \
207  for (switch_thru_all_uis stau_state; !stau_state.done (); stau_state.next ())
208 
209 /* Traverse over all UIs. */
210 #define ALL_UIS(UI) \
211  for (UI = ui_list; UI; UI = UI->next) \
212 
213 /* Register the UI's input file descriptor in the event loop. */
214 extern void ui_register_input_event_handler (struct ui *ui);
215 
216 /* Unregister the UI's input file descriptor from the event loop. */
217 extern void ui_unregister_input_event_handler (struct ui *ui);
218 
219 /* From top.c. */
220 extern char *saved_command_line;
221 extern int confirm;
222 extern int inhibit_gdbinit;
223 extern const char gdbinit[];
224 
225 extern void print_gdb_version (struct ui_file *);
226 extern void print_gdb_configuration (struct ui_file *);
227 
228 extern void read_command_file (FILE *);
229 extern void init_history (void);
230 extern void command_loop (void);
231 extern int quit_confirm (void);
232 extern void quit_force (int *, int);
233 extern void quit_command (const char *, int);
234 extern void quit_cover (void);
235 extern void execute_command (const char *, int);
236 
237 /* If the interpreter is in sync mode (we're running a user command's
238  list, running command hooks or similars), and we just ran a
239  synchronous command that started the target, wait for that command
240  to end. WAS_SYNC indicates whether sync_execution was set before
241  the command was run. */
242 
243 extern void maybe_wait_sync_command_done (int was_sync);
244 
245 /* Wait for a synchronous execution command to end. */
246 extern void wait_sync_command_done (void);
247 
248 extern void check_frame_language_change (void);
249 
250 /* Prepare for execution of a command.
251  Call this before every command, CLI or MI.
252  Returns a cleanup to be run after the command is completed. */
254 
255 /* This function returns a pointer to the string that is used
256  by gdb for its command prompt. */
257 extern char *get_prompt (void);
258 
259 /* This function returns a pointer to the string that is used
260  by gdb for its command prompt. */
261 extern void set_prompt (const char *s);
262 
263 /* Return 1 if UI's current input handler is a secondary prompt, 0
264  otherwise. */
265 
266 extern int gdb_in_secondary_prompt_p (struct ui *ui);
267 
268 /* From random places. */
269 extern int readnow_symbol_files;
270 extern int readnever_symbol_files;
271 
272 /* Perform _initialize initialization. */
273 extern void gdb_init (char *);
274 
275 /* For use by event-top.c. */
276 /* Variables from top.c. */
277 extern int source_line_number;
278 extern const char *source_file_name;
279 extern int history_expansion_p;
280 extern int server_command;
281 extern char *lim_at_start;
282 
283 extern void gdb_add_history (const char *);
284 
285 extern void show_commands (const char *args, int from_tty);
286 
287 extern void set_history (const char *, int);
288 
289 extern void show_history (const char *, int);
290 
291 extern void set_verbose (const char *, int, struct cmd_list_element *);
292 
293 extern char *handle_line_of_input (struct buffer *cmd_line_buffer,
294  char *rl, int repeat,
295  const char *annotation_suffix);
296 
297 #endif
int confirm
void maybe_wait_sync_command_done(int was_sync)
Definition: top.c:511
struct ui_file * m_gdb_stdin
Definition: top.h:141
int command_editing
Definition: top.h:89
int num
Definition: top.h:68
int async
Definition: top.h:102
int source_line_number
Definition: top.c:396
void set_prompt(const char *s)
Definition: top.c:1453
int gdb_in_secondary_prompt_p(struct ui *ui)
Definition: top.c:888
void show_commands(const char *args, int from_tty)
Definition: top.c:1697
int history_expansion_p
Definition: top.c:806
void check_frame_language_change(void)
Definition: top.c:456
const char gdbinit[]
char * saved_command_line
Definition: top.c:137
void init_history(void)
Definition: top.c:1821
void next()
Definition: top.h:183
scoped_value_mark prepare_execute_command(void)
Definition: top.c:440
void ui_register_input_event_handler(struct ui *ui)
Definition: event-top.c:520
void(* input_handler)(char *)
Definition: top.h:84
Definition: top.h:44
void quit_force(int *, int)
Definition: top.c:1566
void gdb_init(char *)
Definition: top.c:2113
int quit_confirm(void)
Definition: top.c:1526
void ui_unregister_input_event_handler(struct ui *ui)
Definition: event-top.c:528
void quit_command(const char *, int)
Definition: cli-cmds.c:331
scoped_restore_tmpl< struct ui * > m_save_ui
Definition: top.h:201
struct ui_out * m_current_uiout
Definition: top.h:151
ui(FILE *instream, FILE *outstream, FILE *errstream)
Definition: top.c:251
struct ui_file * m_gdb_stdlog
Definition: top.h:148
struct ui * ui_list
Definition: event-top.c:454
FILE * instream
Definition: top.h:115
int readnever_symbol_files
Definition: symfile.c:84
switch_thru_all_uis & operator=(const switch_thru_all_uis &)
FILE * outstream
Definition: top.h:117
void print_gdb_configuration(struct ui_file *)
Definition: top.c:1339
void set_verbose(const char *, int, struct cmd_list_element *)
Definition: top.c:1795
enum prompt_state prompt_state
Definition: top.h:131
struct ui * next
Definition: top.h:65
bool done() const
Definition: top.h:176
int secondary_prompt_depth
Definition: top.h:106
int readnow_symbol_files
Definition: symfile.c:83
Definition: top.h:56
struct ui * m_iter
Definition: top.h:198
const char * source_file_name
Definition: top.c:402
char * get_prompt(void)
Definition: top.c:1445
~ui()
Definition: top.c:287
char * lim_at_start
Definition: top.c:175
void * gdb_client_data
Definition: event-loop.h:70
void quit_cover(void)
struct ui_file * m_gdb_stdout
Definition: top.h:139
struct ui * main_ui
Definition: event-top.c:452
Definition: ui-out.h:77
switch_thru_all_uis()
Definition: top.h:170
FILE * errstream
Definition: top.h:119
struct ui_interp_info * interp_info
Definition: top.h:92
void show_history(const char *, int)
Definition: top.c:1786
void gdb_add_history(const char *)
Definition: top.c:1067
prompt_state
Definition: top.h:31
struct ui * current_ui
Definition: event-top.c:453
Definition: buffer.h:23
void execute_command(const char *, int)
Definition: top.c:540
int server_command
Definition: top.c:145
void set_history(const char *, int)
Definition: top.c:1778
int input_interactive_p
Definition: top.h:128
void command_loop(void)
struct buffer line_buffer
Definition: top.h:72
FILE * stdin_stream
Definition: top.h:109
int input_fd
Definition: top.h:123
DISABLE_COPY_AND_ASSIGN(ui)
void wait_sync_command_done(void)
Definition: top.c:497
char * handle_line_of_input(struct buffer *cmd_line_buffer, char *rl, int repeat, const char *annotation_suffix)
Definition: event-top.c:645
int inhibit_gdbinit
void print_gdb_version(struct ui_file *)
Definition: top.c:1284
void read_command_file(FILE *)
Definition: top.c:406
void(* call_readline)(gdb_client_data)
Definition: top.h:80
struct ui_file * m_gdb_stderr
Definition: top.h:143