X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Futils.h;h=351814ea81c49fcb64730934dec5920826c288ba;hb=c0171de646ddd85bac9d4bb1ebdf601f7ba7eeab;hp=4bb6ac82f23ded7b0e0b0622ed7ff39b23939231;hpb=48faced0e5066aaa68f1e84766760e5d7de8b3c9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/utils.h b/gdb/utils.h index 4bb6ac82f2..351814ea81 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -1,7 +1,7 @@ /* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it for now. */ /* I/O, string, cleanup, and other random utilities for GDB. - Copyright (C) 1986, 1988-2005, 2007-2012 Free Software Foundation, Inc. + Copyright (C) 1986-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,9 @@ #ifndef UTILS_H #define UTILS_H -#include "cleanups.h" +#include "exceptions.h" +#include "common/scoped_restore.h" +#include extern void initialize_utils (void); @@ -29,8 +31,6 @@ extern void initialize_utils (void); extern int sevenbit_strings; -extern char *savestring (const char *, size_t); - extern int strcmp_iw (const char *, const char *); extern int strcmp_iw_ordered (const char *, const char *); @@ -39,26 +39,26 @@ extern int streq (const char *, const char *); extern int subset_compare (char *, char *); -ULONGEST strtoulst (const char *num, const char **trailer, int base); - int compare_positive_ints (const void *ap, const void *bp); int compare_strings (const void *ap, const void *bp); -/* This is defined in *-hdep.c, e.g., posix-hdep.c. */ -extern char *safe_strerror (int); - /* A wrapper for bfd_errmsg to produce a more helpful error message in the case of bfd_error_file_ambiguously recognized. MATCHING, if non-NULL, is the corresponding argument to bfd_check_format_matches, and will be freed. */ extern const char *gdb_bfd_errmsg (bfd_error_type error_tag, char **matching); + +/* Reset the prompt_for_continue clock. */ +void reset_prompt_for_continue_wait_time (void); +/* Return the time spent in prompt_for_continue. */ +std::chrono::steady_clock::duration get_prompt_for_continue_wait_time (); /* Parsing utilites. */ -extern int parse_pid_to_attach (char *args); +extern int parse_pid_to_attach (const char *args); -extern int parse_escape (struct gdbarch *, char **); +extern int parse_escape (struct gdbarch *, const char **); char **gdb_buildargv (const char *); @@ -66,9 +66,6 @@ char **gdb_buildargv (const char *); extern struct cleanup *make_cleanup_freeargv (char **); -struct dyn_string; -extern struct cleanup *make_cleanup_dyn_string_delete (struct dyn_string *); - struct ui_file; extern struct cleanup *make_cleanup_ui_file_delete (struct ui_file *); @@ -80,7 +77,7 @@ struct section_addr_info; extern struct cleanup *(make_cleanup_free_section_addr_info (struct section_addr_info *)); -extern struct cleanup *make_cleanup_close (int fd); +/* For make_cleanup_close see common/filestuff.h. */ extern struct cleanup *make_cleanup_fclose (FILE *file); @@ -95,20 +92,21 @@ extern struct cleanup *make_cleanup_restore_uinteger (unsigned int *variable); struct target_ops; extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops); -extern struct cleanup * - make_cleanup_restore_ui_file (struct ui_file **variable); - extern struct cleanup *make_cleanup_value_free_to_mark (struct value *); extern struct cleanup *make_cleanup_value_free (struct value *); struct so_list; extern struct cleanup *make_cleanup_free_so (struct so_list *so); +extern struct cleanup *make_cleanup_restore_current_language (void); + extern struct cleanup *make_cleanup_htab_delete (htab_t htab); -extern void free_current_contents (void *); +struct parser_state; +extern struct cleanup *make_cleanup_clear_parser_state + (struct parser_state **p); -extern struct cleanup *make_command_stats_cleanup (int); +extern void free_current_contents (void *); extern void init_page_info (void); @@ -122,7 +120,9 @@ extern struct cleanup *make_bpstat_clear_actions_cleanup (void); extern char *gdb_realpath (const char *); -extern char *xfullpath (const char *); +extern char *gdb_realpath_keepfile (const char *); + +extern char *gdb_abspath (const char *); extern int gdb_filename_fnmatch (const char *pattern, const char *string, int flags); @@ -131,37 +131,48 @@ extern void substitute_path_component (char **stringp, const char *from, const char *to); char *ldirname (const char *filename); + +extern int count_path_elements (const char *path); + +extern const char *strip_leading_path_elements (const char *path, int n); /* GDB output, ui_file utilities. */ struct ui_file; -extern void set_display_time (int); - -extern void set_display_space (int); - extern int query (const char *, ...) ATTRIBUTE_PRINTF (1, 2); extern int nquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2); extern int yquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2); extern void begin_line (void); -extern void wrap_here (char *); +extern void wrap_here (const char *); extern void reinitialize_more_filter (void); -/* Global ui_file streams. These are all defined in main.c. */ +extern int pagination_enabled; + +extern struct ui_file **current_ui_gdb_stdout_ptr (void); +extern struct ui_file **current_ui_gdb_stdin_ptr (void); +extern struct ui_file **current_ui_gdb_stderr_ptr (void); +extern struct ui_file **current_ui_gdb_stdlog_ptr (void); + +/* The current top level's ui_file streams. */ + /* Normal results */ -extern struct ui_file *gdb_stdout; +#define gdb_stdout (*current_ui_gdb_stdout_ptr ()) /* Input stream */ -extern struct ui_file *gdb_stdin; +#define gdb_stdin (*current_ui_gdb_stdin_ptr ()) /* Serious error notifications */ -extern struct ui_file *gdb_stderr; +#define gdb_stderr (*current_ui_gdb_stderr_ptr ()) /* Log/debug/trace messages that should bypass normal stdout/stderr filtering. For moment, always call this stream using *_unfiltered. In the very near future that restriction shall be removed - either call shall be unfiltered. (cagney 1999-06-13). */ -extern struct ui_file *gdb_stdlog; +#define gdb_stdlog (*current_ui_gdb_stdlog_ptr ()) + +/* Truly global ui_file streams. These are all defined in main.c. */ + /* Target output that should bypass normal stdout/stderr filtering. For moment, always call this stream using *_unfiltered. In the very near future that restriction shall be removed - either call @@ -170,6 +181,10 @@ extern struct ui_file *gdb_stdtarg; extern struct ui_file *gdb_stdtargerr; extern struct ui_file *gdb_stdtargin; +/* Set the screen dimensions to WIDTH and HEIGHT. */ + +extern void set_screen_width_and_height (int width, int height); + /* More generic printf like operations. Filtered versions may return non-locally on error. */ @@ -236,10 +251,15 @@ extern void fputstrn_filtered (const char *str, int n, int quotr, extern void fputstrn_unfiltered (const char *str, int n, int quotr, struct ui_file * stream); +/* Return nonzero if filtered printing is initialized. */ +extern int filtered_printing_initialized (void); + /* Display the host ADDR on STREAM formatted as ``0x%x''. */ -extern void gdb_print_host_address (const void *addr, struct ui_file *stream); +extern void gdb_print_host_address_1 (const void *addr, struct ui_file *stream); -extern const char *host_address_to_string (const void *addr); +/* Wrapper that avoids adding a pointless cast to all callers. */ +#define gdb_print_host_address(ADDR, STREAM) \ + gdb_print_host_address_1 ((const void *) ADDR, STREAM) /* Convert CORE_ADDR to string in platform-specific manner. This is usually formatted similar to 0x%lx. */ @@ -255,31 +275,15 @@ extern const char *print_core_address (struct gdbarch *gdbarch, extern hashval_t core_addr_hash (const void *ap); extern int core_addr_eq (const void *ap, const void *bp); -/* %d for LONGEST */ -extern char *plongest (LONGEST l); -/* %u for ULONGEST */ -extern char *pulongest (ULONGEST l); - -extern char *phex (ULONGEST l, int sizeof_l); -extern char *phex_nz (ULONGEST l, int sizeof_l); -extern char *int_string (LONGEST, int, int, int, int); - -/* Convert a CORE_ADDR into a HEX string with leading zeros. - The output from core_addr_to_string() can be passed direct to - string_to_core_addr(). */ -extern const char *core_addr_to_string (const CORE_ADDR addr); -extern const char *core_addr_to_string_nz (const CORE_ADDR addr); extern CORE_ADDR string_to_core_addr (const char *my_string); -/* Return a string that contains a number formatted as a hex - string. */ -extern char *hex_string (LONGEST); -extern char *hex_string_custom (LONGEST, int); - extern void fprintf_symbol_filtered (struct ui_file *, const char *, enum language, int); -extern void perror_with_name (const char *) ATTRIBUTE_NORETURN; +extern void throw_perror_with_name (enum errors errcode, const char *string) + ATTRIBUTE_NORETURN; + +extern void perror_warning_with_name (const char *string); extern void print_sys_errmsg (const char *, int); @@ -287,46 +291,19 @@ extern void print_sys_errmsg (const char *, int); extern void (*deprecated_error_begin_hook) (void); -/* Message to be printed before the error message, when an error occurs. */ - -extern char *error_pre_print; - -/* Message to be printed before the error message, when an error occurs. */ - -extern char *quit_pre_print; - /* Message to be printed before the warning message, when a warning occurs. */ extern char *warning_pre_print; -extern void verror (const char *fmt, va_list ap) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0); - -extern void error (const char *fmt, ...) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2); - extern void error_stream (struct ui_file *) ATTRIBUTE_NORETURN; -extern void vfatal (const char *fmt, va_list ap) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0); - -extern void fatal (const char *fmt, ...) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2); - -extern void internal_verror (const char *file, int line, const char *, - va_list ap) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0); - -extern void internal_vwarning (const char *file, int line, +extern void demangler_vwarning (const char *file, int line, const char *, va_list ap) ATTRIBUTE_PRINTF (3, 0); -extern void internal_warning (const char *file, int line, +extern void demangler_warning (const char *file, int line, const char *, ...) ATTRIBUTE_PRINTF (3, 4); -extern void warning (const char *, ...) ATTRIBUTE_PRINTF (1, 2); - -extern void vwarning (const char *, va_list args) ATTRIBUTE_PRINTF (1, 0); /* Misc. utilities. */ @@ -340,9 +317,7 @@ extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout); #endif extern int producer_is_gcc_ge_4 (const char *producer); - -extern unsigned long gnu_debuglink_crc32 (unsigned long crc, - unsigned char *buf, size_t len); +extern int producer_is_gcc (const char *producer, int *major, int *minor); extern int myread (int, char *, int); @@ -378,4 +353,33 @@ extern int myread (int, char *, int); extern ULONGEST align_up (ULONGEST v, int n); extern ULONGEST align_down (ULONGEST v, int n); +/* Resource limits used by getrlimit and setrlimit. */ + +enum resource_limit_kind + { + LIMIT_CUR, + LIMIT_MAX + }; + +/* Check whether GDB will be able to dump core using the dump_core + function. Returns zero if GDB cannot or should not dump core. + If LIMIT_KIND is LIMIT_CUR the user's soft limit will be respected. + If LIMIT_KIND is LIMIT_MAX only the hard limit will be respected. */ + +extern int can_dump_core (enum resource_limit_kind limit_kind); + +/* Print a warning that we cannot dump core. */ + +extern void warn_cant_dump_core (const char *reason); + +/* Dump core trying to increase the core soft limit to hard limit + first. */ + +extern void dump_core (void); + +/* Return the hex string form of LENGTH bytes of DATA. + Space for the result is malloc'd, caller must free. */ + +extern char *make_hex_string (const gdb_byte *data, size_t length); + #endif /* UTILS_H */