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