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