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