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