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