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