Implement proper "startup-with-shell" support on gdbserver
[deliverable/binutils-gdb.git] / gdb / utils.c
CommitLineData
c906108c 1/* General utility routines for GDB, the GNU debugger.
1bac305b 2
61baf725 3 Copyright (C) 1986-2017 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 19
4e8f7a8b 20#include "defs.h"
4e8f7a8b 21#include <ctype.h>
0b6cb71e 22#include "gdb_wait.h"
4e8f7a8b 23#include "event-top.h"
95e54da7 24#include "gdbthread.h"
202cbf1c 25#include "fnmatch.h"
cbb099e8 26#include "gdb_bfd.h"
7991dee7
JK
27#ifdef HAVE_SYS_RESOURCE_H
28#include <sys/resource.h>
29#endif /* HAVE_SYS_RESOURCE_H */
4e8f7a8b 30
6a83354a
AC
31#ifdef TUI
32#include "tui/tui.h" /* For tui_get_command_dimension. */
33#endif
34
9d271fd8
AC
35#ifdef __GO32__
36#include <pc.h>
37#endif
38
042be3a9 39#include <signal.h>
c906108c
SS
40#include "gdbcmd.h"
41#include "serial.h"
42#include "bfd.h"
43#include "target.h"
50f182aa 44#include "gdb-demangle.h"
c906108c
SS
45#include "expression.h"
46#include "language.h"
234b45d4 47#include "charset.h"
c906108c 48#include "annotate.h"
303c8ebd 49#include "filenames.h"
7b90c3f9 50#include "symfile.h"
ae5a43e0 51#include "gdb_obstack.h"
9544c605 52#include "gdbcore.h"
698ba934 53#include "top.h"
7c953934 54#include "main.h"
cb08cc53 55#include "solist.h"
c906108c 56
8731e58e 57#include "inferior.h" /* for signed_pointer_to_address */
ac2e2ef7 58
3b78cdbb 59#include "gdb_curses.h"
020cc13c 60
dbda9972 61#include "readline/readline.h"
c906108c 62
dcb07cfa 63#include <chrono>
75feb17d 64
8626589c 65#include "gdb_usleep.h"
390a8aca 66#include "interps.h"
db1ff28b 67#include "gdb_regex.h"
15652511 68#include "job-control.h"
8626589c 69
a3828db0 70#if !HAVE_DECL_MALLOC
5ac79d78 71extern PTR malloc (); /* ARI: PTR */
3c37485b 72#endif
a3828db0 73#if !HAVE_DECL_REALLOC
5ac79d78 74extern PTR realloc (); /* ARI: PTR */
0e52036f 75#endif
a3828db0 76#if !HAVE_DECL_FREE
81b8eb80
AC
77extern void free ();
78#endif
81b8eb80 79
9a4105ab 80void (*deprecated_error_begin_hook) (void);
c906108c
SS
81
82/* Prototypes for local functions */
83
d9fcf2fb 84static void vfprintf_maybe_filtered (struct ui_file *, const char *,
a0b31db1 85 va_list, int) ATTRIBUTE_PRINTF (2, 0);
c906108c 86
d9fcf2fb 87static void fputs_maybe_filtered (const char *, struct ui_file *, int);
c906108c 88
a14ed312 89static void prompt_for_continue (void);
c906108c 90
eb0d3137 91static void set_screen_size (void);
a14ed312 92static void set_width (void);
c906108c 93
260c0b2a
DE
94/* Time spent in prompt_for_continue in the currently executing command
95 waiting for user to respond.
96 Initialized in make_command_stats_cleanup.
97 Modified in prompt_for_continue and defaulted_query.
98 Used in report_command_stats. */
99
dcb07cfa 100static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
260c0b2a 101
75feb17d
DJ
102/* A flag indicating whether to timestamp debugging messages. */
103
104static int debug_timestamp = 0;
105
c906108c
SS
106/* Nonzero means that strings with character values >0x7F should be printed
107 as octal escapes. Zero means just print the value (e.g. it's an
108 international character, and the terminal or window can cope.) */
109
110int sevenbit_strings = 0;
920d2a44
AC
111static void
112show_sevenbit_strings (struct ui_file *file, int from_tty,
113 struct cmd_list_element *c, const char *value)
114{
3e43a32a
MS
115 fprintf_filtered (file, _("Printing of 8-bit characters "
116 "in strings as \\nnn is %s.\n"),
920d2a44
AC
117 value);
118}
c906108c 119
c906108c
SS
120/* String to be printed before warning messages, if any. */
121
69bbf465 122const char *warning_pre_print = "\nwarning: ";
c906108c
SS
123
124int pagination_enabled = 1;
920d2a44
AC
125static void
126show_pagination_enabled (struct ui_file *file, int from_tty,
127 struct cmd_list_element *c, const char *value)
128{
129 fprintf_filtered (file, _("State of pagination is %s.\n"), value);
130}
131
c906108c 132\f
c27f5738 133/* Cleanup utilities.
c5aa993b 134
c27f5738
DE
135 These are not defined in cleanups.c (nor declared in cleanups.h)
136 because while they use the "cleanup API" they are not part of the
137 "cleanup API". */
7a292a7a 138
7a292a7a 139static void
fba45db2 140do_freeargv (void *arg)
7a292a7a 141{
c5aa993b 142 freeargv ((char **) arg);
7a292a7a
SS
143}
144
145struct cleanup *
fba45db2 146make_cleanup_freeargv (char **arg)
7a292a7a 147{
e0088cfd 148 return make_cleanup (do_freeargv, arg);
7a292a7a
SS
149}
150
7c8a8b04
TT
151/* Helper function which does the work for make_cleanup_fclose. */
152
153static void
154do_fclose_cleanup (void *arg)
155{
19ba03f4 156 FILE *file = (FILE *) arg;
e0627e85 157
c02866a0 158 fclose (file);
7c8a8b04
TT
159}
160
161/* Return a new cleanup that closes FILE. */
162
163struct cleanup *
164make_cleanup_fclose (FILE *file)
165{
166 return make_cleanup (do_fclose_cleanup, file);
167}
168
16ad9370
TT
169/* Helper function which does the work for make_cleanup_obstack_free. */
170
171static void
172do_obstack_free (void *arg)
173{
19ba03f4 174 struct obstack *ob = (struct obstack *) arg;
e0627e85 175
16ad9370
TT
176 obstack_free (ob, NULL);
177}
178
179/* Return a new cleanup that frees OBSTACK. */
180
181struct cleanup *
182make_cleanup_obstack_free (struct obstack *obstack)
183{
184 return make_cleanup (do_obstack_free, obstack);
185}
186
8d4d924b
JK
187/* Helper function for make_cleanup_ui_out_redirect_pop. */
188
189static void
190do_ui_out_redirect_pop (void *arg)
191{
19ba03f4 192 struct ui_out *uiout = (struct ui_out *) arg;
8d4d924b 193
7becfd03 194 uiout->redirect (NULL);
8d4d924b
JK
195}
196
197/* Return a new cleanup that pops the last redirection by ui_out_redirect
198 with NULL parameter. */
199
200struct cleanup *
201make_cleanup_ui_out_redirect_pop (struct ui_out *uiout)
202{
e0088cfd 203 return make_cleanup (do_ui_out_redirect_pop, uiout);
8d4d924b
JK
204}
205
7b90c3f9
JB
206static void
207do_free_section_addr_info (void *arg)
208{
19ba03f4 209 free_section_addr_info ((struct section_addr_info *) arg);
7b90c3f9
JB
210}
211
212struct cleanup *
213make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
214{
e0088cfd 215 return make_cleanup (do_free_section_addr_info, addrs);
7b90c3f9
JB
216}
217
0b080f59
VP
218struct restore_integer_closure
219{
220 int *variable;
221 int value;
222};
223
224static void
225restore_integer (void *p)
226{
19ba03f4
SM
227 struct restore_integer_closure *closure
228 = (struct restore_integer_closure *) p;
e0627e85 229
0b080f59
VP
230 *(closure->variable) = closure->value;
231}
7b90c3f9 232
3e43a32a
MS
233/* Remember the current value of *VARIABLE and make it restored when
234 the cleanup is run. */
5da1313b 235
c906108c 236struct cleanup *
0b080f59
VP
237make_cleanup_restore_integer (int *variable)
238{
8d749320 239 struct restore_integer_closure *c = XNEW (struct restore_integer_closure);
e0627e85 240
0b080f59
VP
241 c->variable = variable;
242 c->value = *variable;
243
e0088cfd 244 return make_cleanup_dtor (restore_integer, (void *) c, xfree);
0b080f59
VP
245}
246
3e43a32a
MS
247/* Remember the current value of *VARIABLE and make it restored when
248 the cleanup is run. */
5da1313b
JK
249
250struct cleanup *
251make_cleanup_restore_uinteger (unsigned int *variable)
252{
253 return make_cleanup_restore_integer ((int *) variable);
254}
255
c0edd9ed
JK
256/* Helper for make_cleanup_unpush_target. */
257
258static void
259do_unpush_target (void *arg)
260{
19ba03f4 261 struct target_ops *ops = (struct target_ops *) arg;
c0edd9ed
JK
262
263 unpush_target (ops);
264}
265
266/* Return a new cleanup that unpushes OPS. */
267
268struct cleanup *
269make_cleanup_unpush_target (struct target_ops *ops)
270{
e0088cfd 271 return make_cleanup (do_unpush_target, ops);
c0edd9ed
JK
272}
273
028d0ed5
TJB
274/* Helper for make_cleanup_value_free_to_mark. */
275
276static void
277do_value_free_to_mark (void *value)
278{
279 value_free_to_mark ((struct value *) value);
280}
281
282/* Free all values allocated since MARK was obtained by value_mark
283 (except for those released) when the cleanup is run. */
284
285struct cleanup *
286make_cleanup_value_free_to_mark (struct value *mark)
287{
e0088cfd 288 return make_cleanup (do_value_free_to_mark, mark);
028d0ed5
TJB
289}
290
72fc29ff
TT
291/* Helper for make_cleanup_value_free. */
292
293static void
294do_value_free (void *value)
295{
19ba03f4 296 value_free ((struct value *) value);
72fc29ff
TT
297}
298
299/* Free VALUE. */
300
301struct cleanup *
302make_cleanup_value_free (struct value *value)
303{
e0088cfd 304 return make_cleanup (do_value_free, value);
72fc29ff
TT
305}
306
cb08cc53
JK
307/* Helper for make_cleanup_free_so. */
308
309static void
310do_free_so (void *arg)
311{
19ba03f4 312 struct so_list *so = (struct so_list *) arg;
cb08cc53
JK
313
314 free_so (so);
315}
316
317/* Make cleanup handler calling free_so for SO. */
318
319struct cleanup *
320make_cleanup_free_so (struct so_list *so)
321{
e0088cfd 322 return make_cleanup (do_free_so, so);
cb08cc53
JK
323}
324
5b12a61c
JK
325/* Helper for make_cleanup_restore_current_language. */
326
327static void
328do_restore_current_language (void *p)
329{
aead7601 330 enum language saved_lang = (enum language) (uintptr_t) p;
5b12a61c
JK
331
332 set_language (saved_lang);
333}
334
335/* Remember the current value of CURRENT_LANGUAGE and make it restored when
336 the cleanup is run. */
337
338struct cleanup *
339make_cleanup_restore_current_language (void)
340{
341 enum language saved_lang = current_language->la_language;
342
343 return make_cleanup (do_restore_current_language,
344 (void *) (uintptr_t) saved_lang);
345}
346
410a0ff2
SDJ
347/* Helper function for make_cleanup_clear_parser_state. */
348
349static void
350do_clear_parser_state (void *ptr)
351{
352 struct parser_state **p = (struct parser_state **) ptr;
353
354 *p = NULL;
355}
356
357/* Clean (i.e., set to NULL) the parser state variable P. */
358
359struct cleanup *
360make_cleanup_clear_parser_state (struct parser_state **p)
361{
362 return make_cleanup (do_clear_parser_state, (void *) p);
363}
364
c906108c
SS
365/* This function is useful for cleanups.
366 Do
367
c5aa993b
JM
368 foo = xmalloc (...);
369 old_chain = make_cleanup (free_current_contents, &foo);
c906108c
SS
370
371 to arrange to free the object thus allocated. */
372
373void
2f9429ae 374free_current_contents (void *ptr)
c906108c 375{
19ba03f4 376 void **location = (void **) ptr;
e0627e85 377
e2f9c474 378 if (location == NULL)
8e65ff28 379 internal_error (__FILE__, __LINE__,
e2e0b3e5 380 _("free_current_contents: NULL pointer"));
2f9429ae 381 if (*location != NULL)
e2f9c474 382 {
b8c9b27d 383 xfree (*location);
e2f9c474
AC
384 *location = NULL;
385 }
c906108c 386}
c906108c 387\f
c5aa993b 388
8731e58e 389
f5a96129
AC
390/* Print a warning message. The first argument STRING is the warning
391 message, used as an fprintf format string, the second is the
392 va_list of arguments for that string. A warning is unfiltered (not
393 paginated) so that the user does not need to page through each
394 screen full of warnings when there are lots of them. */
c906108c
SS
395
396void
f5a96129 397vwarning (const char *string, va_list args)
c906108c 398{
9a4105ab
AC
399 if (deprecated_warning_hook)
400 (*deprecated_warning_hook) (string, args);
f5a96129
AC
401 else
402 {
c5ac1540
PA
403 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
404
0d2f5c07 405 if (target_supports_terminal_ours ())
c5ac1540
PA
406 {
407 make_cleanup_restore_target_terminal ();
408 target_terminal_ours_for_output ();
409 }
0d2f5c07
GB
410 if (filtered_printing_initialized ())
411 wrap_here (""); /* Force out any buffered output. */
f5a96129
AC
412 gdb_flush (gdb_stdout);
413 if (warning_pre_print)
306d9ac5 414 fputs_unfiltered (warning_pre_print, gdb_stderr);
f5a96129
AC
415 vfprintf_unfiltered (gdb_stderr, string, args);
416 fprintf_unfiltered (gdb_stderr, "\n");
c5ac1540
PA
417
418 do_cleanups (old_chain);
f5a96129 419 }
c906108c
SS
420}
421
c906108c
SS
422/* Print an error message and return to command level.
423 The first argument STRING is the error message, used as a fprintf string,
424 and the remaining args are passed as arguments to it. */
425
c25c4a8b 426void
4ce44c66
JM
427verror (const char *string, va_list args)
428{
6b1b7650 429 throw_verror (GENERIC_ERROR, string, args);
4ce44c66
JM
430}
431
c25c4a8b 432void
d7e74731 433error_stream (const string_file &stream)
2acceee2 434{
d7e74731 435 error (("%s"), stream.c_str ());
2acceee2 436}
c906108c 437
2437fd32
GB
438/* Emit a message and abort. */
439
440static void ATTRIBUTE_NORETURN
441abort_with_message (const char *msg)
442{
443 if (gdb_stderr == NULL)
444 fputs (msg, stderr);
445 else
446 fputs_unfiltered (msg, gdb_stderr);
447
448 abort (); /* NOTE: GDB has only three calls to abort(). */
449}
450
7991dee7
JK
451/* Dump core trying to increase the core soft limit to hard limit first. */
452
eae7090b 453void
7991dee7
JK
454dump_core (void)
455{
456#ifdef HAVE_SETRLIMIT
457 struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY };
458
459 setrlimit (RLIMIT_CORE, &rlim);
460#endif /* HAVE_SETRLIMIT */
461
462 abort (); /* NOTE: GDB has only three calls to abort(). */
463}
464
3e43a32a 465/* Check whether GDB will be able to dump core using the dump_core
eae7090b
GB
466 function. Returns zero if GDB cannot or should not dump core.
467 If LIMIT_KIND is LIMIT_CUR the user's soft limit will be respected.
468 If LIMIT_KIND is LIMIT_MAX only the hard limit will be respected. */
7991dee7 469
eae7090b
GB
470int
471can_dump_core (enum resource_limit_kind limit_kind)
7991dee7
JK
472{
473#ifdef HAVE_GETRLIMIT
474 struct rlimit rlim;
475
476 /* Be quiet and assume we can dump if an error is returned. */
477 if (getrlimit (RLIMIT_CORE, &rlim) != 0)
478 return 1;
479
eae7090b 480 switch (limit_kind)
7991dee7 481 {
eae7090b
GB
482 case LIMIT_CUR:
483 if (rlim.rlim_cur == 0)
484 return 0;
485
486 case LIMIT_MAX:
487 if (rlim.rlim_max == 0)
488 return 0;
7991dee7
JK
489 }
490#endif /* HAVE_GETRLIMIT */
491
492 return 1;
493}
494
eae7090b
GB
495/* Print a warning that we cannot dump core. */
496
497void
498warn_cant_dump_core (const char *reason)
499{
500 fprintf_unfiltered (gdb_stderr,
501 _("%s\nUnable to dump core, use `ulimit -c"
502 " unlimited' before executing GDB next time.\n"),
503 reason);
504}
505
506/* Check whether GDB will be able to dump core using the dump_core
507 function, and print a warning if we cannot. */
508
509static int
510can_dump_core_warn (enum resource_limit_kind limit_kind,
511 const char *reason)
512{
513 int core_dump_allowed = can_dump_core (limit_kind);
514
515 if (!core_dump_allowed)
516 warn_cant_dump_core (reason);
517
518 return core_dump_allowed;
519}
520
3c16cced
PA
521/* Allow the user to configure the debugger behavior with respect to
522 what to do when an internal problem is detected. */
523
524const char internal_problem_ask[] = "ask";
525const char internal_problem_yes[] = "yes";
526const char internal_problem_no[] = "no";
40478521 527static const char *const internal_problem_modes[] =
3c16cced
PA
528{
529 internal_problem_ask,
530 internal_problem_yes,
531 internal_problem_no,
532 NULL
533};
3c16cced 534
581e13c1 535/* Print a message reporting an internal error/warning. Ask the user
dec43320
AC
536 if they want to continue, dump core, or just exit. Return
537 something to indicate a quit. */
c906108c 538
dec43320 539struct internal_problem
c906108c 540{
dec43320 541 const char *name;
57fcfb1b 542 int user_settable_should_quit;
3c16cced 543 const char *should_quit;
57fcfb1b 544 int user_settable_should_dump_core;
3c16cced 545 const char *should_dump_core;
dec43320
AC
546};
547
548/* Report a problem, internal to GDB, to the user. Once the problem
549 has been reported, and assuming GDB didn't quit, the caller can
550 either allow execution to resume or throw an error. */
551
a0b31db1 552static void ATTRIBUTE_PRINTF (4, 0)
dec43320 553internal_vproblem (struct internal_problem *problem,
8731e58e 554 const char *file, int line, const char *fmt, va_list ap)
dec43320 555{
dec43320 556 static int dejavu;
375fc983 557 int quit_p;
7be570e7 558 int dump_core_p;
714b1282 559 char *reason;
48be7c1b 560 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
c906108c 561
dec43320 562 /* Don't allow infinite error/warning recursion. */
714b1282
AC
563 {
564 static char msg[] = "Recursive internal problem.\n";
5d502164 565
714b1282
AC
566 switch (dejavu)
567 {
568 case 0:
569 dejavu = 1;
570 break;
571 case 1:
572 dejavu = 2;
2437fd32 573 abort_with_message (msg);
714b1282
AC
574 default:
575 dejavu = 3;
bf1d7d9c
JB
576 /* Newer GLIBC versions put the warn_unused_result attribute
577 on write, but this is one of those rare cases where
578 ignoring the return value is correct. Casting to (void)
579 does not fix this problem. This is the solution suggested
580 at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */
581 if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg))
7991dee7 582 abort (); /* NOTE: GDB has only three calls to abort(). */
714b1282
AC
583 exit (1);
584 }
585 }
c906108c 586
714b1282
AC
587 /* Create a string containing the full error/warning message. Need
588 to call query with this full string, as otherwize the reason
589 (error/warning) and question become separated. Format using a
590 style similar to a compiler error message. Include extra detail
591 so that the user knows that they are living on the edge. */
592 {
593 char *msg;
5d502164 594
e623b504 595 msg = xstrvprintf (fmt, ap);
3e43a32a
MS
596 reason = xstrprintf ("%s:%d: %s: %s\n"
597 "A problem internal to GDB has been detected,\n"
598 "further debugging may prove unreliable.",
599 file, line, problem->name, msg);
714b1282
AC
600 xfree (msg);
601 make_cleanup (xfree, reason);
602 }
7be570e7 603
2437fd32
GB
604 /* Fall back to abort_with_message if gdb_stderr is not set up. */
605 if (gdb_stderr == NULL)
606 {
607 fputs (reason, stderr);
608 abort_with_message ("\n");
609 }
610
611 /* Try to get the message out and at the start of a new line. */
612 if (target_supports_terminal_ours ())
c5ac1540
PA
613 {
614 make_cleanup_restore_target_terminal ();
615 target_terminal_ours_for_output ();
616 }
2437fd32
GB
617 if (filtered_printing_initialized ())
618 begin_line ();
619
196a707b 620 /* Emit the message unless query will emit it below. */
2437fd32
GB
621 if (problem->should_quit != internal_problem_ask
622 || !confirm
623 || !filtered_printing_initialized ())
196a707b
GB
624 fprintf_unfiltered (gdb_stderr, "%s\n", reason);
625
3c16cced 626 if (problem->should_quit == internal_problem_ask)
dec43320 627 {
dec43320 628 /* Default (yes/batch case) is to quit GDB. When in batch mode
3c16cced
PA
629 this lessens the likelihood of GDB going into an infinite
630 loop. */
2437fd32 631 if (!confirm || !filtered_printing_initialized ())
196a707b 632 quit_p = 1;
26bb68be
PP
633 else
634 quit_p = query (_("%s\nQuit this debugging session? "), reason);
dec43320 635 }
3c16cced
PA
636 else if (problem->should_quit == internal_problem_yes)
637 quit_p = 1;
638 else if (problem->should_quit == internal_problem_no)
639 quit_p = 0;
640 else
641 internal_error (__FILE__, __LINE__, _("bad switch"));
dec43320 642
add6c04d
GB
643 fputs_unfiltered (_("\nThis is a bug, please report it."), gdb_stderr);
644 if (REPORT_BUGS_TO[0])
645 fprintf_unfiltered (gdb_stderr, _(" For instructions, see:\n%s."),
646 REPORT_BUGS_TO);
647 fputs_unfiltered ("\n\n", gdb_stderr);
648
3c16cced 649 if (problem->should_dump_core == internal_problem_ask)
dec43320 650 {
eae7090b 651 if (!can_dump_core_warn (LIMIT_MAX, reason))
7991dee7 652 dump_core_p = 0;
2437fd32
GB
653 else if (!filtered_printing_initialized ())
654 dump_core_p = 1;
7991dee7
JK
655 else
656 {
657 /* Default (yes/batch case) is to dump core. This leaves a GDB
658 `dropping' so that it is easier to see that something went
659 wrong in GDB. */
660 dump_core_p = query (_("%s\nCreate a core file of GDB? "), reason);
661 }
dec43320 662 }
3c16cced 663 else if (problem->should_dump_core == internal_problem_yes)
eae7090b 664 dump_core_p = can_dump_core_warn (LIMIT_MAX, reason);
3c16cced
PA
665 else if (problem->should_dump_core == internal_problem_no)
666 dump_core_p = 0;
667 else
668 internal_error (__FILE__, __LINE__, _("bad switch"));
7be570e7 669
375fc983 670 if (quit_p)
7be570e7
JM
671 {
672 if (dump_core_p)
7991dee7 673 dump_core ();
375fc983
AC
674 else
675 exit (1);
7be570e7
JM
676 }
677 else
678 {
679 if (dump_core_p)
375fc983 680 {
9b265ec2 681#ifdef HAVE_WORKING_FORK
375fc983 682 if (fork () == 0)
7991dee7 683 dump_core ();
9b265ec2 684#endif
375fc983 685 }
7be570e7 686 }
96baa820
JM
687
688 dejavu = 0;
48be7c1b 689 do_cleanups (cleanup);
dec43320
AC
690}
691
692static struct internal_problem internal_error_problem = {
57fcfb1b 693 "internal-error", 1, internal_problem_ask, 1, internal_problem_ask
dec43320
AC
694};
695
c25c4a8b 696void
8731e58e 697internal_verror (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
698{
699 internal_vproblem (&internal_error_problem, file, line, fmt, ap);
2c51604d 700 throw_quit (_("Command aborted."));
c906108c
SS
701}
702
dec43320 703static struct internal_problem internal_warning_problem = {
57fcfb1b 704 "internal-warning", 1, internal_problem_ask, 1, internal_problem_ask
dec43320
AC
705};
706
707void
8731e58e 708internal_vwarning (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
709{
710 internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
711}
712
57fcfb1b
GB
713static struct internal_problem demangler_warning_problem = {
714 "demangler-warning", 1, internal_problem_ask, 0, internal_problem_no
715};
716
717void
718demangler_vwarning (const char *file, int line, const char *fmt, va_list ap)
719{
720 internal_vproblem (&demangler_warning_problem, file, line, fmt, ap);
721}
722
723void
724demangler_warning (const char *file, int line, const char *string, ...)
725{
726 va_list ap;
727
728 va_start (ap, string);
729 demangler_vwarning (file, line, string, ap);
730 va_end (ap);
731}
732
3c16cced
PA
733/* Dummy functions to keep add_prefix_cmd happy. */
734
735static void
736set_internal_problem_cmd (char *args, int from_tty)
737{
738}
739
740static void
741show_internal_problem_cmd (char *args, int from_tty)
742{
743}
744
745/* When GDB reports an internal problem (error or warning) it gives
746 the user the opportunity to quit GDB and/or create a core file of
747 the current debug session. This function registers a few commands
748 that make it possible to specify that GDB should always or never
749 quit or create a core file, without asking. The commands look
750 like:
751
752 maint set PROBLEM-NAME quit ask|yes|no
753 maint show PROBLEM-NAME quit
754 maint set PROBLEM-NAME corefile ask|yes|no
755 maint show PROBLEM-NAME corefile
756
757 Where PROBLEM-NAME is currently "internal-error" or
758 "internal-warning". */
759
760static void
761add_internal_problem_command (struct internal_problem *problem)
762{
763 struct cmd_list_element **set_cmd_list;
764 struct cmd_list_element **show_cmd_list;
765 char *set_doc;
766 char *show_doc;
767
8d749320
SM
768 set_cmd_list = XNEW (struct cmd_list_element *);
769 show_cmd_list = XNEW (struct cmd_list_element *);
3c16cced
PA
770 *set_cmd_list = NULL;
771 *show_cmd_list = NULL;
772
773 set_doc = xstrprintf (_("Configure what GDB does when %s is detected."),
774 problem->name);
775
776 show_doc = xstrprintf (_("Show what GDB does when %s is detected."),
777 problem->name);
778
779 add_prefix_cmd ((char*) problem->name,
780 class_maintenance, set_internal_problem_cmd, set_doc,
781 set_cmd_list,
c4f7c687
MK
782 concat ("maintenance set ", problem->name, " ",
783 (char *) NULL),
3c16cced
PA
784 0/*allow-unknown*/, &maintenance_set_cmdlist);
785
786 add_prefix_cmd ((char*) problem->name,
787 class_maintenance, show_internal_problem_cmd, show_doc,
788 show_cmd_list,
c4f7c687
MK
789 concat ("maintenance show ", problem->name, " ",
790 (char *) NULL),
3c16cced
PA
791 0/*allow-unknown*/, &maintenance_show_cmdlist);
792
57fcfb1b
GB
793 if (problem->user_settable_should_quit)
794 {
795 set_doc = xstrprintf (_("Set whether GDB should quit "
796 "when an %s is detected"),
797 problem->name);
798 show_doc = xstrprintf (_("Show whether GDB will quit "
799 "when an %s is detected"),
800 problem->name);
801 add_setshow_enum_cmd ("quit", class_maintenance,
802 internal_problem_modes,
803 &problem->should_quit,
804 set_doc,
805 show_doc,
806 NULL, /* help_doc */
807 NULL, /* setfunc */
808 NULL, /* showfunc */
809 set_cmd_list,
810 show_cmd_list);
811
812 xfree (set_doc);
813 xfree (show_doc);
814 }
1eefb858 815
57fcfb1b
GB
816 if (problem->user_settable_should_dump_core)
817 {
818 set_doc = xstrprintf (_("Set whether GDB should create a core "
819 "file of GDB when %s is detected"),
820 problem->name);
821 show_doc = xstrprintf (_("Show whether GDB will create a core "
822 "file of GDB when %s is detected"),
823 problem->name);
824 add_setshow_enum_cmd ("corefile", class_maintenance,
825 internal_problem_modes,
826 &problem->should_dump_core,
827 set_doc,
828 show_doc,
829 NULL, /* help_doc */
830 NULL, /* setfunc */
831 NULL, /* showfunc */
832 set_cmd_list,
833 show_cmd_list);
834
835 xfree (set_doc);
836 xfree (show_doc);
837 }
3c16cced
PA
838}
839
0cf4063e
JB
840/* Return a newly allocated string, containing the PREFIX followed
841 by the system error message for errno (separated by a colon).
842
843 The result must be deallocated after use. */
844
845static char *
846perror_string (const char *prefix)
847{
848 char *err;
849 char *combined;
850
851 err = safe_strerror (errno);
852 combined = (char *) xmalloc (strlen (err) + strlen (prefix) + 3);
853 strcpy (combined, prefix);
854 strcat (combined, ": ");
855 strcat (combined, err);
856
857 return combined;
858}
859
c906108c 860/* Print the system error message for errno, and also mention STRING
598d3636
JK
861 as the file name for which the error was encountered. Use ERRCODE
862 for the thrown exception. Then return to command level. */
c906108c 863
c25c4a8b 864void
598d3636 865throw_perror_with_name (enum errors errcode, const char *string)
c906108c 866{
c906108c
SS
867 char *combined;
868
0cf4063e
JB
869 combined = perror_string (string);
870 make_cleanup (xfree, combined);
c906108c
SS
871
872 /* I understand setting these is a matter of taste. Still, some people
873 may clear errno but not know about bfd_error. Doing this here is not
581e13c1 874 unreasonable. */
c906108c
SS
875 bfd_set_error (bfd_error_no_error);
876 errno = 0;
877
598d3636
JK
878 throw_error (errcode, _("%s."), combined);
879}
880
881/* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */
882
883void
884perror_with_name (const char *string)
885{
886 throw_perror_with_name (GENERIC_ERROR, string);
c906108c
SS
887}
888
7c647d61
JB
889/* Same as perror_with_name except that it prints a warning instead
890 of throwing an error. */
891
892void
893perror_warning_with_name (const char *string)
894{
895 char *combined;
896
897 combined = perror_string (string);
898 warning (_("%s"), combined);
899 xfree (combined);
900}
901
c906108c
SS
902/* Print the system error message for ERRCODE, and also mention STRING
903 as the file name for which the error was encountered. */
904
905void
6972bc8b 906print_sys_errmsg (const char *string, int errcode)
c906108c
SS
907{
908 char *err;
909 char *combined;
910
911 err = safe_strerror (errcode);
912 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
913 strcpy (combined, string);
914 strcat (combined, ": ");
915 strcat (combined, err);
916
917 /* We want anything which was printed on stdout to come out first, before
918 this message. */
919 gdb_flush (gdb_stdout);
920 fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
921}
922
923/* Control C eventually causes this to be called, at a convenient time. */
924
925void
fba45db2 926quit (void)
c906108c 927{
f38d3ad1
PA
928 struct ui *ui = current_ui;
929
06c868a8
JK
930 if (sync_quit_force_run)
931 {
932 sync_quit_force_run = 0;
268a799a 933 quit_force (NULL, 0);
06c868a8
JK
934 }
935
7be570e7
JM
936#ifdef __MSDOS__
937 /* No steenking SIGINT will ever be coming our way when the
938 program is resumed. Don't lie. */
2c51604d 939 throw_quit ("Quit");
7be570e7 940#else
c906108c 941 if (job_control
8731e58e
AC
942 /* If there is no terminal switching for this target, then we can't
943 possibly get screwed by the lack of job control. */
b0ed115f 944 || !target_supports_terminal_ours ())
2c51604d 945 throw_quit ("Quit");
c906108c 946 else
2c51604d 947 throw_quit ("Quit (expect signal SIGINT when the program is resumed)");
7be570e7 948#endif
c906108c
SS
949}
950
abc56d60
PA
951/* See defs.h. */
952
953void
954maybe_quit (void)
955{
048094ac 956 if (sync_quit_force_run)
abc56d60 957 quit ();
048094ac
PA
958
959 quit_handler ();
960
abc56d60
PA
961 if (deprecated_interactive_hook)
962 deprecated_interactive_hook ();
abc56d60
PA
963}
964
c906108c 965\f
c906108c 966/* Called when a memory allocation fails, with the number of bytes of
581e13c1 967 memory requested in SIZE. */
c906108c 968
c25c4a8b 969void
d26e3629 970malloc_failure (long size)
c906108c
SS
971{
972 if (size > 0)
973 {
8e65ff28 974 internal_error (__FILE__, __LINE__,
e2e0b3e5 975 _("virtual memory exhausted: can't allocate %ld bytes."),
8731e58e 976 size);
c906108c
SS
977 }
978 else
979 {
e2e0b3e5 980 internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
c906108c
SS
981 }
982}
983
c906108c
SS
984/* My replacement for the read system call.
985 Used like `read' but keeps going if `read' returns too soon. */
986
987int
fba45db2 988myread (int desc, char *addr, int len)
c906108c 989{
52f0bd74 990 int val;
c906108c
SS
991 int orglen = len;
992
993 while (len > 0)
994 {
995 val = read (desc, addr, len);
996 if (val < 0)
997 return val;
998 if (val == 0)
999 return orglen - len;
1000 len -= val;
1001 addr += val;
1002 }
1003 return orglen;
1004}
d26e3629 1005
c906108c 1006void
aa1ee363 1007print_spaces (int n, struct ui_file *file)
c906108c 1008{
392a587b 1009 fputs_unfiltered (n_spaces (n), file);
c906108c
SS
1010}
1011
1012/* Print a host address. */
1013
1014void
b80c3053 1015gdb_print_host_address_1 (const void *addr, struct ui_file *stream)
c906108c 1016{
ea8992ce 1017 fprintf_filtered (stream, "%s", host_address_to_string (addr));
c906108c 1018}
7c50a931
DE
1019
1020/* See utils.h. */
1021
1022char *
1023make_hex_string (const gdb_byte *data, size_t length)
1024{
224c3ddb 1025 char *result = (char *) xmalloc (length * 2 + 1);
7c50a931
DE
1026 char *p;
1027 size_t i;
1028
1029 p = result;
1030 for (i = 0; i < length; ++i)
dc4d6886 1031 p += xsnprintf (p, 3, "%02x", data[i]);
7c50a931
DE
1032 *p = '\0';
1033 return result;
1034}
1035
c906108c 1036\f
c5aa993b 1037
3eb7562a
PA
1038/* A cleanup that simply calls ui_unregister_input_event_handler. */
1039
1040static void
1041ui_unregister_input_event_handler_cleanup (void *ui)
1042{
1043 ui_unregister_input_event_handler ((struct ui *) ui);
1044}
1045
1046/* Set up to handle input. */
1047
1048static struct cleanup *
1049prepare_to_handle_input (void)
1050{
1051 struct cleanup *old_chain;
1052
1053 old_chain = make_cleanup_restore_target_terminal ();
1054 target_terminal_ours ();
1055
1056 ui_register_input_event_handler (current_ui);
1057 if (current_ui->prompt_state == PROMPT_BLOCKED)
1058 make_cleanup (ui_unregister_input_event_handler_cleanup, current_ui);
1059
1060 make_cleanup_override_quit_handler (default_quit_handler);
1061
1062 return old_chain;
1063}
1064
db1ff28b
JK
1065\f
1066
981c7f5a 1067/* This function supports the query, nquery, and yquery functions.
cbdeadca 1068 Ask user a y-or-n question and return 0 if answer is no, 1 if
981c7f5a
DJ
1069 answer is yes, or default the answer to the specified default
1070 (for yquery or nquery). DEFCHAR may be 'y' or 'n' to provide a
1071 default answer, or '\0' for no default.
cbdeadca
JJ
1072 CTLSTR is the control string and should end in "? ". It should
1073 not say how to answer, because we do that.
1074 ARGS are the arguments passed along with the CTLSTR argument to
1075 printf. */
1076
a0b31db1 1077static int ATTRIBUTE_PRINTF (1, 0)
cbdeadca
JJ
1078defaulted_query (const char *ctlstr, const char defchar, va_list args)
1079{
cbdeadca
JJ
1080 int ans2;
1081 int retval;
1082 int def_value;
1083 char def_answer, not_def_answer;
a121b7c1
PA
1084 const char *y_string, *n_string;
1085 char *question, *prompt;
80dbc9fd 1086 struct cleanup *old_chain;
cbdeadca
JJ
1087
1088 /* Set up according to which answer is the default. */
981c7f5a
DJ
1089 if (defchar == '\0')
1090 {
1091 def_value = 1;
1092 def_answer = 'Y';
1093 not_def_answer = 'N';
1094 y_string = "y";
1095 n_string = "n";
1096 }
1097 else if (defchar == 'y')
cbdeadca
JJ
1098 {
1099 def_value = 1;
1100 def_answer = 'Y';
1101 not_def_answer = 'N';
1102 y_string = "[y]";
1103 n_string = "n";
1104 }
1105 else
1106 {
1107 def_value = 0;
1108 def_answer = 'N';
1109 not_def_answer = 'Y';
1110 y_string = "y";
1111 n_string = "[n]";
1112 }
1113
981c7f5a 1114 /* Automatically answer the default value if the user did not want
a502cf95 1115 prompts or the command was issued with the server prefix. */
e360902b 1116 if (!confirm || server_command)
981c7f5a
DJ
1117 return def_value;
1118
1119 /* If input isn't coming from the user directly, just say what
7a01c6e0 1120 question we're asking, and then answer the default automatically. This
981c7f5a
DJ
1121 way, important error messages don't get lost when talking to GDB
1122 over a pipe. */
268a799a 1123 if (current_ui->instream != current_ui->stdin_stream
26a06916
SM
1124 || !input_interactive_p (current_ui)
1125 /* Restrict queries to the main UI. */
1126 || current_ui != main_ui)
981c7f5a 1127 {
3eb7562a
PA
1128 old_chain = make_cleanup_restore_target_terminal ();
1129
651ce16a 1130 target_terminal_ours_for_output ();
981c7f5a
DJ
1131 wrap_here ("");
1132 vfprintf_filtered (gdb_stdout, ctlstr, args);
1133
3e43a32a
MS
1134 printf_filtered (_("(%s or %s) [answered %c; "
1135 "input not from terminal]\n"),
981c7f5a
DJ
1136 y_string, n_string, def_answer);
1137 gdb_flush (gdb_stdout);
1138
651ce16a 1139 do_cleanups (old_chain);
981c7f5a
DJ
1140 return def_value;
1141 }
1142
9a4105ab 1143 if (deprecated_query_hook)
cbdeadca 1144 {
651ce16a 1145 int res;
cbdeadca 1146
3eb7562a 1147 old_chain = make_cleanup_restore_target_terminal ();
651ce16a
PA
1148 res = deprecated_query_hook (ctlstr, args);
1149 do_cleanups (old_chain);
1150 return res;
1151 }
80dbc9fd 1152
981c7f5a
DJ
1153 /* Format the question outside of the loop, to avoid reusing args. */
1154 question = xstrvprintf (ctlstr, args);
3eb7562a 1155 old_chain = make_cleanup (xfree, question);
588dcc3e
PP
1156 prompt = xstrprintf (_("%s%s(%s or %s) %s"),
1157 annotation_level > 1 ? "\n\032\032pre-query\n" : "",
1158 question, y_string, n_string,
1159 annotation_level > 1 ? "\n\032\032query\n" : "");
80dbc9fd 1160 make_cleanup (xfree, prompt);
981c7f5a 1161
dcb07cfa
PA
1162 /* Used to add duration we waited for user to respond to
1163 prompt_for_continue_wait_time. */
1164 using namespace std::chrono;
1165 steady_clock::time_point prompt_started = steady_clock::now ();
260c0b2a 1166
3eb7562a 1167 prepare_to_handle_input ();
651ce16a 1168
cbdeadca
JJ
1169 while (1)
1170 {
588dcc3e 1171 char *response, answer;
cbdeadca 1172
cbdeadca 1173 gdb_flush (gdb_stdout);
588dcc3e 1174 response = gdb_readline_wrapper (prompt);
cbdeadca 1175
588dcc3e 1176 if (response == NULL) /* C-d */
cbdeadca 1177 {
fa3fd85b 1178 printf_filtered ("EOF [assumed %c]\n", def_answer);
cbdeadca
JJ
1179 retval = def_value;
1180 break;
1181 }
588dcc3e
PP
1182
1183 answer = response[0];
1184 xfree (response);
cbdeadca
JJ
1185
1186 if (answer >= 'a')
1187 answer -= 040;
1188 /* Check answer. For the non-default, the user must specify
1189 the non-default explicitly. */
1190 if (answer == not_def_answer)
1191 {
1192 retval = !def_value;
1193 break;
1194 }
981c7f5a
DJ
1195 /* Otherwise, if a default was specified, the user may either
1196 specify the required input or have it default by entering
1197 nothing. */
1198 if (answer == def_answer
588dcc3e 1199 || (defchar != '\0' && answer == '\0'))
cbdeadca
JJ
1200 {
1201 retval = def_value;
1202 break;
1203 }
1204 /* Invalid entries are not defaulted and require another selection. */
a3f17187 1205 printf_filtered (_("Please answer %s or %s.\n"),
cbdeadca
JJ
1206 y_string, n_string);
1207 }
1208
260c0b2a 1209 /* Add time spend in this routine to prompt_for_continue_wait_time. */
dcb07cfa 1210 prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
260c0b2a 1211
cbdeadca 1212 if (annotation_level > 1)
a3f17187 1213 printf_filtered (("\n\032\032post-query\n"));
80dbc9fd 1214 do_cleanups (old_chain);
cbdeadca
JJ
1215 return retval;
1216}
1217\f
1218
1219/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1220 answer is yes, or 0 if answer is defaulted.
1221 Takes three args which are given to printf to print the question.
1222 The first, a control string, should end in "? ".
1223 It should not say how to answer, because we do that. */
1224
1225int
1226nquery (const char *ctlstr, ...)
1227{
1228 va_list args;
899500d6 1229 int ret;
cbdeadca
JJ
1230
1231 va_start (args, ctlstr);
899500d6 1232 ret = defaulted_query (ctlstr, 'n', args);
cbdeadca 1233 va_end (args);
899500d6 1234 return ret;
cbdeadca
JJ
1235}
1236
1237/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1238 answer is yes, or 1 if answer is defaulted.
1239 Takes three args which are given to printf to print the question.
1240 The first, a control string, should end in "? ".
1241 It should not say how to answer, because we do that. */
1242
1243int
1244yquery (const char *ctlstr, ...)
1245{
1246 va_list args;
899500d6 1247 int ret;
cbdeadca
JJ
1248
1249 va_start (args, ctlstr);
899500d6 1250 ret = defaulted_query (ctlstr, 'y', args);
cbdeadca 1251 va_end (args);
899500d6 1252 return ret;
cbdeadca
JJ
1253}
1254
981c7f5a
DJ
1255/* Ask user a y-or-n question and return 1 iff answer is yes.
1256 Takes three args which are given to printf to print the question.
1257 The first, a control string, should end in "? ".
1258 It should not say how to answer, because we do that. */
1259
1260int
1261query (const char *ctlstr, ...)
1262{
1263 va_list args;
899500d6 1264 int ret;
981c7f5a
DJ
1265
1266 va_start (args, ctlstr);
899500d6 1267 ret = defaulted_query (ctlstr, '\0', args);
981c7f5a 1268 va_end (args);
899500d6 1269 return ret;
981c7f5a
DJ
1270}
1271
6c7a06a3
TT
1272/* A helper for parse_escape that converts a host character to a
1273 target character. C is the host character. If conversion is
1274 possible, then the target character is stored in *TARGET_C and the
1275 function returns 1. Otherwise, the function returns 0. */
1276
1277static int
f870a310 1278host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c)
234b45d4 1279{
6c7a06a3
TT
1280 struct obstack host_data;
1281 char the_char = c;
1282 struct cleanup *cleanups;
1283 int result = 0;
234b45d4 1284
6c7a06a3
TT
1285 obstack_init (&host_data);
1286 cleanups = make_cleanup_obstack_free (&host_data);
234b45d4 1287
f870a310 1288 convert_between_encodings (target_charset (gdbarch), host_charset (),
ac91cd70
PA
1289 (gdb_byte *) &the_char, 1, 1,
1290 &host_data, translit_none);
6c7a06a3
TT
1291
1292 if (obstack_object_size (&host_data) == 1)
1293 {
1294 result = 1;
1295 *target_c = *(char *) obstack_base (&host_data);
1296 }
1297
1298 do_cleanups (cleanups);
1299 return result;
234b45d4
KB
1300}
1301
c906108c
SS
1302/* Parse a C escape sequence. STRING_PTR points to a variable
1303 containing a pointer to the string to parse. That pointer
1304 should point to the character after the \. That pointer
1305 is updated past the characters we use. The value of the
1306 escape sequence is returned.
1307
1308 A negative value means the sequence \ newline was seen,
1309 which is supposed to be equivalent to nothing at all.
1310
1311 If \ is followed by a null character, we return a negative
1312 value and leave the string pointer pointing at the null character.
1313
1314 If \ is followed by 000, we return 0 and leave the string pointer
1315 after the zeros. A value of 0 does not mean end of string. */
1316
1317int
d7561cbb 1318parse_escape (struct gdbarch *gdbarch, const char **string_ptr)
c906108c 1319{
581e13c1 1320 int target_char = -2; /* Initialize to avoid GCC warnings. */
52f0bd74 1321 int c = *(*string_ptr)++;
e0627e85 1322
6c7a06a3
TT
1323 switch (c)
1324 {
8731e58e
AC
1325 case '\n':
1326 return -2;
1327 case 0:
1328 (*string_ptr)--;
1329 return 0;
8731e58e
AC
1330
1331 case '0':
1332 case '1':
1333 case '2':
1334 case '3':
1335 case '4':
1336 case '5':
1337 case '6':
1338 case '7':
1339 {
6c7a06a3 1340 int i = host_hex_value (c);
aa1ee363 1341 int count = 0;
8731e58e
AC
1342 while (++count < 3)
1343 {
5cb316ef 1344 c = (**string_ptr);
6c7a06a3 1345 if (isdigit (c) && c != '8' && c != '9')
8731e58e 1346 {
5cb316ef 1347 (*string_ptr)++;
8731e58e 1348 i *= 8;
6c7a06a3 1349 i += host_hex_value (c);
8731e58e
AC
1350 }
1351 else
1352 {
8731e58e
AC
1353 break;
1354 }
1355 }
1356 return i;
1357 }
6c7a06a3
TT
1358
1359 case 'a':
1360 c = '\a';
1361 break;
1362 case 'b':
1363 c = '\b';
1364 break;
1365 case 'f':
1366 c = '\f';
1367 break;
1368 case 'n':
1369 c = '\n';
1370 break;
1371 case 'r':
1372 c = '\r';
1373 break;
1374 case 't':
1375 c = '\t';
1376 break;
1377 case 'v':
1378 c = '\v';
1379 break;
1380
1381 default:
1382 break;
1383 }
1384
f870a310 1385 if (!host_char_to_target (gdbarch, c, &target_char))
3351ea09
JB
1386 error (_("The escape sequence `\\%c' is equivalent to plain `%c',"
1387 " which has no equivalent\nin the `%s' character set."),
905b671b 1388 c, c, target_charset (gdbarch));
6c7a06a3 1389 return target_char;
c906108c
SS
1390}
1391\f
1392/* Print the character C on STREAM as part of the contents of a literal
1393 string whose delimiter is QUOTER. Note that this routine should only
f9acce4a 1394 be called for printing things which are independent of the language
6ef284bd
SM
1395 of the program being debugged.
1396
1397 printchar will normally escape backslashes and instances of QUOTER. If
1398 QUOTER is 0, printchar won't escape backslashes or any quoting character.
1399 As a side effect, if you pass the backslash character as the QUOTER,
1400 printchar will escape backslashes as usual, but not any other quoting
1401 character. */
c906108c 1402
43e526b9 1403static void
74f832da 1404printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
bee0189a
DJ
1405 void (*do_fprintf) (struct ui_file *, const char *, ...)
1406 ATTRIBUTE_FPTR_PRINTF_2, struct ui_file *stream, int quoter)
c906108c 1407{
c906108c
SS
1408 c &= 0xFF; /* Avoid sign bit follies */
1409
c5aa993b
JM
1410 if (c < 0x20 || /* Low control chars */
1411 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1412 (sevenbit_strings && c >= 0x80))
1413 { /* high order bit set */
1414 switch (c)
1415 {
1416 case '\n':
43e526b9 1417 do_fputs ("\\n", stream);
c5aa993b
JM
1418 break;
1419 case '\b':
43e526b9 1420 do_fputs ("\\b", stream);
c5aa993b
JM
1421 break;
1422 case '\t':
43e526b9 1423 do_fputs ("\\t", stream);
c5aa993b
JM
1424 break;
1425 case '\f':
43e526b9 1426 do_fputs ("\\f", stream);
c5aa993b
JM
1427 break;
1428 case '\r':
43e526b9 1429 do_fputs ("\\r", stream);
c5aa993b
JM
1430 break;
1431 case '\033':
43e526b9 1432 do_fputs ("\\e", stream);
c5aa993b
JM
1433 break;
1434 case '\007':
43e526b9 1435 do_fputs ("\\a", stream);
c5aa993b
JM
1436 break;
1437 default:
43e526b9 1438 do_fprintf (stream, "\\%.3o", (unsigned int) c);
c5aa993b
JM
1439 break;
1440 }
1441 }
1442 else
1443 {
6ef284bd 1444 if (quoter != 0 && (c == '\\' || c == quoter))
43e526b9
JM
1445 do_fputs ("\\", stream);
1446 do_fprintf (stream, "%c", c);
c5aa993b 1447 }
c906108c 1448}
43e526b9
JM
1449
1450/* Print the character C on STREAM as part of the contents of a
1451 literal string whose delimiter is QUOTER. Note that these routines
1452 should only be call for printing things which are independent of
581e13c1 1453 the language of the program being debugged. */
43e526b9
JM
1454
1455void
fba45db2 1456fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1457{
1458 while (*str)
1459 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1460}
1461
1462void
fba45db2 1463fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1464{
1465 while (*str)
1466 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1467}
1468
0876f84a
DJ
1469void
1470fputstrn_filtered (const char *str, int n, int quoter,
1471 struct ui_file *stream)
1472{
1473 int i;
e0627e85 1474
0876f84a
DJ
1475 for (i = 0; i < n; i++)
1476 printchar (str[i], fputs_filtered, fprintf_filtered, stream, quoter);
1477}
1478
43e526b9 1479void
8731e58e
AC
1480fputstrn_unfiltered (const char *str, int n, int quoter,
1481 struct ui_file *stream)
43e526b9
JM
1482{
1483 int i;
5d502164 1484
43e526b9
JM
1485 for (i = 0; i < n; i++)
1486 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1487}
c906108c 1488\f
c5aa993b 1489
c906108c
SS
1490/* Number of lines per page or UINT_MAX if paging is disabled. */
1491static unsigned int lines_per_page;
920d2a44
AC
1492static void
1493show_lines_per_page (struct ui_file *file, int from_tty,
1494 struct cmd_list_element *c, const char *value)
1495{
3e43a32a
MS
1496 fprintf_filtered (file,
1497 _("Number of lines gdb thinks are in a page is %s.\n"),
920d2a44
AC
1498 value);
1499}
eb0d3137 1500
cbfbd72a 1501/* Number of chars per line or UINT_MAX if line folding is disabled. */
c906108c 1502static unsigned int chars_per_line;
920d2a44
AC
1503static void
1504show_chars_per_line (struct ui_file *file, int from_tty,
1505 struct cmd_list_element *c, const char *value)
1506{
3e43a32a
MS
1507 fprintf_filtered (file,
1508 _("Number of characters gdb thinks "
1509 "are in a line is %s.\n"),
920d2a44
AC
1510 value);
1511}
eb0d3137 1512
c906108c
SS
1513/* Current count of lines printed on this page, chars on this line. */
1514static unsigned int lines_printed, chars_printed;
1515
1516/* Buffer and start column of buffered text, for doing smarter word-
1517 wrapping. When someone calls wrap_here(), we start buffering output
1518 that comes through fputs_filtered(). If we see a newline, we just
1519 spit it out and forget about the wrap_here(). If we see another
1520 wrap_here(), we spit it out and remember the newer one. If we see
1521 the end of the line, we spit out a newline, the indent, and then
1522 the buffered output. */
1523
1524/* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1525 are waiting to be output (they have already been counted in chars_printed).
1526 When wrap_buffer[0] is null, the buffer is empty. */
1527static char *wrap_buffer;
1528
1529/* Pointer in wrap_buffer to the next character to fill. */
1530static char *wrap_pointer;
1531
1532/* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1533 is non-zero. */
d2c0eef4 1534static const char *wrap_indent;
c906108c
SS
1535
1536/* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1537 is not in effect. */
1538static int wrap_column;
c906108c 1539\f
c5aa993b 1540
26c4b26f 1541/* Initialize the number of lines per page and chars per line. */
eb0d3137 1542
c906108c 1543void
fba45db2 1544init_page_info (void)
c906108c 1545{
5da1313b
JK
1546 if (batch_flag)
1547 {
1548 lines_per_page = UINT_MAX;
1549 chars_per_line = UINT_MAX;
1550 }
1551 else
c906108c 1552#if defined(TUI)
5ecb1806 1553 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
c906108c
SS
1554#endif
1555 {
eb0d3137 1556 int rows, cols;
c906108c 1557
ec145965
EZ
1558#if defined(__GO32__)
1559 rows = ScreenRows ();
1560 cols = ScreenCols ();
1561 lines_per_page = rows;
1562 chars_per_line = cols;
1563#else
eb0d3137
MK
1564 /* Make sure Readline has initialized its terminal settings. */
1565 rl_reset_terminal (NULL);
c906108c 1566
eb0d3137
MK
1567 /* Get the screen size from Readline. */
1568 rl_get_screen_size (&rows, &cols);
1569 lines_per_page = rows;
1570 chars_per_line = cols;
c906108c 1571
1a66331e
PM
1572 /* Readline should have fetched the termcap entry for us.
1573 Only try to use tgetnum function if rl_get_screen_size
1574 did not return a useful value. */
a121b7c1 1575 if (((rows <= 0) && (tgetnum ((char *) "li") < 0))
e681cf3f
EZ
1576 /* Also disable paging if inside Emacs. $EMACS was used
1577 before Emacs v25.1, $INSIDE_EMACS is used since then. */
1578 || getenv ("EMACS") || getenv ("INSIDE_EMACS"))
eb0d3137 1579 {
1a66331e
PM
1580 /* The number of lines per page is not mentioned in the terminal
1581 description or EMACS evironment variable is set. This probably
1582 means that paging is not useful, so disable paging. */
eb0d3137
MK
1583 lines_per_page = UINT_MAX;
1584 }
c906108c 1585
c906108c 1586 /* If the output is not a terminal, don't paginate it. */
d9fcf2fb 1587 if (!ui_file_isatty (gdb_stdout))
c5aa993b 1588 lines_per_page = UINT_MAX;
eb0d3137 1589#endif
ec145965 1590 }
eb0d3137 1591
24b73f8e
PP
1592 /* We handle SIGWINCH ourselves. */
1593 rl_catch_sigwinch = 0;
1594
eb0d3137 1595 set_screen_size ();
c5aa993b 1596 set_width ();
c906108c
SS
1597}
1598
2437fd32
GB
1599/* Return nonzero if filtered printing is initialized. */
1600int
1601filtered_printing_initialized (void)
1602{
1603 return wrap_buffer != NULL;
1604}
1605
5da1313b
JK
1606/* Helper for make_cleanup_restore_page_info. */
1607
1608static void
1609do_restore_page_info_cleanup (void *arg)
1610{
1611 set_screen_size ();
1612 set_width ();
1613}
1614
1615/* Provide cleanup for restoring the terminal size. */
1616
1617struct cleanup *
1618make_cleanup_restore_page_info (void)
1619{
1620 struct cleanup *back_to;
1621
1622 back_to = make_cleanup (do_restore_page_info_cleanup, NULL);
1623 make_cleanup_restore_uinteger (&lines_per_page);
1624 make_cleanup_restore_uinteger (&chars_per_line);
1625
1626 return back_to;
1627}
1628
1629/* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
1630 Provide cleanup for restoring the original state. */
1631
1632struct cleanup *
1633set_batch_flag_and_make_cleanup_restore_page_info (void)
1634{
1635 struct cleanup *back_to = make_cleanup_restore_page_info ();
1636
1637 make_cleanup_restore_integer (&batch_flag);
1638 batch_flag = 1;
1639 init_page_info ();
1640
1641 return back_to;
1642}
1643
eb0d3137
MK
1644/* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */
1645
1646static void
1647set_screen_size (void)
1648{
1649 int rows = lines_per_page;
1650 int cols = chars_per_line;
1651
1652 if (rows <= 0)
1653 rows = INT_MAX;
1654
1655 if (cols <= 0)
0caa462c 1656 cols = INT_MAX;
eb0d3137
MK
1657
1658 /* Update Readline's idea of the terminal size. */
1659 rl_set_screen_size (rows, cols);
1660}
1661
1662/* Reinitialize WRAP_BUFFER according to the current value of
1663 CHARS_PER_LINE. */
1664
c906108c 1665static void
fba45db2 1666set_width (void)
c906108c
SS
1667{
1668 if (chars_per_line == 0)
c5aa993b 1669 init_page_info ();
c906108c
SS
1670
1671 if (!wrap_buffer)
1672 {
1673 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1674 wrap_buffer[0] = '\0';
1675 }
1676 else
1677 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
eb0d3137 1678 wrap_pointer = wrap_buffer; /* Start it at the beginning. */
c906108c
SS
1679}
1680
c5aa993b 1681static void
fba45db2 1682set_width_command (char *args, int from_tty, struct cmd_list_element *c)
c906108c 1683{
eb0d3137 1684 set_screen_size ();
c906108c
SS
1685 set_width ();
1686}
1687
eb0d3137
MK
1688static void
1689set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1690{
1691 set_screen_size ();
1692}
1693
d6e5e7f7
PP
1694/* See utils.h. */
1695
1696void
1697set_screen_width_and_height (int width, int height)
1698{
1699 lines_per_page = height;
1700 chars_per_line = width;
1701
1702 set_screen_size ();
1703 set_width ();
1704}
1705
c906108c 1706/* Wait, so the user can read what's on the screen. Prompt the user
720d2e96
PA
1707 to continue by pressing RETURN. 'q' is also provided because
1708 telling users what to do in the prompt is more user-friendly than
1709 expecting them to think of Ctrl-C/SIGINT. */
c906108c
SS
1710
1711static void
fba45db2 1712prompt_for_continue (void)
c906108c
SS
1713{
1714 char *ignore;
1715 char cont_prompt[120];
dcb07cfa 1716 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
260c0b2a
DE
1717 /* Used to add duration we waited for user to respond to
1718 prompt_for_continue_wait_time. */
dcb07cfa
PA
1719 using namespace std::chrono;
1720 steady_clock::time_point prompt_started = steady_clock::now ();
c906108c
SS
1721
1722 if (annotation_level > 1)
a3f17187 1723 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
c906108c
SS
1724
1725 strcpy (cont_prompt,
1726 "---Type <return> to continue, or q <return> to quit---");
1727 if (annotation_level > 1)
1728 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1729
720d2e96
PA
1730 /* We must do this *before* we call gdb_readline_wrapper, else it
1731 will eventually call us -- thinking that we're trying to print
1732 beyond the end of the screen. */
c906108c
SS
1733 reinitialize_more_filter ();
1734
3eb7562a 1735 prepare_to_handle_input ();
82584158 1736
720d2e96
PA
1737 /* Call gdb_readline_wrapper, not readline, in order to keep an
1738 event loop running. */
b4f5539f 1739 ignore = gdb_readline_wrapper (cont_prompt);
80dbc9fd 1740 make_cleanup (xfree, ignore);
c906108c 1741
260c0b2a 1742 /* Add time spend in this routine to prompt_for_continue_wait_time. */
dcb07cfa 1743 prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
260c0b2a 1744
c906108c 1745 if (annotation_level > 1)
a3f17187 1746 printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
c906108c 1747
80dbc9fd 1748 if (ignore != NULL)
c906108c
SS
1749 {
1750 char *p = ignore;
5d502164 1751
c906108c
SS
1752 while (*p == ' ' || *p == '\t')
1753 ++p;
1754 if (p[0] == 'q')
1690b616
SL
1755 /* Do not call quit here; there is no possibility of SIGINT. */
1756 throw_quit ("Quit");
c906108c 1757 }
c906108c
SS
1758
1759 /* Now we have to do this again, so that GDB will know that it doesn't
1760 need to save the ---Type <return>--- line at the top of the screen. */
1761 reinitialize_more_filter ();
1762
581e13c1 1763 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
80dbc9fd
PA
1764
1765 do_cleanups (old_chain);
c906108c
SS
1766}
1767
26c4b26f 1768/* Initialize timer to keep track of how long we waited for the user. */
bd712aed
DE
1769
1770void
1771reset_prompt_for_continue_wait_time (void)
1772{
dcb07cfa 1773 using namespace std::chrono;
bd712aed 1774
dcb07cfa 1775 prompt_for_continue_wait_time = steady_clock::duration::zero ();
bd712aed
DE
1776}
1777
1778/* Fetch the cumulative time spent in prompt_for_continue. */
1779
dcb07cfa
PA
1780std::chrono::steady_clock::duration
1781get_prompt_for_continue_wait_time ()
bd712aed
DE
1782{
1783 return prompt_for_continue_wait_time;
1784}
1785
c906108c
SS
1786/* Reinitialize filter; ie. tell it to reset to original values. */
1787
1788void
fba45db2 1789reinitialize_more_filter (void)
c906108c
SS
1790{
1791 lines_printed = 0;
1792 chars_printed = 0;
1793}
1794
1795/* Indicate that if the next sequence of characters overflows the line,
581e13c1 1796 a newline should be inserted here rather than when it hits the end.
c906108c
SS
1797 If INDENT is non-null, it is a string to be printed to indent the
1798 wrapped part on the next line. INDENT must remain accessible until
1799 the next call to wrap_here() or until a newline is printed through
1800 fputs_filtered().
1801
1802 If the line is already overfull, we immediately print a newline and
1803 the indentation, and disable further wrapping.
1804
1805 If we don't know the width of lines, but we know the page height,
1806 we must not wrap words, but should still keep track of newlines
1807 that were explicitly printed.
1808
1809 INDENT should not contain tabs, as that will mess up the char count
1810 on the next line. FIXME.
1811
1812 This routine is guaranteed to force out any output which has been
1813 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1814 used to force out output from the wrap_buffer. */
1815
1816void
d2c0eef4 1817wrap_here (const char *indent)
c906108c 1818{
581e13c1 1819 /* This should have been allocated, but be paranoid anyway. */
c906108c 1820 if (!wrap_buffer)
3e43a32a
MS
1821 internal_error (__FILE__, __LINE__,
1822 _("failed internal consistency check"));
c906108c
SS
1823
1824 if (wrap_buffer[0])
1825 {
1826 *wrap_pointer = '\0';
1827 fputs_unfiltered (wrap_buffer, gdb_stdout);
1828 }
1829 wrap_pointer = wrap_buffer;
1830 wrap_buffer[0] = '\0';
3e43a32a 1831 if (chars_per_line == UINT_MAX) /* No line overflow checking. */
c906108c
SS
1832 {
1833 wrap_column = 0;
1834 }
1835 else if (chars_printed >= chars_per_line)
1836 {
1837 puts_filtered ("\n");
1838 if (indent != NULL)
1839 puts_filtered (indent);
1840 wrap_column = 0;
1841 }
1842 else
1843 {
1844 wrap_column = chars_printed;
1845 if (indent == NULL)
1846 wrap_indent = "";
1847 else
1848 wrap_indent = indent;
1849 }
1850}
1851
4a351cef 1852/* Print input string to gdb_stdout, filtered, with wrap,
581e13c1 1853 arranging strings in columns of n chars. String can be
4a351cef
AF
1854 right or left justified in the column. Never prints
1855 trailing spaces. String should never be longer than
1856 width. FIXME: this could be useful for the EXAMINE
581e13c1 1857 command, which currently doesn't tabulate very well. */
4a351cef
AF
1858
1859void
1860puts_filtered_tabular (char *string, int width, int right)
1861{
1862 int spaces = 0;
1863 int stringlen;
1864 char *spacebuf;
1865
1866 gdb_assert (chars_per_line > 0);
1867 if (chars_per_line == UINT_MAX)
1868 {
1869 fputs_filtered (string, gdb_stdout);
1870 fputs_filtered ("\n", gdb_stdout);
1871 return;
1872 }
1873
1874 if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1875 fputs_filtered ("\n", gdb_stdout);
1876
1877 if (width >= chars_per_line)
1878 width = chars_per_line - 1;
1879
1880 stringlen = strlen (string);
1881
1882 if (chars_printed > 0)
1883 spaces = width - (chars_printed - 1) % width - 1;
1884 if (right)
1885 spaces += width - stringlen;
1886
224c3ddb 1887 spacebuf = (char *) alloca (spaces + 1);
4a351cef
AF
1888 spacebuf[spaces] = '\0';
1889 while (spaces--)
1890 spacebuf[spaces] = ' ';
1891
1892 fputs_filtered (spacebuf, gdb_stdout);
1893 fputs_filtered (string, gdb_stdout);
1894}
1895
1896
c906108c 1897/* Ensure that whatever gets printed next, using the filtered output
581e13c1 1898 commands, starts at the beginning of the line. I.e. if there is
c906108c 1899 any pending output for the current line, flush it and start a new
581e13c1 1900 line. Otherwise do nothing. */
c906108c
SS
1901
1902void
fba45db2 1903begin_line (void)
c906108c
SS
1904{
1905 if (chars_printed > 0)
1906 {
1907 puts_filtered ("\n");
1908 }
1909}
1910
ac9a91a7 1911
c906108c
SS
1912/* Like fputs but if FILTER is true, pause after every screenful.
1913
1914 Regardless of FILTER can wrap at points other than the final
1915 character of a line.
1916
1917 Unlike fputs, fputs_maybe_filtered does not return a value.
1918 It is OK for LINEBUFFER to be NULL, in which case just don't print
1919 anything.
1920
1921 Note that a longjmp to top level may occur in this routine (only if
1922 FILTER is true) (since prompt_for_continue may do so) so this
1923 routine should not be called when cleanups are not in place. */
1924
1925static void
fba45db2
KB
1926fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1927 int filter)
c906108c
SS
1928{
1929 const char *lineptr;
1930
1931 if (linebuffer == 0)
1932 return;
1933
1934 /* Don't do any filtering if it is disabled. */
390a8aca 1935 if (stream != gdb_stdout
b2e7f004
JK
1936 || !pagination_enabled
1937 || batch_flag
390a8aca 1938 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)
58dadb1b 1939 || top_level_interpreter () == NULL
112e8700 1940 || interp_ui_out (top_level_interpreter ())->is_mi_like_p ())
c906108c
SS
1941 {
1942 fputs_unfiltered (linebuffer, stream);
1943 return;
1944 }
1945
1946 /* Go through and output each character. Show line extension
1947 when this is necessary; prompt user for new page when this is
1948 necessary. */
c5aa993b 1949
c906108c
SS
1950 lineptr = linebuffer;
1951 while (*lineptr)
1952 {
1953 /* Possible new page. */
8731e58e 1954 if (filter && (lines_printed >= lines_per_page - 1))
c906108c
SS
1955 prompt_for_continue ();
1956
1957 while (*lineptr && *lineptr != '\n')
1958 {
1959 /* Print a single line. */
1960 if (*lineptr == '\t')
1961 {
1962 if (wrap_column)
1963 *wrap_pointer++ = '\t';
1964 else
1965 fputc_unfiltered ('\t', stream);
1966 /* Shifting right by 3 produces the number of tab stops
1967 we have already passed, and then adding one and
c5aa993b 1968 shifting left 3 advances to the next tab stop. */
c906108c
SS
1969 chars_printed = ((chars_printed >> 3) + 1) << 3;
1970 lineptr++;
1971 }
1972 else
1973 {
1974 if (wrap_column)
1975 *wrap_pointer++ = *lineptr;
1976 else
c5aa993b 1977 fputc_unfiltered (*lineptr, stream);
c906108c
SS
1978 chars_printed++;
1979 lineptr++;
1980 }
c5aa993b 1981
c906108c
SS
1982 if (chars_printed >= chars_per_line)
1983 {
1984 unsigned int save_chars = chars_printed;
1985
1986 chars_printed = 0;
1987 lines_printed++;
1988 /* If we aren't actually wrapping, don't output newline --
c5aa993b
JM
1989 if chars_per_line is right, we probably just overflowed
1990 anyway; if it's wrong, let us keep going. */
c906108c
SS
1991 if (wrap_column)
1992 fputc_unfiltered ('\n', stream);
1993
1994 /* Possible new page. */
1995 if (lines_printed >= lines_per_page - 1)
1996 prompt_for_continue ();
1997
581e13c1 1998 /* Now output indentation and wrapped string. */
c906108c
SS
1999 if (wrap_column)
2000 {
2001 fputs_unfiltered (wrap_indent, stream);
581e13c1
MS
2002 *wrap_pointer = '\0'; /* Null-terminate saved stuff, */
2003 fputs_unfiltered (wrap_buffer, stream); /* and eject it. */
c906108c
SS
2004 /* FIXME, this strlen is what prevents wrap_indent from
2005 containing tabs. However, if we recurse to print it
2006 and count its chars, we risk trouble if wrap_indent is
581e13c1 2007 longer than (the user settable) chars_per_line.
c906108c
SS
2008 Note also that this can set chars_printed > chars_per_line
2009 if we are printing a long string. */
2010 chars_printed = strlen (wrap_indent)
c5aa993b 2011 + (save_chars - wrap_column);
c906108c
SS
2012 wrap_pointer = wrap_buffer; /* Reset buffer */
2013 wrap_buffer[0] = '\0';
c5aa993b
JM
2014 wrap_column = 0; /* And disable fancy wrap */
2015 }
c906108c
SS
2016 }
2017 }
2018
2019 if (*lineptr == '\n')
2020 {
2021 chars_printed = 0;
3e43a32a
MS
2022 wrap_here ((char *) 0); /* Spit out chars, cancel
2023 further wraps. */
c906108c
SS
2024 lines_printed++;
2025 fputc_unfiltered ('\n', stream);
2026 lineptr++;
2027 }
2028 }
2029}
2030
2031void
fba45db2 2032fputs_filtered (const char *linebuffer, struct ui_file *stream)
c906108c
SS
2033{
2034 fputs_maybe_filtered (linebuffer, stream, 1);
2035}
2036
2037int
fba45db2 2038putchar_unfiltered (int c)
c906108c 2039{
11cf8741 2040 char buf = c;
e0627e85 2041
d9fcf2fb 2042 ui_file_write (gdb_stdout, &buf, 1);
c906108c
SS
2043 return c;
2044}
2045
d1f4cff8
AC
2046/* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2047 May return nonlocally. */
2048
2049int
2050putchar_filtered (int c)
2051{
2052 return fputc_filtered (c, gdb_stdout);
2053}
2054
c906108c 2055int
fba45db2 2056fputc_unfiltered (int c, struct ui_file *stream)
c906108c 2057{
11cf8741 2058 char buf = c;
e0627e85 2059
d9fcf2fb 2060 ui_file_write (stream, &buf, 1);
c906108c
SS
2061 return c;
2062}
2063
2064int
fba45db2 2065fputc_filtered (int c, struct ui_file *stream)
c906108c
SS
2066{
2067 char buf[2];
2068
2069 buf[0] = c;
2070 buf[1] = 0;
2071 fputs_filtered (buf, stream);
2072 return c;
2073}
2074
2075/* puts_debug is like fputs_unfiltered, except it prints special
2076 characters in printable fashion. */
2077
2078void
fba45db2 2079puts_debug (char *prefix, char *string, char *suffix)
c906108c
SS
2080{
2081 int ch;
2082
2083 /* Print prefix and suffix after each line. */
2084 static int new_line = 1;
2085 static int return_p = 0;
a121b7c1
PA
2086 static const char *prev_prefix = "";
2087 static const char *prev_suffix = "";
c906108c
SS
2088
2089 if (*string == '\n')
2090 return_p = 0;
2091
2092 /* If the prefix is changing, print the previous suffix, a new line,
2093 and the new prefix. */
c5aa993b 2094 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
c906108c 2095 {
9846de1b
JM
2096 fputs_unfiltered (prev_suffix, gdb_stdlog);
2097 fputs_unfiltered ("\n", gdb_stdlog);
2098 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2099 }
2100
2101 /* Print prefix if we printed a newline during the previous call. */
2102 if (new_line)
2103 {
2104 new_line = 0;
9846de1b 2105 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2106 }
2107
2108 prev_prefix = prefix;
2109 prev_suffix = suffix;
2110
2111 /* Output characters in a printable format. */
2112 while ((ch = *string++) != '\0')
2113 {
2114 switch (ch)
c5aa993b 2115 {
c906108c
SS
2116 default:
2117 if (isprint (ch))
9846de1b 2118 fputc_unfiltered (ch, gdb_stdlog);
c906108c
SS
2119
2120 else
9846de1b 2121 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
c906108c
SS
2122 break;
2123
c5aa993b
JM
2124 case '\\':
2125 fputs_unfiltered ("\\\\", gdb_stdlog);
2126 break;
2127 case '\b':
2128 fputs_unfiltered ("\\b", gdb_stdlog);
2129 break;
2130 case '\f':
2131 fputs_unfiltered ("\\f", gdb_stdlog);
2132 break;
2133 case '\n':
2134 new_line = 1;
2135 fputs_unfiltered ("\\n", gdb_stdlog);
2136 break;
2137 case '\r':
2138 fputs_unfiltered ("\\r", gdb_stdlog);
2139 break;
2140 case '\t':
2141 fputs_unfiltered ("\\t", gdb_stdlog);
2142 break;
2143 case '\v':
2144 fputs_unfiltered ("\\v", gdb_stdlog);
2145 break;
2146 }
c906108c
SS
2147
2148 return_p = ch == '\r';
2149 }
2150
2151 /* Print suffix if we printed a newline. */
2152 if (new_line)
2153 {
9846de1b
JM
2154 fputs_unfiltered (suffix, gdb_stdlog);
2155 fputs_unfiltered ("\n", gdb_stdlog);
c906108c
SS
2156 }
2157}
2158
2159
2160/* Print a variable number of ARGS using format FORMAT. If this
2161 information is going to put the amount written (since the last call
2162 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2163 call prompt_for_continue to get the users permision to continue.
2164
2165 Unlike fprintf, this function does not return a value.
2166
2167 We implement three variants, vfprintf (takes a vararg list and stream),
2168 fprintf (takes a stream to write on), and printf (the usual).
2169
2170 Note also that a longjmp to top level may occur in this routine
2171 (since prompt_for_continue may do so) so this routine should not be
2172 called when cleanups are not in place. */
2173
2174static void
fba45db2
KB
2175vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2176 va_list args, int filter)
c906108c
SS
2177{
2178 char *linebuffer;
2179 struct cleanup *old_cleanups;
2180
e623b504 2181 linebuffer = xstrvprintf (format, args);
b8c9b27d 2182 old_cleanups = make_cleanup (xfree, linebuffer);
c906108c
SS
2183 fputs_maybe_filtered (linebuffer, stream, filter);
2184 do_cleanups (old_cleanups);
2185}
2186
2187
2188void
fba45db2 2189vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2190{
2191 vfprintf_maybe_filtered (stream, format, args, 1);
2192}
2193
2194void
fba45db2 2195vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2196{
2197 char *linebuffer;
2198 struct cleanup *old_cleanups;
2199
e623b504 2200 linebuffer = xstrvprintf (format, args);
b8c9b27d 2201 old_cleanups = make_cleanup (xfree, linebuffer);
75feb17d
DJ
2202 if (debug_timestamp && stream == gdb_stdlog)
2203 {
dcb07cfa 2204 using namespace std::chrono;
6e5abd65 2205 int len, need_nl;
75feb17d 2206
dcb07cfa
PA
2207 steady_clock::time_point now = steady_clock::now ();
2208 seconds s = duration_cast<seconds> (now.time_since_epoch ());
2209 microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
6e5abd65
PA
2210
2211 len = strlen (linebuffer);
2212 need_nl = (len > 0 && linebuffer[len - 1] != '\n');
2213
dcb07cfa
PA
2214 std::string timestamp = string_printf ("%ld.%06ld %s%s",
2215 (long) s.count (),
2216 (long) us.count (),
2217 linebuffer, need_nl ? "\n": "");
2218 fputs_unfiltered (timestamp.c_str (), stream);
75feb17d 2219 }
6e5abd65
PA
2220 else
2221 fputs_unfiltered (linebuffer, stream);
c906108c
SS
2222 do_cleanups (old_cleanups);
2223}
2224
2225void
fba45db2 2226vprintf_filtered (const char *format, va_list args)
c906108c
SS
2227{
2228 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2229}
2230
2231void
fba45db2 2232vprintf_unfiltered (const char *format, va_list args)
c906108c
SS
2233{
2234 vfprintf_unfiltered (gdb_stdout, format, args);
2235}
2236
c906108c 2237void
8731e58e 2238fprintf_filtered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2239{
2240 va_list args;
e0627e85 2241
c906108c 2242 va_start (args, format);
c906108c
SS
2243 vfprintf_filtered (stream, format, args);
2244 va_end (args);
2245}
2246
c906108c 2247void
8731e58e 2248fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2249{
2250 va_list args;
e0627e85 2251
c906108c 2252 va_start (args, format);
c906108c
SS
2253 vfprintf_unfiltered (stream, format, args);
2254 va_end (args);
2255}
2256
2257/* Like fprintf_filtered, but prints its result indented.
2258 Called as fprintfi_filtered (spaces, stream, format, ...); */
2259
c906108c 2260void
8731e58e
AC
2261fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2262 ...)
c906108c
SS
2263{
2264 va_list args;
e0627e85 2265
c906108c 2266 va_start (args, format);
c906108c
SS
2267 print_spaces_filtered (spaces, stream);
2268
2269 vfprintf_filtered (stream, format, args);
2270 va_end (args);
2271}
2272
2273
c906108c 2274void
8731e58e 2275printf_filtered (const char *format, ...)
c906108c
SS
2276{
2277 va_list args;
e0627e85 2278
c906108c 2279 va_start (args, format);
c906108c
SS
2280 vfprintf_filtered (gdb_stdout, format, args);
2281 va_end (args);
2282}
2283
2284
c906108c 2285void
8731e58e 2286printf_unfiltered (const char *format, ...)
c906108c
SS
2287{
2288 va_list args;
e0627e85 2289
c906108c 2290 va_start (args, format);
c906108c
SS
2291 vfprintf_unfiltered (gdb_stdout, format, args);
2292 va_end (args);
2293}
2294
2295/* Like printf_filtered, but prints it's result indented.
2296 Called as printfi_filtered (spaces, format, ...); */
2297
c906108c 2298void
8731e58e 2299printfi_filtered (int spaces, const char *format, ...)
c906108c
SS
2300{
2301 va_list args;
e0627e85 2302
c906108c 2303 va_start (args, format);
c906108c
SS
2304 print_spaces_filtered (spaces, gdb_stdout);
2305 vfprintf_filtered (gdb_stdout, format, args);
2306 va_end (args);
2307}
2308
2309/* Easy -- but watch out!
2310
2311 This routine is *not* a replacement for puts()! puts() appends a newline.
2312 This one doesn't, and had better not! */
2313
2314void
fba45db2 2315puts_filtered (const char *string)
c906108c
SS
2316{
2317 fputs_filtered (string, gdb_stdout);
2318}
2319
2320void
fba45db2 2321puts_unfiltered (const char *string)
c906108c
SS
2322{
2323 fputs_unfiltered (string, gdb_stdout);
2324}
2325
2326/* Return a pointer to N spaces and a null. The pointer is good
2327 until the next call to here. */
2328char *
fba45db2 2329n_spaces (int n)
c906108c 2330{
392a587b
JM
2331 char *t;
2332 static char *spaces = 0;
2333 static int max_spaces = -1;
c906108c
SS
2334
2335 if (n > max_spaces)
2336 {
2337 if (spaces)
b8c9b27d 2338 xfree (spaces);
c5aa993b
JM
2339 spaces = (char *) xmalloc (n + 1);
2340 for (t = spaces + n; t != spaces;)
c906108c
SS
2341 *--t = ' ';
2342 spaces[n] = '\0';
2343 max_spaces = n;
2344 }
2345
2346 return spaces + max_spaces - n;
2347}
2348
2349/* Print N spaces. */
2350void
fba45db2 2351print_spaces_filtered (int n, struct ui_file *stream)
c906108c
SS
2352{
2353 fputs_filtered (n_spaces (n), stream);
2354}
2355\f
4a351cef 2356/* C++/ObjC demangler stuff. */
c906108c 2357
389e51db
AC
2358/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2359 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2360 If the name is not mangled, or the language for the name is unknown, or
581e13c1 2361 demangling is off, the name is printed in its "raw" form. */
c906108c
SS
2362
2363void
0d5cff50 2364fprintf_symbol_filtered (struct ui_file *stream, const char *name,
8731e58e 2365 enum language lang, int arg_mode)
c906108c
SS
2366{
2367 char *demangled;
2368
2369 if (name != NULL)
2370 {
2371 /* If user wants to see raw output, no problem. */
2372 if (!demangle)
2373 {
2374 fputs_filtered (name, stream);
2375 }
2376 else
2377 {
9a3d7dfd 2378 demangled = language_demangle (language_def (lang), name, arg_mode);
c906108c
SS
2379 fputs_filtered (demangled ? demangled : name, stream);
2380 if (demangled != NULL)
2381 {
b8c9b27d 2382 xfree (demangled);
c906108c
SS
2383 }
2384 }
2385 }
2386}
2387
2388/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2389 differences in whitespace. Returns 0 if they match, non-zero if they
2390 don't (slightly different than strcmp()'s range of return values).
c5aa993b 2391
c906108c
SS
2392 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2393 This "feature" is useful when searching for matching C++ function names
2394 (such as if the user types 'break FOO', where FOO is a mangled C++
581e13c1 2395 function). */
c906108c
SS
2396
2397int
fba45db2 2398strcmp_iw (const char *string1, const char *string2)
c906108c
SS
2399{
2400 while ((*string1 != '\0') && (*string2 != '\0'))
2401 {
2402 while (isspace (*string1))
2403 {
2404 string1++;
2405 }
2406 while (isspace (*string2))
2407 {
2408 string2++;
2409 }
559a7a62
JK
2410 if (case_sensitivity == case_sensitive_on && *string1 != *string2)
2411 break;
2412 if (case_sensitivity == case_sensitive_off
2413 && (tolower ((unsigned char) *string1)
2414 != tolower ((unsigned char) *string2)))
2415 break;
c906108c
SS
2416 if (*string1 != '\0')
2417 {
2418 string1++;
2419 string2++;
2420 }
2421 }
2422 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2423}
2de7ced7 2424
0fe19209
DC
2425/* This is like strcmp except that it ignores whitespace and treats
2426 '(' as the first non-NULL character in terms of ordering. Like
2427 strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2428 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2429 according to that ordering.
2430
2431 If a list is sorted according to this function and if you want to
2432 find names in the list that match some fixed NAME according to
2433 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2434 where this function would put NAME.
2435
559a7a62
JK
2436 This function must be neutral to the CASE_SENSITIVITY setting as the user
2437 may choose it during later lookup. Therefore this function always sorts
2438 primarily case-insensitively and secondarily case-sensitively.
2439
0fe19209
DC
2440 Here are some examples of why using strcmp to sort is a bad idea:
2441
2442 Whitespace example:
2443
2444 Say your partial symtab contains: "foo<char *>", "goo". Then, if
2445 we try to do a search for "foo<char*>", strcmp will locate this
2446 after "foo<char *>" and before "goo". Then lookup_partial_symbol
2447 will start looking at strings beginning with "goo", and will never
2448 see the correct match of "foo<char *>".
2449
2450 Parenthesis example:
2451
2452 In practice, this is less like to be an issue, but I'll give it a
2453 shot. Let's assume that '$' is a legitimate character to occur in
2454 symbols. (Which may well even be the case on some systems.) Then
2455 say that the partial symbol table contains "foo$" and "foo(int)".
2456 strcmp will put them in this order, since '$' < '('. Now, if the
2457 user searches for "foo", then strcmp will sort "foo" before "foo$".
2458 Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2459 "foo") is false, so it won't proceed to the actual match of
2460 "foo(int)" with "foo". */
2461
2462int
2463strcmp_iw_ordered (const char *string1, const char *string2)
2464{
559a7a62
JK
2465 const char *saved_string1 = string1, *saved_string2 = string2;
2466 enum case_sensitivity case_pass = case_sensitive_off;
2467
2468 for (;;)
0fe19209 2469 {
b11b1f88
JK
2470 /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'.
2471 Provide stub characters if we are already at the end of one of the
2472 strings. */
2473 char c1 = 'X', c2 = 'X';
2474
2475 while (*string1 != '\0' && *string2 != '\0')
0fe19209 2476 {
b11b1f88
JK
2477 while (isspace (*string1))
2478 string1++;
2479 while (isspace (*string2))
2480 string2++;
2481
559a7a62
JK
2482 switch (case_pass)
2483 {
2484 case case_sensitive_off:
2485 c1 = tolower ((unsigned char) *string1);
2486 c2 = tolower ((unsigned char) *string2);
2487 break;
2488 case case_sensitive_on:
b11b1f88
JK
2489 c1 = *string1;
2490 c2 = *string2;
559a7a62
JK
2491 break;
2492 }
b11b1f88
JK
2493 if (c1 != c2)
2494 break;
2495
2496 if (*string1 != '\0')
2497 {
2498 string1++;
2499 string2++;
2500 }
0fe19209 2501 }
b11b1f88
JK
2502
2503 switch (*string1)
0fe19209 2504 {
b11b1f88
JK
2505 /* Characters are non-equal unless they're both '\0'; we want to
2506 make sure we get the comparison right according to our
2507 comparison in the cases where one of them is '\0' or '('. */
2508 case '\0':
2509 if (*string2 == '\0')
559a7a62 2510 break;
b11b1f88
JK
2511 else
2512 return -1;
2513 case '(':
2514 if (*string2 == '\0')
2515 return 1;
2516 else
2517 return -1;
2518 default:
2519 if (*string2 == '\0' || *string2 == '(')
2520 return 1;
559a7a62
JK
2521 else if (c1 > c2)
2522 return 1;
2523 else if (c1 < c2)
2524 return -1;
2525 /* PASSTHRU */
0fe19209 2526 }
559a7a62
JK
2527
2528 if (case_pass == case_sensitive_on)
2529 return 0;
2530
2531 /* Otherwise the strings were equal in case insensitive way, make
2532 a more fine grained comparison in a case sensitive way. */
2533
2534 case_pass = case_sensitive_on;
2535 string1 = saved_string1;
2536 string2 = saved_string2;
0fe19209 2537 }
0fe19209
DC
2538}
2539
2de7ced7
DJ
2540/* A simple comparison function with opposite semantics to strcmp. */
2541
2542int
2543streq (const char *lhs, const char *rhs)
2544{
2545 return !strcmp (lhs, rhs);
2546}
c906108c 2547\f
c5aa993b 2548
c906108c 2549/*
c5aa993b
JM
2550 ** subset_compare()
2551 ** Answer whether string_to_compare is a full or partial match to
2552 ** template_string. The partial match must be in sequence starting
2553 ** at index 0.
2554 */
c906108c 2555int
a121b7c1 2556subset_compare (const char *string_to_compare, const char *template_string)
7a292a7a
SS
2557{
2558 int match;
e0627e85 2559
8731e58e
AC
2560 if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2561 && strlen (string_to_compare) <= strlen (template_string))
2562 match =
61012eef 2563 (startswith (template_string, string_to_compare));
7a292a7a
SS
2564 else
2565 match = 0;
2566 return match;
2567}
c906108c 2568
75feb17d
DJ
2569static void
2570show_debug_timestamp (struct ui_file *file, int from_tty,
2571 struct cmd_list_element *c, const char *value)
2572{
3e43a32a
MS
2573 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"),
2574 value);
75feb17d 2575}
c906108c 2576\f
c5aa993b 2577
c906108c 2578void
fba45db2 2579initialize_utils (void)
c906108c 2580{
35096d9d 2581 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
77dec115
EZ
2582Set number of characters where GDB should wrap lines of its output."), _("\
2583Show number of characters where GDB should wrap lines of its output."), _("\
2584This affects where GDB wraps its output to fit the screen width.\n\
f81d1120 2585Setting this to \"unlimited\" or zero prevents GDB from wrapping its output."),
35096d9d 2586 set_width_command,
920d2a44 2587 show_chars_per_line,
35096d9d
AC
2588 &setlist, &showlist);
2589
2590 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
77dec115
EZ
2591Set number of lines in a page for GDB output pagination."), _("\
2592Show number of lines in a page for GDB output pagination."), _("\
2593This affects the number of lines after which GDB will pause\n\
2594its output and ask you whether to continue.\n\
f81d1120 2595Setting this to \"unlimited\" or zero causes GDB never pause during output."),
35096d9d 2596 set_height_command,
920d2a44 2597 show_lines_per_page,
35096d9d 2598 &setlist, &showlist);
c5aa993b 2599
5bf193a2
AC
2600 add_setshow_boolean_cmd ("pagination", class_support,
2601 &pagination_enabled, _("\
77dec115
EZ
2602Set state of GDB output pagination."), _("\
2603Show state of GDB output pagination."), _("\
2604When pagination is ON, GDB pauses at end of each screenful of\n\
2605its output and asks you whether to continue.\n\
f81d1120 2606Turning pagination off is an alternative to \"set height unlimited\"."),
5bf193a2 2607 NULL,
920d2a44 2608 show_pagination_enabled,
5bf193a2 2609 &setlist, &showlist);
4261bedc 2610
5bf193a2
AC
2611 add_setshow_boolean_cmd ("sevenbit-strings", class_support,
2612 &sevenbit_strings, _("\
2613Set printing of 8-bit characters in strings as \\nnn."), _("\
2614Show printing of 8-bit characters in strings as \\nnn."), NULL,
2615 NULL,
920d2a44 2616 show_sevenbit_strings,
5bf193a2
AC
2617 &setprintlist, &showprintlist);
2618
75feb17d
DJ
2619 add_setshow_boolean_cmd ("timestamp", class_maintenance,
2620 &debug_timestamp, _("\
2621Set timestamping of debugging messages."), _("\
2622Show timestamping of debugging messages."), _("\
2623When set, debugging messages will be marked with seconds and microseconds."),
2624 NULL,
2625 show_debug_timestamp,
2626 &setdebuglist, &showdebuglist);
c906108c
SS
2627}
2628
66bf4b3a 2629const char *
5af949e3 2630paddress (struct gdbarch *gdbarch, CORE_ADDR addr)
66bf4b3a
AC
2631{
2632 /* Truncate address to the size of a target address, avoiding shifts
2633 larger or equal than the width of a CORE_ADDR. The local
2634 variable ADDR_BIT stops the compiler reporting a shift overflow
581e13c1 2635 when it won't occur. */
66bf4b3a
AC
2636 /* NOTE: This assumes that the significant address information is
2637 kept in the least significant bits of ADDR - the upper bits were
76e71323 2638 either zero or sign extended. Should gdbarch_address_to_pointer or
66bf4b3a
AC
2639 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
2640
5af949e3 2641 int addr_bit = gdbarch_addr_bit (gdbarch);
66bf4b3a
AC
2642
2643 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2644 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2645 return hex_string (addr);
2646}
2647
f1310107
TJB
2648/* This function is described in "defs.h". */
2649
2650const char *
2651print_core_address (struct gdbarch *gdbarch, CORE_ADDR address)
2652{
2653 int addr_bit = gdbarch_addr_bit (gdbarch);
2654
2655 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2656 address &= ((CORE_ADDR) 1 << addr_bit) - 1;
2657
2658 /* FIXME: cagney/2002-05-03: Need local_address_string() function
2659 that returns the language localized string formatted to a width
2660 based on gdbarch_addr_bit. */
2661 if (addr_bit <= 32)
2662 return hex_string_custom (address, 8);
2663 else
2664 return hex_string_custom (address, 16);
2665}
2666
8e3b41a9
JK
2667/* Callback hash_f for htab_create_alloc or htab_create_alloc_ex. */
2668
2669hashval_t
2670core_addr_hash (const void *ap)
2671{
19ba03f4 2672 const CORE_ADDR *addrp = (const CORE_ADDR *) ap;
8e3b41a9
JK
2673
2674 return *addrp;
2675}
2676
2677/* Callback eq_f for htab_create_alloc or htab_create_alloc_ex. */
2678
2679int
2680core_addr_eq (const void *ap, const void *bp)
2681{
19ba03f4
SM
2682 const CORE_ADDR *addr_ap = (const CORE_ADDR *) ap;
2683 const CORE_ADDR *addr_bp = (const CORE_ADDR *) bp;
8e3b41a9
JK
2684
2685 return *addr_ap == *addr_bp;
2686}
2687
03dd37c3
AC
2688/* Convert a string back into a CORE_ADDR. */
2689CORE_ADDR
2690string_to_core_addr (const char *my_string)
2691{
2692 CORE_ADDR addr = 0;
9544c605 2693
03dd37c3
AC
2694 if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
2695 {
ced572fe 2696 /* Assume that it is in hex. */
03dd37c3 2697 int i;
5d502164 2698
03dd37c3
AC
2699 for (i = 2; my_string[i] != '\0'; i++)
2700 {
2701 if (isdigit (my_string[i]))
2702 addr = (my_string[i] - '0') + (addr * 16);
8731e58e 2703 else if (isxdigit (my_string[i]))
03dd37c3
AC
2704 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
2705 else
63f06803 2706 error (_("invalid hex \"%s\""), my_string);
03dd37c3
AC
2707 }
2708 }
2709 else
2710 {
2711 /* Assume that it is in decimal. */
2712 int i;
5d502164 2713
03dd37c3
AC
2714 for (i = 0; my_string[i] != '\0'; i++)
2715 {
2716 if (isdigit (my_string[i]))
2717 addr = (my_string[i] - '0') + (addr * 10);
2718 else
63f06803 2719 error (_("invalid decimal \"%s\""), my_string);
03dd37c3
AC
2720 }
2721 }
9544c605 2722
03dd37c3
AC
2723 return addr;
2724}
58d370e0
TT
2725
2726char *
2727gdb_realpath (const char *filename)
2728{
0fa9473f
JB
2729/* On most hosts, we rely on canonicalize_file_name to compute
2730 the FILENAME's realpath.
2731
2732 But the situation is slightly more complex on Windows, due to some
2733 versions of GCC which were reported to generate paths where
2734 backlashes (the directory separator) were doubled. For instance:
2735 c:\\some\\double\\slashes\\dir
2736 ... instead of ...
2737 c:\some\double\slashes\dir
2738 Those double-slashes were getting in the way when comparing paths,
2739 for instance when trying to insert a breakpoint as follow:
2740 (gdb) b c:/some/double/slashes/dir/foo.c:4
2741 No source file named c:/some/double/slashes/dir/foo.c:4.
2742 (gdb) b c:\some\double\slashes\dir\foo.c:4
2743 No source file named c:\some\double\slashes\dir\foo.c:4.
2744 To prevent this from happening, we need this function to always
2745 strip those extra backslashes. While canonicalize_file_name does
2746 perform this simplification, it only works when the path is valid.
2747 Since the simplification would be useful even if the path is not
2748 valid (one can always set a breakpoint on a file, even if the file
2749 does not exist locally), we rely instead on GetFullPathName to
2750 perform the canonicalization. */
2751
9c5e4386
JB
2752#if defined (_WIN32)
2753 {
2754 char buf[MAX_PATH];
2755 DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
2756
0fa9473f
JB
2757 /* The file system is case-insensitive but case-preserving.
2758 So it is important we do not lowercase the path. Otherwise,
2759 we might not be able to display the original casing in a given
2760 path. */
9c5e4386
JB
2761 if (len > 0 && len < MAX_PATH)
2762 return xstrdup (buf);
2763 }
abbffc89
YQ
2764#else
2765 {
2766 char *rp = canonicalize_file_name (filename);
2767
2768 if (rp != NULL)
2769 return rp;
2770 }
9c5e4386
JB
2771#endif
2772
70d35819
AC
2773 /* This system is a lost cause, just dup the buffer. */
2774 return xstrdup (filename);
58d370e0 2775}
303c8ebd 2776
4856b6bc
JK
2777/* Return a copy of FILENAME, with its directory prefix canonicalized
2778 by gdb_realpath. */
2779
2780char *
2781gdb_realpath_keepfile (const char *filename)
2782{
2783 const char *base_name = lbasename (filename);
2784 char *dir_name;
2785 char *real_path;
2786 char *result;
2787
2788 /* Extract the basename of filename, and return immediately
2789 a copy of filename if it does not contain any directory prefix. */
2790 if (base_name == filename)
2791 return xstrdup (filename);
2792
224c3ddb 2793 dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
4856b6bc
JK
2794 /* Allocate enough space to store the dir_name + plus one extra
2795 character sometimes needed under Windows (see below), and
2796 then the closing \000 character. */
2797 strncpy (dir_name, filename, base_name - filename);
2798 dir_name[base_name - filename] = '\000';
2799
2800#ifdef HAVE_DOS_BASED_FILE_SYSTEM
2801 /* We need to be careful when filename is of the form 'd:foo', which
2802 is equivalent of d:./foo, which is totally different from d:/foo. */
2803 if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
2804 {
2805 dir_name[2] = '.';
2806 dir_name[3] = '\000';
2807 }
2808#endif
2809
2810 /* Canonicalize the directory prefix, and build the resulting
2811 filename. If the dirname realpath already contains an ending
2812 directory separator, avoid doubling it. */
2813 real_path = gdb_realpath (dir_name);
2814 if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
2815 result = concat (real_path, base_name, (char *) NULL);
2816 else
2817 result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
2818
2819 xfree (real_path);
2820 return result;
2821}
2822
04affae3
JK
2823/* Return PATH in absolute form, performing tilde-expansion if necessary.
2824 PATH cannot be NULL or the empty string.
2825 This does not resolve symlinks however, use gdb_realpath for that.
2826 Space for the result is allocated with malloc.
2827 If the path is already absolute, it is strdup'd.
2828 If there is a problem computing the absolute path, the path is returned
2829 unchanged (still strdup'd). */
2830
2831char *
2832gdb_abspath (const char *path)
2833{
2834 gdb_assert (path != NULL && path[0] != '\0');
2835
2836 if (path[0] == '~')
2837 return tilde_expand (path);
2838
2839 if (IS_ABSOLUTE_PATH (path))
2840 return xstrdup (path);
2841
2842 /* Beware the // my son, the Emacs barfs, the botch that catch... */
2843 return concat (current_directory,
2844 IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
2845 ? "" : SLASH_STRING,
2846 path, (char *) NULL);
2847}
2848
5b03f266
AC
2849ULONGEST
2850align_up (ULONGEST v, int n)
2851{
2852 /* Check that N is really a power of two. */
2853 gdb_assert (n && (n & (n-1)) == 0);
2854 return (v + n - 1) & -n;
2855}
2856
2857ULONGEST
2858align_down (ULONGEST v, int n)
2859{
2860 /* Check that N is really a power of two. */
2861 gdb_assert (n && (n & (n-1)) == 0);
2862 return (v & -n);
2863}
ae5a43e0
DJ
2864
2865/* Allocation function for the libiberty hash table which uses an
2866 obstack. The obstack is passed as DATA. */
2867
2868void *
2869hashtab_obstack_allocate (void *data, size_t size, size_t count)
2870{
241fd515 2871 size_t total = size * count;
ae5a43e0 2872 void *ptr = obstack_alloc ((struct obstack *) data, total);
e0627e85 2873
ae5a43e0
DJ
2874 memset (ptr, 0, total);
2875 return ptr;
2876}
2877
2878/* Trivial deallocation function for the libiberty splay tree and hash
2879 table - don't deallocate anything. Rely on later deletion of the
2880 obstack. DATA will be the obstack, although it is not needed
2881 here. */
2882
2883void
2884dummy_obstack_deallocate (void *object, void *data)
2885{
2886 return;
2887}
253c8abb 2888
e1024ff1
DJ
2889/* Simple, portable version of dirname that does not modify its
2890 argument. */
2891
d721ba37 2892std::string
e1024ff1
DJ
2893ldirname (const char *filename)
2894{
d721ba37 2895 std::string dirname;
e1024ff1 2896 const char *base = lbasename (filename);
e1024ff1
DJ
2897
2898 while (base > filename && IS_DIR_SEPARATOR (base[-1]))
2899 --base;
2900
2901 if (base == filename)
d721ba37 2902 return dirname;
e1024ff1 2903
d721ba37 2904 dirname = std::string (filename, base - filename);
e1024ff1
DJ
2905
2906 /* On DOS based file systems, convert "d:foo" to "d:.", so that we
2907 create "d:./bar" later instead of the (different) "d:/bar". */
2908 if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
2909 && !IS_DIR_SEPARATOR (filename[0]))
2910 dirname[base++ - filename] = '.';
2911
e1024ff1
DJ
2912 return dirname;
2913}
d1a41061
PP
2914
2915/* Call libiberty's buildargv, and return the result.
2916 If buildargv fails due to out-of-memory, call nomem.
2917 Therefore, the returned value is guaranteed to be non-NULL,
2918 unless the parameter itself is NULL. */
2919
2920char **
2921gdb_buildargv (const char *s)
2922{
2923 char **argv = buildargv (s);
e0627e85 2924
d1a41061 2925 if (s != NULL && argv == NULL)
d26e3629 2926 malloc_failure (0);
d1a41061
PP
2927 return argv;
2928}
3c16cced 2929
dc146f7c
VP
2930int
2931compare_positive_ints (const void *ap, const void *bp)
2932{
2933 /* Because we know we're comparing two ints which are positive,
2934 there's no danger of overflow here. */
2935 return * (int *) ap - * (int *) bp;
2936}
2937
f8eba3c6
TT
2938/* String compare function for qsort. */
2939
2940int
2941compare_strings (const void *arg1, const void *arg2)
2942{
2943 const char **s1 = (const char **) arg1;
2944 const char **s2 = (const char **) arg2;
2945
2946 return strcmp (*s1, *s2);
2947}
2948
d18b8b7a 2949#define AMBIGUOUS_MESS1 ".\nMatching formats:"
3e43a32a
MS
2950#define AMBIGUOUS_MESS2 \
2951 ".\nUse \"set gnutarget format-name\" to specify the format."
d18b8b7a
HZ
2952
2953const char *
2954gdb_bfd_errmsg (bfd_error_type error_tag, char **matching)
2955{
2956 char *ret, *retp;
2957 int ret_len;
2958 char **p;
2959
2960 /* Check if errmsg just need simple return. */
2961 if (error_tag != bfd_error_file_ambiguously_recognized || matching == NULL)
2962 return bfd_errmsg (error_tag);
2963
2964 ret_len = strlen (bfd_errmsg (error_tag)) + strlen (AMBIGUOUS_MESS1)
2965 + strlen (AMBIGUOUS_MESS2);
2966 for (p = matching; *p; p++)
2967 ret_len += strlen (*p) + 1;
224c3ddb 2968 ret = (char *) xmalloc (ret_len + 1);
d18b8b7a
HZ
2969 retp = ret;
2970 make_cleanup (xfree, ret);
2971
2972 strcpy (retp, bfd_errmsg (error_tag));
2973 retp += strlen (retp);
2974
2975 strcpy (retp, AMBIGUOUS_MESS1);
2976 retp += strlen (retp);
2977
2978 for (p = matching; *p; p++)
2979 {
2980 sprintf (retp, " %s", *p);
2981 retp += strlen (retp);
2982 }
2983 xfree (matching);
2984
2985 strcpy (retp, AMBIGUOUS_MESS2);
2986
2987 return ret;
2988}
2989
74164c56
JK
2990/* Return ARGS parsed as a valid pid, or throw an error. */
2991
2992int
c0939df1 2993parse_pid_to_attach (const char *args)
74164c56
JK
2994{
2995 unsigned long pid;
2996 char *dummy;
2997
2998 if (!args)
2999 error_no_arg (_("process-id to attach"));
3000
c0939df1 3001 dummy = (char *) args;
74164c56
JK
3002 pid = strtoul (args, &dummy, 0);
3003 /* Some targets don't set errno on errors, grrr! */
3004 if ((pid == 0 && dummy == args) || dummy != &args[strlen (args)])
3005 error (_("Illegal process-id: %s."), args);
3006
3007 return pid;
3008}
3009
353d1d73
JK
3010/* Helper for make_bpstat_clear_actions_cleanup. */
3011
3012static void
3013do_bpstat_clear_actions_cleanup (void *unused)
3014{
3015 bpstat_clear_actions ();
3016}
3017
3018/* Call bpstat_clear_actions for the case an exception is throw. You should
3019 discard_cleanups if no exception is caught. */
3020
3021struct cleanup *
3022make_bpstat_clear_actions_cleanup (void)
3023{
3024 return make_cleanup (do_bpstat_clear_actions_cleanup, NULL);
3025}
3026
df15bd07
JK
3027/* Check for GCC >= 4.x according to the symtab->producer string. Return minor
3028 version (x) of 4.x in such case. If it is not GCC or it is GCC older than
3029 4.x return -1. If it is GCC 5.x or higher return INT_MAX. */
3030
3031int
3032producer_is_gcc_ge_4 (const char *producer)
3033{
df15bd07 3034 int major, minor;
b1ffba5a
MW
3035
3036 if (! producer_is_gcc (producer, &major, &minor))
3037 return -1;
df15bd07
JK
3038 if (major < 4)
3039 return -1;
3040 if (major > 4)
3041 return INT_MAX;
3042 return minor;
3043}
3044
cc7039d3
JB
3045/* Returns nonzero if the given PRODUCER string is GCC and sets the MAJOR
3046 and MINOR versions when not NULL. Returns zero if the given PRODUCER
b1ffba5a
MW
3047 is NULL or it isn't GCC. */
3048
cc7039d3 3049int
b1ffba5a 3050producer_is_gcc (const char *producer, int *major, int *minor)
38360086
MW
3051{
3052 const char *cs;
38360086 3053
61012eef 3054 if (producer != NULL && startswith (producer, "GNU "))
38360086 3055 {
b1ffba5a
MW
3056 int maj, min;
3057
3058 if (major == NULL)
3059 major = &maj;
3060 if (minor == NULL)
3061 minor = &min;
3062
9c37b5ae 3063 /* Skip any identifier after "GNU " - such as "C11" or "C++".
38360086
MW
3064 A full producer string might look like:
3065 "GNU C 4.7.2"
3066 "GNU Fortran 4.8.2 20140120 (Red Hat 4.8.2-16) -mtune=generic ..."
3067 "GNU C++14 5.0.0 20150123 (experimental)"
3068 */
3069 cs = &producer[strlen ("GNU ")];
3070 while (*cs && !isspace (*cs))
3071 cs++;
3072 if (*cs && isspace (*cs))
3073 cs++;
b1ffba5a 3074 if (sscanf (cs, "%d.%d", major, minor) == 2)
cc7039d3 3075 return 1;
38360086
MW
3076 }
3077
3078 /* Not recognized as GCC. */
cc7039d3 3079 return 0;
38360086
MW
3080}
3081
e4ab2fad
JK
3082/* Helper for make_cleanup_free_char_ptr_vec. */
3083
3084static void
3085do_free_char_ptr_vec (void *arg)
3086{
19ba03f4 3087 VEC (char_ptr) *char_ptr_vec = (VEC (char_ptr) *) arg;
e4ab2fad
JK
3088
3089 free_char_ptr_vec (char_ptr_vec);
3090}
3091
3092/* Make cleanup handler calling xfree for each element of CHAR_PTR_VEC and
3093 final VEC_free for CHAR_PTR_VEC itself.
3094
3095 You must not modify CHAR_PTR_VEC after this cleanup registration as the
3096 CHAR_PTR_VEC base address may change on its updates. Contrary to VEC_free
3097 this function does not (cannot) clear the pointer. */
3098
3099struct cleanup *
3100make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
3101{
3102 return make_cleanup (do_free_char_ptr_vec, char_ptr_vec);
3103}
3104
6dea1fbd
JK
3105/* Substitute all occurences of string FROM by string TO in *STRINGP. *STRINGP
3106 must come from xrealloc-compatible allocator and it may be updated. FROM
1564a261
JK
3107 needs to be delimited by IS_DIR_SEPARATOR or DIRNAME_SEPARATOR (or be
3108 located at the start or end of *STRINGP. */
6dea1fbd
JK
3109
3110void
3111substitute_path_component (char **stringp, const char *from, const char *to)
3112{
3113 char *string = *stringp, *s;
3114 const size_t from_len = strlen (from);
3115 const size_t to_len = strlen (to);
3116
3117 for (s = string;;)
3118 {
3119 s = strstr (s, from);
3120 if (s == NULL)
3121 break;
3122
1564a261
JK
3123 if ((s == string || IS_DIR_SEPARATOR (s[-1])
3124 || s[-1] == DIRNAME_SEPARATOR)
3125 && (s[from_len] == '\0' || IS_DIR_SEPARATOR (s[from_len])
3126 || s[from_len] == DIRNAME_SEPARATOR))
6dea1fbd
JK
3127 {
3128 char *string_new;
3129
224c3ddb
SM
3130 string_new
3131 = (char *) xrealloc (string, (strlen (string) + to_len + 1));
6dea1fbd
JK
3132
3133 /* Relocate the current S pointer. */
3134 s = s - string + string_new;
3135 string = string_new;
3136
3137 /* Replace from by to. */
3138 memmove (&s[to_len], &s[from_len], strlen (&s[from_len]) + 1);
3139 memcpy (s, to, to_len);
3140
3141 s += to_len;
3142 }
3143 else
3144 s++;
3145 }
3146
3147 *stringp = string;
3148}
3149
0b6cb71e
DE
3150#ifdef HAVE_WAITPID
3151
3152#ifdef SIGALRM
3153
3154/* SIGALRM handler for waitpid_with_timeout. */
3155
3156static void
3157sigalrm_handler (int signo)
3158{
3159 /* Nothing to do. */
3160}
3161
3162#endif
3163
3164/* Wrapper to wait for child PID to die with TIMEOUT.
3165 TIMEOUT is the time to stop waiting in seconds.
3166 If TIMEOUT is zero, pass WNOHANG to waitpid.
3167 Returns PID if it was successfully waited for, otherwise -1.
3168
3169 Timeouts are currently implemented with alarm and SIGALRM.
3170 If the host does not support them, this waits "forever".
3171 It would be odd though for a host to have waitpid and not SIGALRM. */
3172
3173pid_t
3174wait_to_die_with_timeout (pid_t pid, int *status, int timeout)
3175{
3176 pid_t waitpid_result;
3177
3178 gdb_assert (pid > 0);
3179 gdb_assert (timeout >= 0);
3180
3181 if (timeout > 0)
3182 {
3183#ifdef SIGALRM
3184#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3185 struct sigaction sa, old_sa;
3186
3187 sa.sa_handler = sigalrm_handler;
3188 sigemptyset (&sa.sa_mask);
3189 sa.sa_flags = 0;
3190 sigaction (SIGALRM, &sa, &old_sa);
3191#else
a40805d4 3192 sighandler_t ofunc;
0b6cb71e 3193
a40805d4 3194 ofunc = signal (SIGALRM, sigalrm_handler);
0b6cb71e
DE
3195#endif
3196
3197 alarm (timeout);
3198#endif
3199
3200 waitpid_result = waitpid (pid, status, 0);
3201
3202#ifdef SIGALRM
3203 alarm (0);
3204#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3205 sigaction (SIGALRM, &old_sa, NULL);
3206#else
3207 signal (SIGALRM, ofunc);
3208#endif
3209#endif
3210 }
3211 else
3212 waitpid_result = waitpid (pid, status, WNOHANG);
3213
3214 if (waitpid_result == pid)
3215 return pid;
3216 else
3217 return -1;
3218}
3219
3220#endif /* HAVE_WAITPID */
3221
202cbf1c
JK
3222/* Provide fnmatch compatible function for FNM_FILE_NAME matching of host files.
3223 Both FNM_FILE_NAME and FNM_NOESCAPE must be set in FLAGS.
3224
3225 It handles correctly HAVE_DOS_BASED_FILE_SYSTEM and
3226 HAVE_CASE_INSENSITIVE_FILE_SYSTEM. */
3227
3228int
3229gdb_filename_fnmatch (const char *pattern, const char *string, int flags)
3230{
3231 gdb_assert ((flags & FNM_FILE_NAME) != 0);
3232
3233 /* It is unclear how '\' escaping vs. directory separator should coexist. */
3234 gdb_assert ((flags & FNM_NOESCAPE) != 0);
3235
3236#ifdef HAVE_DOS_BASED_FILE_SYSTEM
3237 {
3238 char *pattern_slash, *string_slash;
3239
3240 /* Replace '\' by '/' in both strings. */
3241
0ae1c716 3242 pattern_slash = (char *) alloca (strlen (pattern) + 1);
202cbf1c
JK
3243 strcpy (pattern_slash, pattern);
3244 pattern = pattern_slash;
3245 for (; *pattern_slash != 0; pattern_slash++)
3246 if (IS_DIR_SEPARATOR (*pattern_slash))
3247 *pattern_slash = '/';
3248
0ae1c716 3249 string_slash = (char *) alloca (strlen (string) + 1);
202cbf1c
JK
3250 strcpy (string_slash, string);
3251 string = string_slash;
3252 for (; *string_slash != 0; string_slash++)
3253 if (IS_DIR_SEPARATOR (*string_slash))
3254 *string_slash = '/';
3255 }
3256#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
3257
3258#ifdef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
3259 flags |= FNM_CASEFOLD;
3260#endif /* HAVE_CASE_INSENSITIVE_FILE_SYSTEM */
3261
3262 return fnmatch (pattern, string, flags);
3263}
3264
cce0e923
DE
3265/* Return the number of path elements in PATH.
3266 / = 1
3267 /foo = 2
3268 /foo/ = 2
3269 foo/bar = 2
3270 foo/ = 1 */
3271
3272int
3273count_path_elements (const char *path)
3274{
3275 int count = 0;
3276 const char *p = path;
3277
3278 if (HAS_DRIVE_SPEC (p))
3279 {
3280 p = STRIP_DRIVE_SPEC (p);
3281 ++count;
3282 }
3283
3284 while (*p != '\0')
3285 {
3286 if (IS_DIR_SEPARATOR (*p))
3287 ++count;
3288 ++p;
3289 }
3290
3291 /* Backup one if last character is /, unless it's the only one. */
3292 if (p > path + 1 && IS_DIR_SEPARATOR (p[-1]))
3293 --count;
3294
3295 /* Add one for the file name, if present. */
3296 if (p > path && !IS_DIR_SEPARATOR (p[-1]))
3297 ++count;
3298
3299 return count;
3300}
3301
3302/* Remove N leading path elements from PATH.
3303 N must be non-negative.
3304 If PATH has more than N path elements then return NULL.
3305 If PATH has exactly N path elements then return "".
3306 See count_path_elements for a description of how we do the counting. */
3307
3308const char *
3309strip_leading_path_elements (const char *path, int n)
3310{
3311 int i = 0;
3312 const char *p = path;
3313
3314 gdb_assert (n >= 0);
3315
3316 if (n == 0)
3317 return p;
3318
3319 if (HAS_DRIVE_SPEC (p))
3320 {
3321 p = STRIP_DRIVE_SPEC (p);
3322 ++i;
3323 }
3324
3325 while (i < n)
3326 {
3327 while (*p != '\0' && !IS_DIR_SEPARATOR (*p))
3328 ++p;
3329 if (*p == '\0')
3330 {
3331 if (i + 1 == n)
3332 return "";
3333 return NULL;
3334 }
3335 ++p;
3336 ++i;
3337 }
3338
3339 return p;
3340}
3341
2c0b251b
PA
3342/* Provide a prototype to silence -Wmissing-prototypes. */
3343extern initialize_file_ftype _initialize_utils;
3344
3c16cced
PA
3345void
3346_initialize_utils (void)
3347{
3348 add_internal_problem_command (&internal_error_problem);
3349 add_internal_problem_command (&internal_warning_problem);
57fcfb1b 3350 add_internal_problem_command (&demangler_warning_problem);
3c16cced 3351}
This page took 2.214105 seconds and 4 git commands to generate.