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