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