Upgrade GDB from 7.4.1 to 7.6.1 on the vendor branch
[dragonfly.git] / contrib / gdb-7 / gdb / utils.h
1 /* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it
2                       for now.  */
3 /* I/O, string, cleanup, and other random utilities for GDB.
4    Copyright (C) 1986-2013 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #ifndef UTILS_H
22 #define UTILS_H
23
24 #include "cleanups.h"
25 #include "exceptions.h"
26
27 extern void initialize_utils (void);
28
29 /* String utilities.  */
30
31 extern int sevenbit_strings;
32
33 extern char *savestring (const char *, size_t);
34
35 extern int strcmp_iw (const char *, const char *);
36
37 extern int strcmp_iw_ordered (const char *, const char *);
38
39 extern int streq (const char *, const char *);
40
41 extern int subset_compare (char *, char *);
42
43 ULONGEST strtoulst (const char *num, const char **trailer, int base);
44
45 int compare_positive_ints (const void *ap, const void *bp);
46 int compare_strings (const void *ap, const void *bp);
47
48 /* This is defined in *-hdep.c, e.g., posix-hdep.c.  */
49 extern char *safe_strerror (int);
50
51 /* A wrapper for bfd_errmsg to produce a more helpful error message
52    in the case of bfd_error_file_ambiguously recognized.
53    MATCHING, if non-NULL, is the corresponding argument to
54    bfd_check_format_matches, and will be freed.  */
55
56 extern const char *gdb_bfd_errmsg (bfd_error_type error_tag, char **matching);
57 \f
58 /* Parsing utilites.  */
59
60 extern int parse_pid_to_attach (char *args);
61
62 extern int parse_escape (struct gdbarch *, char **);
63
64 char **gdb_buildargv (const char *);
65 \f
66 /* Cleanup utilities.  */
67
68 extern struct cleanup *make_cleanup_freeargv (char **);
69
70 struct dyn_string;
71 extern struct cleanup *make_cleanup_dyn_string_delete (struct dyn_string *);
72
73 struct ui_file;
74 extern struct cleanup *make_cleanup_ui_file_delete (struct ui_file *);
75
76 struct ui_out;
77 extern struct cleanup *
78   make_cleanup_ui_out_redirect_pop (struct ui_out *uiout);
79
80 struct section_addr_info;
81 extern struct cleanup *(make_cleanup_free_section_addr_info 
82                         (struct section_addr_info *));
83
84 extern struct cleanup *make_cleanup_close (int fd);
85
86 extern struct cleanup *make_cleanup_fclose (FILE *file);
87
88 extern struct cleanup *make_cleanup_bfd_unref (bfd *abfd);
89
90 struct obstack;
91 extern struct cleanup *make_cleanup_obstack_free (struct obstack *obstack);
92
93 extern struct cleanup *make_cleanup_restore_integer (int *variable);
94 extern struct cleanup *make_cleanup_restore_uinteger (unsigned int *variable);
95
96 struct target_ops;
97 extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops);
98
99 extern struct cleanup *
100   make_cleanup_restore_ui_file (struct ui_file **variable);
101
102 extern struct cleanup *make_cleanup_value_free_to_mark (struct value *);
103 extern struct cleanup *make_cleanup_value_free (struct value *);
104
105 struct so_list;
106 extern struct cleanup *make_cleanup_free_so (struct so_list *so);
107
108 extern struct cleanup *make_cleanup_restore_current_language (void);
109
110 extern struct cleanup *make_cleanup_htab_delete (htab_t htab);
111
112 extern void free_current_contents (void *);
113
114 extern struct cleanup *make_command_stats_cleanup (int);
115
116 extern void init_page_info (void);
117
118 extern struct cleanup *make_cleanup_restore_page_info (void);
119 extern struct cleanup *
120   set_batch_flag_and_make_cleanup_restore_page_info (void);
121
122 extern struct cleanup *make_bpstat_clear_actions_cleanup (void);
123 \f
124 /* Path utilities.  */
125
126 extern char *gdb_realpath (const char *);
127
128 extern int gdb_filename_fnmatch (const char *pattern, const char *string,
129                                  int flags);
130
131 extern void substitute_path_component (char **stringp, const char *from,
132                                        const char *to);
133
134 char *ldirname (const char *filename);
135 \f
136 /* GDB output, ui_file utilities.  */
137
138 struct ui_file;
139
140 extern void set_display_time (int);
141
142 extern void set_display_space (int);
143
144 extern int query (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
145 extern int nquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
146 extern int yquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
147
148 extern void begin_line (void);
149
150 extern void wrap_here (char *);
151
152 extern void reinitialize_more_filter (void);
153
154 /* Global ui_file streams.  These are all defined in main.c.  */
155 /* Normal results */
156 extern struct ui_file *gdb_stdout;
157 /* Input stream */
158 extern struct ui_file *gdb_stdin;
159 /* Serious error notifications */
160 extern struct ui_file *gdb_stderr;
161 /* Log/debug/trace messages that should bypass normal stdout/stderr
162    filtering.  For moment, always call this stream using
163    *_unfiltered.  In the very near future that restriction shall be
164    removed - either call shall be unfiltered.  (cagney 1999-06-13).  */
165 extern struct ui_file *gdb_stdlog;
166 /* Target output that should bypass normal stdout/stderr filtering.
167    For moment, always call this stream using *_unfiltered.  In the
168    very near future that restriction shall be removed - either call
169    shall be unfiltered.  (cagney 1999-07-02).  */
170 extern struct ui_file *gdb_stdtarg;
171 extern struct ui_file *gdb_stdtargerr;
172 extern struct ui_file *gdb_stdtargin;
173
174 /* More generic printf like operations.  Filtered versions may return
175    non-locally on error.  */
176
177 extern void fputs_filtered (const char *, struct ui_file *);
178
179 extern void fputs_unfiltered (const char *, struct ui_file *);
180
181 extern int fputc_filtered (int c, struct ui_file *);
182
183 extern int fputc_unfiltered (int c, struct ui_file *);
184
185 extern int putchar_filtered (int c);
186
187 extern int putchar_unfiltered (int c);
188
189 extern void puts_filtered (const char *);
190
191 extern void puts_unfiltered (const char *);
192
193 extern void puts_filtered_tabular (char *string, int width, int right);
194
195 extern void puts_debug (char *prefix, char *string, char *suffix);
196
197 extern void vprintf_filtered (const char *, va_list) ATTRIBUTE_PRINTF (1, 0);
198
199 extern void vfprintf_filtered (struct ui_file *, const char *, va_list)
200   ATTRIBUTE_PRINTF (2, 0);
201
202 extern void fprintf_filtered (struct ui_file *, const char *, ...)
203   ATTRIBUTE_PRINTF (2, 3);
204
205 extern void fprintfi_filtered (int, struct ui_file *, const char *, ...)
206   ATTRIBUTE_PRINTF (3, 4);
207
208 extern void printf_filtered (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
209
210 extern void printfi_filtered (int, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
211
212 extern void vprintf_unfiltered (const char *, va_list) ATTRIBUTE_PRINTF (1, 0);
213
214 extern void vfprintf_unfiltered (struct ui_file *, const char *, va_list)
215   ATTRIBUTE_PRINTF (2, 0);
216
217 extern void fprintf_unfiltered (struct ui_file *, const char *, ...)
218   ATTRIBUTE_PRINTF (2, 3);
219
220 extern void printf_unfiltered (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
221
222 extern void print_spaces (int, struct ui_file *);
223
224 extern void print_spaces_filtered (int, struct ui_file *);
225
226 extern char *n_spaces (int);
227
228 extern void fputstr_filtered (const char *str, int quotr,
229                               struct ui_file * stream);
230
231 extern void fputstr_unfiltered (const char *str, int quotr,
232                                 struct ui_file * stream);
233
234 extern void fputstrn_filtered (const char *str, int n, int quotr,
235                                struct ui_file * stream);
236
237 extern void fputstrn_unfiltered (const char *str, int n, int quotr,
238                                  struct ui_file * stream);
239
240 /* Display the host ADDR on STREAM formatted as ``0x%x''.  */
241 extern void gdb_print_host_address (const void *addr, struct ui_file *stream);
242
243 extern const char *host_address_to_string (const void *addr);
244
245 /* Convert CORE_ADDR to string in platform-specific manner.
246    This is usually formatted similar to 0x%lx.  */
247 extern const char *paddress (struct gdbarch *gdbarch, CORE_ADDR addr);
248
249 /* Return a string representation in hexadecimal notation of ADDRESS,
250    which is suitable for printing.  */
251
252 extern const char *print_core_address (struct gdbarch *gdbarch,
253                                        CORE_ADDR address);
254
255 /* Callback hash_f and eq_f for htab_create_alloc or htab_create_alloc_ex.  */
256 extern hashval_t core_addr_hash (const void *ap);
257 extern int core_addr_eq (const void *ap, const void *bp);
258
259 /* %d for LONGEST */
260 extern char *plongest (LONGEST l);
261 /* %u for ULONGEST */
262 extern char *pulongest (ULONGEST l);
263
264 extern char *phex (ULONGEST l, int sizeof_l);
265 extern char *phex_nz (ULONGEST l, int sizeof_l);
266 extern char *int_string (LONGEST, int, int, int, int);
267
268 /* Convert a CORE_ADDR into a HEX string with leading zeros.
269    The output from core_addr_to_string() can be passed direct to
270    string_to_core_addr().  */
271 extern const char *core_addr_to_string (const CORE_ADDR addr);
272 extern const char *core_addr_to_string_nz (const CORE_ADDR addr);
273 extern CORE_ADDR string_to_core_addr (const char *my_string);
274
275 /* Return a string that contains a number formatted as a hex
276    string.  */
277 extern char *hex_string (LONGEST);
278 extern char *hex_string_custom (LONGEST, int);
279
280 extern void fprintf_symbol_filtered (struct ui_file *, const char *,
281                                      enum language, int);
282
283 extern void throw_perror_with_name (enum errors errcode, const char *string)
284   ATTRIBUTE_NORETURN;
285 extern void perror_with_name (const char *) ATTRIBUTE_NORETURN;
286
287 extern void print_sys_errmsg (const char *, int);
288 \f
289 /* Warnings and error messages.  */
290
291 extern void (*deprecated_error_begin_hook) (void);
292
293 /* Message to be printed before the error message, when an error occurs.  */
294
295 extern char *error_pre_print;
296
297 /* Message to be printed before the error message, when an error occurs.  */
298
299 extern char *quit_pre_print;
300
301 /* Message to be printed before the warning message, when a warning occurs.  */
302
303 extern char *warning_pre_print;
304
305 extern void verror (const char *fmt, va_list ap)
306      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
307
308 extern void error (const char *fmt, ...)
309      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
310
311 extern void error_stream (struct ui_file *) ATTRIBUTE_NORETURN;
312
313 extern void vfatal (const char *fmt, va_list ap)
314      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0);
315
316 extern void fatal (const char *fmt, ...)
317      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2);
318
319 extern void internal_verror (const char *file, int line, const char *,
320                              va_list ap)
321      ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0);
322
323 extern void internal_vwarning (const char *file, int line,
324                                const char *, va_list ap)
325      ATTRIBUTE_PRINTF (3, 0);
326
327 extern void internal_warning (const char *file, int line,
328                               const char *, ...) ATTRIBUTE_PRINTF (3, 4);
329
330 extern void warning (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
331
332 extern void vwarning (const char *, va_list args) ATTRIBUTE_PRINTF (1, 0);
333 \f
334 /* Misc. utilities.  */
335
336 /* Allocation and deallocation functions for the libiberty hash table
337    which use obstacks.  */
338 void *hashtab_obstack_allocate (void *data, size_t size, size_t count);
339 void dummy_obstack_deallocate (void *object, void *data);
340
341 #ifdef HAVE_WAITPID
342 extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout);
343 #endif
344
345 extern int producer_is_gcc_ge_4 (const char *producer);
346
347 extern int myread (int, char *, int);
348
349 /* Ensure that V is aligned to an N byte boundary (B's assumed to be a
350    power of 2).  Round up/down when necessary.  Examples of correct
351    use include:
352
353    addr = align_up (addr, 8); -- VALUE needs 8 byte alignment
354    write_memory (addr, value, len);
355    addr += len;
356
357    and:
358
359    sp = align_down (sp - len, 16); -- Keep SP 16 byte aligned
360    write_memory (sp, value, len);
361
362    Note that uses such as:
363
364    write_memory (addr, value, len);
365    addr += align_up (len, 8);
366
367    and:
368
369    sp -= align_up (len, 8);
370    write_memory (sp, value, len);
371
372    are typically not correct as they don't ensure that the address (SP
373    or ADDR) is correctly aligned (relying on previous alignment to
374    keep things right).  This is also why the methods are called
375    "align_..." instead of "round_..." as the latter reads better with
376    this incorrect coding style.  */
377
378 extern ULONGEST align_up (ULONGEST v, int n);
379 extern ULONGEST align_down (ULONGEST v, int n);
380
381 #endif /* UTILS_H */