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