xref: /dragonfly/contrib/gdb-7/gdb/utils.h (revision e5a92d33)
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 
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 
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 
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 
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 
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 
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 */
382