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