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