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