]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/utils.h
gdb/copyright.py: Adjust following rename of sim/ppc/ppc-instructions...
[thirdparty/binutils-gdb.git] / gdb / utils.h
CommitLineData
48faced0
DE
1/* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it
2 for now. */
3/* I/O, string, cleanup, and other random utilities for GDB.
4a94e368 4 Copyright (C) 1986-2022 Free Software Foundation, Inc.
48faced0
DE
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
af880d85 24#include "exceptions.h"
d369b608 25#include "gdbsupport/array-view.h"
268a13a5 26#include "gdbsupport/scoped_restore.h"
dcb07cfa 27#include <chrono>
48faced0 28
3a494279
CB
29#ifdef HAVE_LIBXXHASH
30#include <xxhash.h>
31#endif
32
0d12e84c
TT
33struct completion_match_for_lcd;
34class compiled_regex;
35
48faced0
DE
36/* String utilities. */
37
491144b5 38extern bool sevenbit_strings;
48faced0 39
b5ec771e
PA
40/* Modes of operation for strncmp_iw_with_mode. */
41
42enum class strncmp_iw_mode
43{
44/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
45 differences in whitespace. Returns 0 if they match, non-zero if
46 they don't (slightly different than strcmp()'s range of return
47 values). */
48 NORMAL,
49
50 /* Like NORMAL, but also apply the strcmp_iw hack. I.e.,
51 string1=="FOO(PARAMS)" matches string2=="FOO". */
52 MATCH_PARAMS,
53};
54
55/* Helper for strcmp_iw and strncmp_iw. Exported so that languages
56 can implement both NORMAL and MATCH_PARAMS variants in a single
0662b6a7 57 function and defer part of the work to strncmp_iw_with_mode.
bd69330d 58
0662b6a7
PA
59 LANGUAGE is used to implement some context-sensitive
60 language-specific comparisons. For example, for C++,
61 "string1=operator()" should not match "string2=operator" even in
bd69330d
PA
62 MATCH_PARAMS mode.
63
64 MATCH_FOR_LCD is passed down so that the function can mark parts of
65 the symbol name as ignored for completion matching purposes (e.g.,
64a97606
KS
66 to handle abi tags). If IGNORE_TEMPLATE_PARAMS is true, all template
67 parameter lists will be ignored when language is C++. */
68
bd69330d
PA
69extern int strncmp_iw_with_mode
70 (const char *string1, const char *string2, size_t string2_len,
71 strncmp_iw_mode mode, enum language language,
64a97606
KS
72 completion_match_for_lcd *match_for_lcd = NULL,
73 bool ignore_template_params = false);
b5ec771e 74
1d550c82
PA
75/* Do a strncmp() type operation on STRING1 and STRING2, ignoring any
76 differences in whitespace. STRING2_LEN is STRING2's length.
77 Returns 0 if STRING1 matches STRING2_LEN characters of STRING2,
78 non-zero otherwise (slightly different than strncmp()'s range of
0662b6a7
PA
79 return values). Note: passes language_minimal to
80 strncmp_iw_with_mode, and should therefore be avoided if a more
81 suitable language is available. */
1d550c82
PA
82extern int strncmp_iw (const char *string1, const char *string2,
83 size_t string2_len);
84
85/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
86 differences in whitespace. Returns 0 if they match, non-zero if
87 they don't (slightly different than strcmp()'s range of return
88 values).
89
90 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
91 This "feature" is useful when searching for matching C++ function
92 names (such as if the user types 'break FOO', where FOO is a
0662b6a7
PA
93 mangled C++ function).
94
95 Note: passes language_minimal to strncmp_iw_with_mode, and should
96 therefore be avoided if a more suitable language is available. */
1d550c82 97extern int strcmp_iw (const char *string1, const char *string2);
48faced0
DE
98
99extern int strcmp_iw_ordered (const char *, const char *);
100
bd712aed
DE
101/* Reset the prompt_for_continue clock. */
102void reset_prompt_for_continue_wait_time (void);
103/* Return the time spent in prompt_for_continue. */
dcb07cfa 104std::chrono::steady_clock::duration get_prompt_for_continue_wait_time ();
48faced0 105\f
30baf67b 106/* Parsing utilities. */
48faced0 107
c0939df1 108extern int parse_pid_to_attach (const char *args);
48faced0 109
d7561cbb 110extern int parse_escape (struct gdbarch *, const char **);
48faced0 111
48faced0
DE
112\f
113/* Cleanup utilities. */
114
48faced0
DE
115extern void init_page_info (void);
116
b95de2b7
TT
117/* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
118 Restore when destroyed. */
119
120struct set_batch_flag_and_restore_page_info
121{
122public:
123
124 set_batch_flag_and_restore_page_info ();
125 ~set_batch_flag_and_restore_page_info ();
126
127 DISABLE_COPY_AND_ASSIGN (set_batch_flag_and_restore_page_info);
128
129private:
130
131 /* Note that this doesn't use scoped_restore, because it's important
132 to control the ordering of operations in the destruction, and it
133 was simpler to avoid introducing a new ad hoc class. */
134 unsigned m_save_lines_per_page;
135 unsigned m_save_chars_per_line;
136 int m_save_batch_flag;
137};
48faced0 138
48faced0
DE
139\f
140/* Path utilities. */
141
48faced0
DE
142extern int gdb_filename_fnmatch (const char *pattern, const char *string,
143 int flags);
144
145extern void substitute_path_component (char **stringp, const char *from,
146 const char *to);
147
d721ba37 148std::string ldirname (const char *filename);
cce0e923
DE
149
150extern int count_path_elements (const char *path);
151
152extern const char *strip_leading_path_elements (const char *path, int n);
48faced0
DE
153\f
154/* GDB output, ui_file utilities. */
155
156struct ui_file;
157
48faced0
DE
158extern int query (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
159extern int nquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
160extern int yquery (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
161
162extern void begin_line (void);
163
6c92c339 164extern void wrap_here (int);
48faced0
DE
165
166extern void reinitialize_more_filter (void);
167
2f228731
TT
168/* Return the number of characters in a line. */
169
170extern int get_chars_per_line ();
171
491144b5 172extern bool pagination_enabled;
74da6f00 173
3c6c449e
TT
174/* A flag indicating whether to timestamp debugging messages. */
175extern bool debug_timestamp;
176
79aa2fe8
PA
177extern struct ui_file **current_ui_gdb_stdout_ptr (void);
178extern struct ui_file **current_ui_gdb_stdin_ptr (void);
179extern struct ui_file **current_ui_gdb_stderr_ptr (void);
180extern struct ui_file **current_ui_gdb_stdlog_ptr (void);
181
6b0c1154
TT
182/* Flush STREAM. */
183extern void gdb_flush (struct ui_file *stream);
faa17681 184
79aa2fe8
PA
185/* The current top level's ui_file streams. */
186
48faced0 187/* Normal results */
79aa2fe8 188#define gdb_stdout (*current_ui_gdb_stdout_ptr ())
48faced0 189/* Input stream */
79aa2fe8 190#define gdb_stdin (*current_ui_gdb_stdin_ptr ())
6b0c1154
TT
191/* Serious error notifications. This bypasses the pager, if one is in
192 use. */
79aa2fe8 193#define gdb_stderr (*current_ui_gdb_stderr_ptr ())
6b0c1154
TT
194/* Log/debug/trace messages that bypasses the pager, if one is in
195 use. */
79aa2fe8
PA
196#define gdb_stdlog (*current_ui_gdb_stdlog_ptr ())
197
198/* Truly global ui_file streams. These are all defined in main.c. */
199
6b0c1154 200/* Target output that should bypass the pager, if one is in use. */
48faced0
DE
201extern struct ui_file *gdb_stdtarg;
202extern struct ui_file *gdb_stdtargerr;
203extern struct ui_file *gdb_stdtargin;
204
d6e5e7f7
PP
205/* Set the screen dimensions to WIDTH and HEIGHT. */
206
207extern void set_screen_width_and_height (int width, int height);
208
6b0c1154 209/* Generic stdio-like operations. */
48faced0 210
0426ad51 211extern void gdb_puts (const char *, struct ui_file *);
48faced0 212
4311246b 213extern void gdb_putc (int c, struct ui_file *);
48faced0 214
4311246b 215extern void gdb_putc (int c);
48faced0 216
0426ad51 217extern void gdb_puts (const char *);
48faced0 218
9fbf7f08 219extern void puts_tabular (char *string, int width, int right);
48faced0 220
6b0c1154
TT
221/* Generic printf-like operations. As an extension over plain
222 printf, these support some GDB-specific format specifiers.
223 Particularly useful here are the styling formatters: '%p[', '%p]'
224 and '%ps'. See ui_out::message for details. */
225
19a7b8ab 226extern void gdb_vprintf (const char *, va_list) ATTRIBUTE_PRINTF (1, 0);
48faced0 227
19a7b8ab 228extern void gdb_vprintf (struct ui_file *, const char *, va_list)
48faced0
DE
229 ATTRIBUTE_PRINTF (2, 0);
230
6cb06a8c 231extern void gdb_printf (struct ui_file *, const char *, ...)
48faced0
DE
232 ATTRIBUTE_PRINTF (2, 3);
233
6cb06a8c 234extern void gdb_printf (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
48faced0
DE
235
236extern void printf_unfiltered (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
237
d0b1020b 238extern void print_spaces (int, struct ui_file *);
48faced0 239
dde238e0 240extern const char *n_spaces (int);
48faced0 241
2437fd32
GB
242/* Return nonzero if filtered printing is initialized. */
243extern int filtered_printing_initialized (void);
244
6cb06a8c 245/* Like gdb_printf, but styles the output according to STYLE,
cbe56571
TT
246 when appropriate. */
247
248extern void fprintf_styled (struct ui_file *stream,
249 const ui_file_style &style,
250 const char *fmt,
251 ...)
252 ATTRIBUTE_PRINTF (3, 4);
253
0426ad51 254/* Like gdb_puts, but styles the output according to STYLE, when
cbe56571
TT
255 appropriate. */
256
257extern void fputs_styled (const char *linebuffer,
258 const ui_file_style &style,
259 struct ui_file *stream);
260
9303eb2f
PW
261/* Like fputs_styled, but uses highlight_style to highlight the
262 parts of STR that match HIGHLIGHT. */
263
264extern void fputs_highlighted (const char *str, const compiled_regex &highlight,
265 struct ui_file *stream);
266
48faced0
DE
267/* Convert CORE_ADDR to string in platform-specific manner.
268 This is usually formatted similar to 0x%lx. */
269extern const char *paddress (struct gdbarch *gdbarch, CORE_ADDR addr);
270
271/* Return a string representation in hexadecimal notation of ADDRESS,
272 which is suitable for printing. */
273
274extern const char *print_core_address (struct gdbarch *gdbarch,
275 CORE_ADDR address);
276
48faced0
DE
277extern CORE_ADDR string_to_core_addr (const char *my_string);
278
bed009b9
TT
279extern void fprintf_symbol (struct ui_file *, const char *,
280 enum language, int);
48faced0 281
7c647d61
JB
282extern void perror_warning_with_name (const char *string);
283
48faced0
DE
284extern void print_sys_errmsg (const char *, int);
285\f
286/* Warnings and error messages. */
287
288extern void (*deprecated_error_begin_hook) (void);
289
48faced0
DE
290/* Message to be printed before the warning message, when a warning occurs. */
291
69bbf465 292extern const char *warning_pre_print;
48faced0 293
d7e74731 294extern void error_stream (const string_file &) ATTRIBUTE_NORETURN;
48faced0 295
57fcfb1b
GB
296extern void demangler_vwarning (const char *file, int line,
297 const char *, va_list ap)
298 ATTRIBUTE_PRINTF (3, 0);
299
300extern void demangler_warning (const char *file, int line,
301 const char *, ...) ATTRIBUTE_PRINTF (3, 4);
302
48faced0
DE
303\f
304/* Misc. utilities. */
305
48faced0
DE
306#ifdef HAVE_WAITPID
307extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout);
308#endif
309
48faced0
DE
310extern int myread (int, char *, int);
311
e55c6530
JB
312/* Integer exponentiation: Return V1**V2, where both arguments
313 are integers.
314
315 Requires V1 != 0 if V2 < 0.
316 Returns 1 for 0 ** 0. */
317extern ULONGEST uinteger_pow (ULONGEST v1, LONGEST v2);
318
eae7090b
GB
319/* Resource limits used by getrlimit and setrlimit. */
320
321enum resource_limit_kind
322 {
323 LIMIT_CUR,
324 LIMIT_MAX
325 };
326
327/* Check whether GDB will be able to dump core using the dump_core
328 function. Returns zero if GDB cannot or should not dump core.
329 If LIMIT_KIND is LIMIT_CUR the user's soft limit will be respected.
330 If LIMIT_KIND is LIMIT_MAX only the hard limit will be respected. */
331
332extern int can_dump_core (enum resource_limit_kind limit_kind);
333
334/* Print a warning that we cannot dump core. */
335
336extern void warn_cant_dump_core (const char *reason);
337
338/* Dump core trying to increase the core soft limit to hard limit
339 first. */
340
341extern void dump_core (void);
342
a99bc3d2
JB
343/* Copy NBITS bits from SOURCE to DEST starting at the given bit
344 offsets. Use the bit order as specified by BITS_BIG_ENDIAN.
345 Source and destination buffers must not overlap. */
346
347extern void copy_bitwise (gdb_byte *dest, ULONGEST dest_offset,
348 const gdb_byte *source, ULONGEST source_offset,
349 ULONGEST nbits, int bits_big_endian);
350
4cbd39b2 351/* A fast hashing function. This can be used to hash data in a fast way
1a6ff1a9 352 when the length is known. If no fast hashing library is available, falls
4cbd39b2
CB
353 back to iterative_hash from libiberty. START_VALUE can be set to
354 continue hashing from a previous value. */
1a6ff1a9
CB
355
356static inline unsigned int
4cbd39b2 357fast_hash (const void *ptr, size_t len, unsigned int start_value = 0)
1a6ff1a9 358{
ccb1ba62 359#ifdef HAVE_LIBXXHASH
4cbd39b2 360 return XXH64 (ptr, len, start_value);
ccb1ba62 361#else
4cbd39b2 362 return iterative_hash (ptr, len, start_value);
ccb1ba62 363#endif
1a6ff1a9
CB
364}
365
48faced0 366#endif /* UTILS_H */