gdb/
[deliverable/binutils-gdb.git] / gdb / utils.c
CommitLineData
c906108c 1/* General utility routines for GDB, the GNU debugger.
1bac305b 2
8acc9f48 3 Copyright (C) 1986-2013 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"
5a56e9c5 21#include "dyn-string.h"
4e8f7a8b
DJ
22#include "gdb_assert.h"
23#include <ctype.h>
24#include "gdb_string.h"
0b6cb71e 25#include "gdb_wait.h"
4e8f7a8b 26#include "event-top.h"
60250e8b 27#include "exceptions.h"
95e54da7 28#include "gdbthread.h"
202cbf1c 29#include "fnmatch.h"
cbb099e8 30#include "gdb_bfd.h"
7991dee7
JK
31#ifdef HAVE_SYS_RESOURCE_H
32#include <sys/resource.h>
33#endif /* HAVE_SYS_RESOURCE_H */
4e8f7a8b 34
6a83354a
AC
35#ifdef TUI
36#include "tui/tui.h" /* For tui_get_command_dimension. */
37#endif
38
9d271fd8
AC
39#ifdef __GO32__
40#include <pc.h>
41#endif
42
581e13c1 43/* SunOS's curses.h has a '#define reg register' in it. Thank you Sun. */
c906108c
SS
44#ifdef reg
45#undef reg
46#endif
47
042be3a9 48#include <signal.h>
0a1c4d10 49#include "timeval-utils.h"
c906108c
SS
50#include "gdbcmd.h"
51#include "serial.h"
52#include "bfd.h"
53#include "target.h"
50f182aa 54#include "gdb-demangle.h"
c906108c
SS
55#include "expression.h"
56#include "language.h"
234b45d4 57#include "charset.h"
c906108c 58#include "annotate.h"
303c8ebd 59#include "filenames.h"
7b90c3f9 60#include "symfile.h"
ae5a43e0 61#include "gdb_obstack.h"
9544c605 62#include "gdbcore.h"
698ba934 63#include "top.h"
7c953934 64#include "main.h"
cb08cc53 65#include "solist.h"
c906108c 66
8731e58e 67#include "inferior.h" /* for signed_pointer_to_address */
ac2e2ef7 68
3b78cdbb 69#include "gdb_curses.h"
020cc13c 70
dbda9972 71#include "readline/readline.h"
c906108c 72
75feb17d
DJ
73#include <sys/time.h>
74#include <time.h>
75
8626589c 76#include "gdb_usleep.h"
390a8aca 77#include "interps.h"
dc92e161 78#include "gdb_regex.h"
8626589c 79
a3828db0 80#if !HAVE_DECL_MALLOC
5ac79d78 81extern PTR malloc (); /* ARI: PTR */
3c37485b 82#endif
a3828db0 83#if !HAVE_DECL_REALLOC
5ac79d78 84extern PTR realloc (); /* ARI: PTR */
0e52036f 85#endif
a3828db0 86#if !HAVE_DECL_FREE
81b8eb80
AC
87extern void free ();
88#endif
81b8eb80 89
9a4105ab 90void (*deprecated_error_begin_hook) (void);
c906108c
SS
91
92/* Prototypes for local functions */
93
d9fcf2fb 94static void vfprintf_maybe_filtered (struct ui_file *, const char *,
a0b31db1 95 va_list, int) ATTRIBUTE_PRINTF (2, 0);
c906108c 96
d9fcf2fb 97static void fputs_maybe_filtered (const char *, struct ui_file *, int);
c906108c 98
a14ed312 99static void prompt_for_continue (void);
c906108c 100
eb0d3137 101static void set_screen_size (void);
a14ed312 102static void set_width (void);
c906108c 103
260c0b2a
DE
104/* Time spent in prompt_for_continue in the currently executing command
105 waiting for user to respond.
106 Initialized in make_command_stats_cleanup.
107 Modified in prompt_for_continue and defaulted_query.
108 Used in report_command_stats. */
109
110static struct timeval prompt_for_continue_wait_time;
111
75feb17d
DJ
112/* A flag indicating whether to timestamp debugging messages. */
113
114static int debug_timestamp = 0;
115
581e13c1 116/* Nonzero if we have job control. */
c906108c
SS
117
118int job_control;
119
522002f9 120#ifndef HAVE_PYTHON
c906108c
SS
121/* Nonzero means a quit has been requested. */
122
123int quit_flag;
522002f9 124#endif /* HAVE_PYTHON */
c906108c
SS
125
126/* Nonzero means quit immediately if Control-C is typed now, rather
127 than waiting until QUIT is executed. Be careful in setting this;
128 code which executes with immediate_quit set has to be very careful
129 about being able to deal with being interrupted at any time. It is
130 almost always better to use QUIT; the only exception I can think of
131 is being able to quit out of a system call (using EINTR loses if
132 the SIGINT happens between the previous QUIT and the system call).
133 To immediately quit in the case in which a SIGINT happens between
134 the previous QUIT and setting immediate_quit (desirable anytime we
135 expect to block), call QUIT after setting immediate_quit. */
136
137int immediate_quit;
138
522002f9
TT
139#ifndef HAVE_PYTHON
140
141/* Clear the quit flag. */
142
143void
144clear_quit_flag (void)
145{
146 quit_flag = 0;
147}
148
149/* Set the quit flag. */
150
151void
152set_quit_flag (void)
153{
154 quit_flag = 1;
155}
156
157/* Return true if the quit flag has been set, false otherwise. */
158
159int
160check_quit_flag (void)
161{
162 /* This is written in a particular way to avoid races. */
163 if (quit_flag)
164 {
165 quit_flag = 0;
166 return 1;
167 }
168
169 return 0;
170}
171
172#endif /* HAVE_PYTHON */
173
c906108c
SS
174/* Nonzero means that strings with character values >0x7F should be printed
175 as octal escapes. Zero means just print the value (e.g. it's an
176 international character, and the terminal or window can cope.) */
177
178int sevenbit_strings = 0;
920d2a44
AC
179static void
180show_sevenbit_strings (struct ui_file *file, int from_tty,
181 struct cmd_list_element *c, const char *value)
182{
3e43a32a
MS
183 fprintf_filtered (file, _("Printing of 8-bit characters "
184 "in strings as \\nnn is %s.\n"),
920d2a44
AC
185 value);
186}
c906108c
SS
187
188/* String to be printed before error messages, if any. */
189
190char *error_pre_print;
191
192/* String to be printed before quit messages, if any. */
193
194char *quit_pre_print;
195
196/* String to be printed before warning messages, if any. */
197
198char *warning_pre_print = "\nwarning: ";
199
200int pagination_enabled = 1;
920d2a44
AC
201static void
202show_pagination_enabled (struct ui_file *file, int from_tty,
203 struct cmd_list_element *c, const char *value)
204{
205 fprintf_filtered (file, _("State of pagination is %s.\n"), value);
206}
207
c906108c 208\f
c27f5738 209/* Cleanup utilities.
c5aa993b 210
c27f5738
DE
211 These are not defined in cleanups.c (nor declared in cleanups.h)
212 because while they use the "cleanup API" they are not part of the
213 "cleanup API". */
7a292a7a 214
7a292a7a 215static void
fba45db2 216do_freeargv (void *arg)
7a292a7a 217{
c5aa993b 218 freeargv ((char **) arg);
7a292a7a
SS
219}
220
221struct cleanup *
fba45db2 222make_cleanup_freeargv (char **arg)
7a292a7a 223{
e0088cfd 224 return make_cleanup (do_freeargv, arg);
7a292a7a
SS
225}
226
5a56e9c5
DE
227static void
228do_dyn_string_delete (void *arg)
229{
230 dyn_string_delete ((dyn_string_t) arg);
231}
232
233struct cleanup *
234make_cleanup_dyn_string_delete (dyn_string_t arg)
235{
e0088cfd 236 return make_cleanup (do_dyn_string_delete, arg);
5a56e9c5
DE
237}
238
5c65bbb6
AC
239static void
240do_bfd_close_cleanup (void *arg)
241{
cbb099e8 242 gdb_bfd_unref (arg);
5c65bbb6
AC
243}
244
245struct cleanup *
f9a062ff 246make_cleanup_bfd_unref (bfd *abfd)
5c65bbb6
AC
247{
248 return make_cleanup (do_bfd_close_cleanup, abfd);
249}
250
f5ff8c83
AC
251static void
252do_close_cleanup (void *arg)
253{
f042532c 254 int *fd = arg;
e0627e85 255
f042532c 256 close (*fd);
f5ff8c83
AC
257}
258
259struct cleanup *
260make_cleanup_close (int fd)
261{
f042532c 262 int *saved_fd = xmalloc (sizeof (fd));
e0627e85 263
f042532c 264 *saved_fd = fd;
a05016c0 265 return make_cleanup_dtor (do_close_cleanup, saved_fd, xfree);
f5ff8c83
AC
266}
267
7c8a8b04
TT
268/* Helper function which does the work for make_cleanup_fclose. */
269
270static void
271do_fclose_cleanup (void *arg)
272{
c02866a0 273 FILE *file = arg;
e0627e85 274
c02866a0 275 fclose (file);
7c8a8b04
TT
276}
277
278/* Return a new cleanup that closes FILE. */
279
280struct cleanup *
281make_cleanup_fclose (FILE *file)
282{
283 return make_cleanup (do_fclose_cleanup, file);
284}
285
16ad9370
TT
286/* Helper function which does the work for make_cleanup_obstack_free. */
287
288static void
289do_obstack_free (void *arg)
290{
291 struct obstack *ob = arg;
e0627e85 292
16ad9370
TT
293 obstack_free (ob, NULL);
294}
295
296/* Return a new cleanup that frees OBSTACK. */
297
298struct cleanup *
299make_cleanup_obstack_free (struct obstack *obstack)
300{
301 return make_cleanup (do_obstack_free, obstack);
302}
303
11cf8741 304static void
d9fcf2fb 305do_ui_file_delete (void *arg)
11cf8741 306{
d9fcf2fb 307 ui_file_delete (arg);
11cf8741
JM
308}
309
310struct cleanup *
d9fcf2fb 311make_cleanup_ui_file_delete (struct ui_file *arg)
11cf8741 312{
e0088cfd 313 return make_cleanup (do_ui_file_delete, arg);
11cf8741
JM
314}
315
8d4d924b
JK
316/* Helper function for make_cleanup_ui_out_redirect_pop. */
317
318static void
319do_ui_out_redirect_pop (void *arg)
320{
321 struct ui_out *uiout = arg;
322
323 if (ui_out_redirect (uiout, NULL) < 0)
324 warning (_("Cannot restore redirection of the current output protocol"));
325}
326
327/* Return a new cleanup that pops the last redirection by ui_out_redirect
328 with NULL parameter. */
329
330struct cleanup *
331make_cleanup_ui_out_redirect_pop (struct ui_out *uiout)
332{
e0088cfd 333 return make_cleanup (do_ui_out_redirect_pop, uiout);
8d4d924b
JK
334}
335
7b90c3f9
JB
336static void
337do_free_section_addr_info (void *arg)
338{
339 free_section_addr_info (arg);
340}
341
342struct cleanup *
343make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
344{
e0088cfd 345 return make_cleanup (do_free_section_addr_info, addrs);
7b90c3f9
JB
346}
347
0b080f59
VP
348struct restore_integer_closure
349{
350 int *variable;
351 int value;
352};
353
354static void
355restore_integer (void *p)
356{
357 struct restore_integer_closure *closure = p;
e0627e85 358
0b080f59
VP
359 *(closure->variable) = closure->value;
360}
7b90c3f9 361
3e43a32a
MS
362/* Remember the current value of *VARIABLE and make it restored when
363 the cleanup is run. */
5da1313b 364
c906108c 365struct cleanup *
0b080f59
VP
366make_cleanup_restore_integer (int *variable)
367{
368 struct restore_integer_closure *c =
369 xmalloc (sizeof (struct restore_integer_closure));
e0627e85 370
0b080f59
VP
371 c->variable = variable;
372 c->value = *variable;
373
e0088cfd 374 return make_cleanup_dtor (restore_integer, (void *) c, xfree);
0b080f59
VP
375}
376
3e43a32a
MS
377/* Remember the current value of *VARIABLE and make it restored when
378 the cleanup is run. */
5da1313b
JK
379
380struct cleanup *
381make_cleanup_restore_uinteger (unsigned int *variable)
382{
383 return make_cleanup_restore_integer ((int *) variable);
384}
385
c0edd9ed
JK
386/* Helper for make_cleanup_unpush_target. */
387
388static void
389do_unpush_target (void *arg)
390{
391 struct target_ops *ops = arg;
392
393 unpush_target (ops);
394}
395
396/* Return a new cleanup that unpushes OPS. */
397
398struct cleanup *
399make_cleanup_unpush_target (struct target_ops *ops)
400{
e0088cfd 401 return make_cleanup (do_unpush_target, ops);
c0edd9ed
JK
402}
403
8e3b41a9
JK
404/* Helper for make_cleanup_htab_delete compile time checking the types. */
405
406static void
407do_htab_delete_cleanup (void *htab_voidp)
408{
409 htab_t htab = htab_voidp;
410
411 htab_delete (htab);
412}
413
414/* Return a new cleanup that deletes HTAB. */
415
416struct cleanup *
417make_cleanup_htab_delete (htab_t htab)
418{
419 return make_cleanup (do_htab_delete_cleanup, htab);
420}
421
5da1313b
JK
422struct restore_ui_file_closure
423{
424 struct ui_file **variable;
425 struct ui_file *value;
426};
427
428static void
429do_restore_ui_file (void *p)
430{
431 struct restore_ui_file_closure *closure = p;
432
433 *(closure->variable) = closure->value;
434}
435
436/* Remember the current value of *VARIABLE and make it restored when
437 the cleanup is run. */
438
439struct cleanup *
440make_cleanup_restore_ui_file (struct ui_file **variable)
441{
442 struct restore_ui_file_closure *c = XNEW (struct restore_ui_file_closure);
443
444 c->variable = variable;
445 c->value = *variable;
446
447 return make_cleanup_dtor (do_restore_ui_file, (void *) c, xfree);
448}
449
028d0ed5
TJB
450/* Helper for make_cleanup_value_free_to_mark. */
451
452static void
453do_value_free_to_mark (void *value)
454{
455 value_free_to_mark ((struct value *) value);
456}
457
458/* Free all values allocated since MARK was obtained by value_mark
459 (except for those released) when the cleanup is run. */
460
461struct cleanup *
462make_cleanup_value_free_to_mark (struct value *mark)
463{
e0088cfd 464 return make_cleanup (do_value_free_to_mark, mark);
028d0ed5
TJB
465}
466
72fc29ff
TT
467/* Helper for make_cleanup_value_free. */
468
469static void
470do_value_free (void *value)
471{
472 value_free (value);
473}
474
475/* Free VALUE. */
476
477struct cleanup *
478make_cleanup_value_free (struct value *value)
479{
e0088cfd 480 return make_cleanup (do_value_free, value);
72fc29ff
TT
481}
482
cb08cc53
JK
483/* Helper for make_cleanup_free_so. */
484
485static void
486do_free_so (void *arg)
487{
488 struct so_list *so = arg;
489
490 free_so (so);
491}
492
493/* Make cleanup handler calling free_so for SO. */
494
495struct cleanup *
496make_cleanup_free_so (struct so_list *so)
497{
e0088cfd 498 return make_cleanup (do_free_so, so);
cb08cc53
JK
499}
500
5b12a61c
JK
501/* Helper for make_cleanup_restore_current_language. */
502
503static void
504do_restore_current_language (void *p)
505{
506 enum language saved_lang = (uintptr_t) p;
507
508 set_language (saved_lang);
509}
510
511/* Remember the current value of CURRENT_LANGUAGE and make it restored when
512 the cleanup is run. */
513
514struct cleanup *
515make_cleanup_restore_current_language (void)
516{
517 enum language saved_lang = current_language->la_language;
518
519 return make_cleanup (do_restore_current_language,
520 (void *) (uintptr_t) saved_lang);
521}
522
c906108c
SS
523/* This function is useful for cleanups.
524 Do
525
c5aa993b
JM
526 foo = xmalloc (...);
527 old_chain = make_cleanup (free_current_contents, &foo);
c906108c
SS
528
529 to arrange to free the object thus allocated. */
530
531void
2f9429ae 532free_current_contents (void *ptr)
c906108c 533{
2f9429ae 534 void **location = ptr;
e0627e85 535
e2f9c474 536 if (location == NULL)
8e65ff28 537 internal_error (__FILE__, __LINE__,
e2e0b3e5 538 _("free_current_contents: NULL pointer"));
2f9429ae 539 if (*location != NULL)
e2f9c474 540 {
b8c9b27d 541 xfree (*location);
e2f9c474
AC
542 *location = NULL;
543 }
c906108c 544}
c906108c 545\f
c5aa993b 546
8731e58e 547
f5a96129
AC
548/* Print a warning message. The first argument STRING is the warning
549 message, used as an fprintf format string, the second is the
550 va_list of arguments for that string. A warning is unfiltered (not
551 paginated) so that the user does not need to page through each
552 screen full of warnings when there are lots of them. */
c906108c
SS
553
554void
f5a96129 555vwarning (const char *string, va_list args)
c906108c 556{
9a4105ab
AC
557 if (deprecated_warning_hook)
558 (*deprecated_warning_hook) (string, args);
f5a96129
AC
559 else
560 {
561 target_terminal_ours ();
581e13c1 562 wrap_here (""); /* Force out any buffered output. */
f5a96129
AC
563 gdb_flush (gdb_stdout);
564 if (warning_pre_print)
306d9ac5 565 fputs_unfiltered (warning_pre_print, gdb_stderr);
f5a96129
AC
566 vfprintf_unfiltered (gdb_stderr, string, args);
567 fprintf_unfiltered (gdb_stderr, "\n");
568 va_end (args);
569 }
c906108c
SS
570}
571
572/* Print a warning message.
573 The first argument STRING is the warning message, used as a fprintf string,
574 and the remaining args are passed as arguments to it.
575 The primary difference between warnings and errors is that a warning
576 does not force the return to command level. */
577
c906108c 578void
8731e58e 579warning (const char *string, ...)
c906108c
SS
580{
581 va_list args;
e0627e85 582
c906108c 583 va_start (args, string);
f5a96129
AC
584 vwarning (string, args);
585 va_end (args);
c906108c
SS
586}
587
c906108c
SS
588/* Print an error message and return to command level.
589 The first argument STRING is the error message, used as a fprintf string,
590 and the remaining args are passed as arguments to it. */
591
c25c4a8b 592void
4ce44c66
JM
593verror (const char *string, va_list args)
594{
6b1b7650 595 throw_verror (GENERIC_ERROR, string, args);
4ce44c66
JM
596}
597
c25c4a8b 598void
8731e58e 599error (const char *string, ...)
c906108c
SS
600{
601 va_list args;
e0627e85 602
c906108c 603 va_start (args, string);
6b1b7650 604 throw_verror (GENERIC_ERROR, string, args);
4ce44c66 605 va_end (args);
c906108c
SS
606}
607
d75e3c94
JJ
608/* Print an error message and quit.
609 The first argument STRING is the error message, used as a fprintf string,
610 and the remaining args are passed as arguments to it. */
611
c25c4a8b 612void
d75e3c94
JJ
613vfatal (const char *string, va_list args)
614{
6b1b7650 615 throw_vfatal (string, args);
d75e3c94
JJ
616}
617
c25c4a8b 618void
d75e3c94
JJ
619fatal (const char *string, ...)
620{
621 va_list args;
e0627e85 622
d75e3c94 623 va_start (args, string);
6b1b7650 624 throw_vfatal (string, args);
d75e3c94
JJ
625 va_end (args);
626}
627
c25c4a8b 628void
d75e3c94 629error_stream (struct ui_file *stream)
2acceee2 630{
759ef836 631 char *message = ui_file_xstrdup (stream, NULL);
e0627e85 632
6b1b7650 633 make_cleanup (xfree, message);
8a3fe4f8 634 error (("%s"), message);
2acceee2 635}
c906108c 636
7991dee7
JK
637/* Dump core trying to increase the core soft limit to hard limit first. */
638
639static void
640dump_core (void)
641{
642#ifdef HAVE_SETRLIMIT
643 struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY };
644
645 setrlimit (RLIMIT_CORE, &rlim);
646#endif /* HAVE_SETRLIMIT */
647
648 abort (); /* NOTE: GDB has only three calls to abort(). */
649}
650
3e43a32a
MS
651/* Check whether GDB will be able to dump core using the dump_core
652 function. */
7991dee7
JK
653
654static int
655can_dump_core (const char *reason)
656{
657#ifdef HAVE_GETRLIMIT
658 struct rlimit rlim;
659
660 /* Be quiet and assume we can dump if an error is returned. */
661 if (getrlimit (RLIMIT_CORE, &rlim) != 0)
662 return 1;
663
664 if (rlim.rlim_max == 0)
665 {
666 fprintf_unfiltered (gdb_stderr,
3e43a32a
MS
667 _("%s\nUnable to dump core, use `ulimit -c"
668 " unlimited' before executing GDB next time.\n"),
669 reason);
7991dee7
JK
670 return 0;
671 }
672#endif /* HAVE_GETRLIMIT */
673
674 return 1;
675}
676
3c16cced
PA
677/* Allow the user to configure the debugger behavior with respect to
678 what to do when an internal problem is detected. */
679
680const char internal_problem_ask[] = "ask";
681const char internal_problem_yes[] = "yes";
682const char internal_problem_no[] = "no";
40478521 683static const char *const internal_problem_modes[] =
3c16cced
PA
684{
685 internal_problem_ask,
686 internal_problem_yes,
687 internal_problem_no,
688 NULL
689};
3c16cced 690
581e13c1 691/* Print a message reporting an internal error/warning. Ask the user
dec43320
AC
692 if they want to continue, dump core, or just exit. Return
693 something to indicate a quit. */
c906108c 694
dec43320 695struct internal_problem
c906108c 696{
dec43320 697 const char *name;
3c16cced
PA
698 const char *should_quit;
699 const char *should_dump_core;
dec43320
AC
700};
701
702/* Report a problem, internal to GDB, to the user. Once the problem
703 has been reported, and assuming GDB didn't quit, the caller can
704 either allow execution to resume or throw an error. */
705
a0b31db1 706static void ATTRIBUTE_PRINTF (4, 0)
dec43320 707internal_vproblem (struct internal_problem *problem,
8731e58e 708 const char *file, int line, const char *fmt, va_list ap)
dec43320 709{
dec43320 710 static int dejavu;
375fc983 711 int quit_p;
7be570e7 712 int dump_core_p;
714b1282 713 char *reason;
48be7c1b 714 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
c906108c 715
dec43320 716 /* Don't allow infinite error/warning recursion. */
714b1282
AC
717 {
718 static char msg[] = "Recursive internal problem.\n";
5d502164 719
714b1282
AC
720 switch (dejavu)
721 {
722 case 0:
723 dejavu = 1;
724 break;
725 case 1:
726 dejavu = 2;
727 fputs_unfiltered (msg, gdb_stderr);
7991dee7 728 abort (); /* NOTE: GDB has only three calls to abort(). */
714b1282
AC
729 default:
730 dejavu = 3;
bf1d7d9c
JB
731 /* Newer GLIBC versions put the warn_unused_result attribute
732 on write, but this is one of those rare cases where
733 ignoring the return value is correct. Casting to (void)
734 does not fix this problem. This is the solution suggested
735 at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */
736 if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg))
7991dee7 737 abort (); /* NOTE: GDB has only three calls to abort(). */
714b1282
AC
738 exit (1);
739 }
740 }
c906108c 741
dec43320 742 /* Try to get the message out and at the start of a new line. */
4261bedc 743 target_terminal_ours ();
dec43320
AC
744 begin_line ();
745
714b1282
AC
746 /* Create a string containing the full error/warning message. Need
747 to call query with this full string, as otherwize the reason
748 (error/warning) and question become separated. Format using a
749 style similar to a compiler error message. Include extra detail
750 so that the user knows that they are living on the edge. */
751 {
752 char *msg;
5d502164 753
e623b504 754 msg = xstrvprintf (fmt, ap);
3e43a32a
MS
755 reason = xstrprintf ("%s:%d: %s: %s\n"
756 "A problem internal to GDB has been detected,\n"
757 "further debugging may prove unreliable.",
758 file, line, problem->name, msg);
714b1282
AC
759 xfree (msg);
760 make_cleanup (xfree, reason);
761 }
7be570e7 762
3c16cced 763 if (problem->should_quit == internal_problem_ask)
dec43320 764 {
dec43320 765 /* Default (yes/batch case) is to quit GDB. When in batch mode
3c16cced
PA
766 this lessens the likelihood of GDB going into an infinite
767 loop. */
e360902b 768 if (!confirm)
26bb68be
PP
769 {
770 /* Emit the message and quit. */
771 fputs_unfiltered (reason, gdb_stderr);
772 fputs_unfiltered ("\n", gdb_stderr);
773 quit_p = 1;
774 }
775 else
776 quit_p = query (_("%s\nQuit this debugging session? "), reason);
dec43320 777 }
3c16cced
PA
778 else if (problem->should_quit == internal_problem_yes)
779 quit_p = 1;
780 else if (problem->should_quit == internal_problem_no)
781 quit_p = 0;
782 else
783 internal_error (__FILE__, __LINE__, _("bad switch"));
dec43320 784
3c16cced 785 if (problem->should_dump_core == internal_problem_ask)
dec43320 786 {
7991dee7
JK
787 if (!can_dump_core (reason))
788 dump_core_p = 0;
789 else
790 {
791 /* Default (yes/batch case) is to dump core. This leaves a GDB
792 `dropping' so that it is easier to see that something went
793 wrong in GDB. */
794 dump_core_p = query (_("%s\nCreate a core file of GDB? "), reason);
795 }
dec43320 796 }
3c16cced 797 else if (problem->should_dump_core == internal_problem_yes)
7991dee7 798 dump_core_p = can_dump_core (reason);
3c16cced
PA
799 else if (problem->should_dump_core == internal_problem_no)
800 dump_core_p = 0;
801 else
802 internal_error (__FILE__, __LINE__, _("bad switch"));
7be570e7 803
375fc983 804 if (quit_p)
7be570e7
JM
805 {
806 if (dump_core_p)
7991dee7 807 dump_core ();
375fc983
AC
808 else
809 exit (1);
7be570e7
JM
810 }
811 else
812 {
813 if (dump_core_p)
375fc983 814 {
9b265ec2 815#ifdef HAVE_WORKING_FORK
375fc983 816 if (fork () == 0)
7991dee7 817 dump_core ();
9b265ec2 818#endif
375fc983 819 }
7be570e7 820 }
96baa820
JM
821
822 dejavu = 0;
48be7c1b 823 do_cleanups (cleanup);
dec43320
AC
824}
825
826static struct internal_problem internal_error_problem = {
3c16cced 827 "internal-error", internal_problem_ask, internal_problem_ask
dec43320
AC
828};
829
c25c4a8b 830void
8731e58e 831internal_verror (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
832{
833 internal_vproblem (&internal_error_problem, file, line, fmt, ap);
315a522e 834 deprecated_throw_reason (RETURN_ERROR);
c906108c
SS
835}
836
c25c4a8b 837void
8e65ff28 838internal_error (const char *file, int line, const char *string, ...)
4ce44c66
JM
839{
840 va_list ap;
e0627e85 841
4ce44c66 842 va_start (ap, string);
8e65ff28 843 internal_verror (file, line, string, ap);
4ce44c66
JM
844 va_end (ap);
845}
846
dec43320 847static struct internal_problem internal_warning_problem = {
3c16cced 848 "internal-warning", internal_problem_ask, internal_problem_ask
dec43320
AC
849};
850
851void
8731e58e 852internal_vwarning (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
853{
854 internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
855}
856
857void
858internal_warning (const char *file, int line, const char *string, ...)
859{
860 va_list ap;
e0627e85 861
dec43320
AC
862 va_start (ap, string);
863 internal_vwarning (file, line, string, ap);
864 va_end (ap);
865}
866
3c16cced
PA
867/* Dummy functions to keep add_prefix_cmd happy. */
868
869static void
870set_internal_problem_cmd (char *args, int from_tty)
871{
872}
873
874static void
875show_internal_problem_cmd (char *args, int from_tty)
876{
877}
878
879/* When GDB reports an internal problem (error or warning) it gives
880 the user the opportunity to quit GDB and/or create a core file of
881 the current debug session. This function registers a few commands
882 that make it possible to specify that GDB should always or never
883 quit or create a core file, without asking. The commands look
884 like:
885
886 maint set PROBLEM-NAME quit ask|yes|no
887 maint show PROBLEM-NAME quit
888 maint set PROBLEM-NAME corefile ask|yes|no
889 maint show PROBLEM-NAME corefile
890
891 Where PROBLEM-NAME is currently "internal-error" or
892 "internal-warning". */
893
894static void
895add_internal_problem_command (struct internal_problem *problem)
896{
897 struct cmd_list_element **set_cmd_list;
898 struct cmd_list_element **show_cmd_list;
899 char *set_doc;
900 char *show_doc;
901
902 set_cmd_list = xmalloc (sizeof (*set_cmd_list));
903 show_cmd_list = xmalloc (sizeof (*set_cmd_list));
904 *set_cmd_list = NULL;
905 *show_cmd_list = NULL;
906
907 set_doc = xstrprintf (_("Configure what GDB does when %s is detected."),
908 problem->name);
909
910 show_doc = xstrprintf (_("Show what GDB does when %s is detected."),
911 problem->name);
912
913 add_prefix_cmd ((char*) problem->name,
914 class_maintenance, set_internal_problem_cmd, set_doc,
915 set_cmd_list,
c4f7c687
MK
916 concat ("maintenance set ", problem->name, " ",
917 (char *) NULL),
3c16cced
PA
918 0/*allow-unknown*/, &maintenance_set_cmdlist);
919
920 add_prefix_cmd ((char*) problem->name,
921 class_maintenance, show_internal_problem_cmd, show_doc,
922 show_cmd_list,
c4f7c687
MK
923 concat ("maintenance show ", problem->name, " ",
924 (char *) NULL),
3c16cced
PA
925 0/*allow-unknown*/, &maintenance_show_cmdlist);
926
3e43a32a
MS
927 set_doc = xstrprintf (_("Set whether GDB should quit "
928 "when an %s is detected"),
3c16cced 929 problem->name);
3e43a32a
MS
930 show_doc = xstrprintf (_("Show whether GDB will quit "
931 "when an %s is detected"),
3c16cced
PA
932 problem->name);
933 add_setshow_enum_cmd ("quit", class_maintenance,
934 internal_problem_modes,
935 &problem->should_quit,
936 set_doc,
937 show_doc,
938 NULL, /* help_doc */
939 NULL, /* setfunc */
940 NULL, /* showfunc */
941 set_cmd_list,
942 show_cmd_list);
943
1eefb858
TT
944 xfree (set_doc);
945 xfree (show_doc);
946
3e43a32a
MS
947 set_doc = xstrprintf (_("Set whether GDB should create a core "
948 "file of GDB when %s is detected"),
3c16cced 949 problem->name);
3e43a32a
MS
950 show_doc = xstrprintf (_("Show whether GDB will create a core "
951 "file of GDB when %s is detected"),
3c16cced
PA
952 problem->name);
953 add_setshow_enum_cmd ("corefile", class_maintenance,
954 internal_problem_modes,
955 &problem->should_dump_core,
956 set_doc,
957 show_doc,
958 NULL, /* help_doc */
959 NULL, /* setfunc */
960 NULL, /* showfunc */
961 set_cmd_list,
962 show_cmd_list);
1eefb858
TT
963
964 xfree (set_doc);
965 xfree (show_doc);
3c16cced
PA
966}
967
c906108c 968/* Print the system error message for errno, and also mention STRING
598d3636
JK
969 as the file name for which the error was encountered. Use ERRCODE
970 for the thrown exception. Then return to command level. */
c906108c 971
c25c4a8b 972void
598d3636 973throw_perror_with_name (enum errors errcode, const char *string)
c906108c
SS
974{
975 char *err;
976 char *combined;
977
978 err = safe_strerror (errno);
979 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
980 strcpy (combined, string);
981 strcat (combined, ": ");
982 strcat (combined, err);
983
984 /* I understand setting these is a matter of taste. Still, some people
985 may clear errno but not know about bfd_error. Doing this here is not
581e13c1 986 unreasonable. */
c906108c
SS
987 bfd_set_error (bfd_error_no_error);
988 errno = 0;
989
598d3636
JK
990 throw_error (errcode, _("%s."), combined);
991}
992
993/* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */
994
995void
996perror_with_name (const char *string)
997{
998 throw_perror_with_name (GENERIC_ERROR, string);
c906108c
SS
999}
1000
1001/* Print the system error message for ERRCODE, and also mention STRING
1002 as the file name for which the error was encountered. */
1003
1004void
6972bc8b 1005print_sys_errmsg (const char *string, int errcode)
c906108c
SS
1006{
1007 char *err;
1008 char *combined;
1009
1010 err = safe_strerror (errcode);
1011 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
1012 strcpy (combined, string);
1013 strcat (combined, ": ");
1014 strcat (combined, err);
1015
1016 /* We want anything which was printed on stdout to come out first, before
1017 this message. */
1018 gdb_flush (gdb_stdout);
1019 fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
1020}
1021
1022/* Control C eventually causes this to be called, at a convenient time. */
1023
1024void
fba45db2 1025quit (void)
c906108c 1026{
7be570e7
JM
1027#ifdef __MSDOS__
1028 /* No steenking SIGINT will ever be coming our way when the
1029 program is resumed. Don't lie. */
e06e2353 1030 fatal ("Quit");
7be570e7 1031#else
c906108c 1032 if (job_control
8731e58e
AC
1033 /* If there is no terminal switching for this target, then we can't
1034 possibly get screwed by the lack of job control. */
c906108c 1035 || current_target.to_terminal_ours == NULL)
e06e2353 1036 fatal ("Quit");
c906108c 1037 else
e06e2353 1038 fatal ("Quit (expect signal SIGINT when the program is resumed)");
7be570e7 1039#endif
c906108c
SS
1040}
1041
c906108c 1042\f
c906108c 1043/* Called when a memory allocation fails, with the number of bytes of
581e13c1 1044 memory requested in SIZE. */
c906108c 1045
c25c4a8b 1046void
d26e3629 1047malloc_failure (long size)
c906108c
SS
1048{
1049 if (size > 0)
1050 {
8e65ff28 1051 internal_error (__FILE__, __LINE__,
e2e0b3e5 1052 _("virtual memory exhausted: can't allocate %ld bytes."),
8731e58e 1053 size);
c906108c
SS
1054 }
1055 else
1056 {
e2e0b3e5 1057 internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
c906108c
SS
1058 }
1059}
1060
c906108c
SS
1061/* My replacement for the read system call.
1062 Used like `read' but keeps going if `read' returns too soon. */
1063
1064int
fba45db2 1065myread (int desc, char *addr, int len)
c906108c 1066{
52f0bd74 1067 int val;
c906108c
SS
1068 int orglen = len;
1069
1070 while (len > 0)
1071 {
1072 val = read (desc, addr, len);
1073 if (val < 0)
1074 return val;
1075 if (val == 0)
1076 return orglen - len;
1077 len -= val;
1078 addr += val;
1079 }
1080 return orglen;
1081}
d26e3629 1082
c906108c 1083void
aa1ee363 1084print_spaces (int n, struct ui_file *file)
c906108c 1085{
392a587b 1086 fputs_unfiltered (n_spaces (n), file);
c906108c
SS
1087}
1088
1089/* Print a host address. */
1090
1091void
ac16bf07 1092gdb_print_host_address (const void *addr, struct ui_file *stream)
c906108c 1093{
ea8992ce 1094 fprintf_filtered (stream, "%s", host_address_to_string (addr));
c906108c 1095}
c906108c 1096\f
c5aa993b 1097
dc92e161
TT
1098/* A cleanup function that calls regfree. */
1099
1100static void
1101do_regfree_cleanup (void *r)
1102{
1103 regfree (r);
1104}
1105
1106/* Create a new cleanup that frees the compiled regular expression R. */
1107
1108struct cleanup *
1109make_regfree_cleanup (regex_t *r)
1110{
1111 return make_cleanup (do_regfree_cleanup, r);
1112}
1113
1114/* Return an xmalloc'd error message resulting from a regular
1115 expression compilation failure. */
1116
1117char *
1118get_regcomp_error (int code, regex_t *rx)
1119{
1120 size_t length = regerror (code, rx, NULL, 0);
1121 char *result = xmalloc (length);
1122
1123 regerror (code, rx, result, length);
1124 return result;
1125}
1126
cc16e6c9 1127/* Compile a regexp and throw an exception on error. This returns a
db26349c
TT
1128 cleanup to free the resulting pattern on success. RX must not be
1129 NULL. */
cc16e6c9
TT
1130
1131struct cleanup *
1132compile_rx_or_error (regex_t *pattern, const char *rx, const char *message)
1133{
1134 int code;
1135
db26349c 1136 gdb_assert (rx != NULL);
cc16e6c9
TT
1137
1138 code = regcomp (pattern, rx, REG_NOSUB);
1139 if (code != 0)
1140 {
1141 char *err = get_regcomp_error (code, pattern);
1142
1143 make_cleanup (xfree, err);
1144 error (("%s: %s"), message, err);
1145 }
1146
1147 return make_regfree_cleanup (pattern);
1148}
1149
dc92e161
TT
1150\f
1151
981c7f5a 1152/* This function supports the query, nquery, and yquery functions.
cbdeadca 1153 Ask user a y-or-n question and return 0 if answer is no, 1 if
981c7f5a
DJ
1154 answer is yes, or default the answer to the specified default
1155 (for yquery or nquery). DEFCHAR may be 'y' or 'n' to provide a
1156 default answer, or '\0' for no default.
cbdeadca
JJ
1157 CTLSTR is the control string and should end in "? ". It should
1158 not say how to answer, because we do that.
1159 ARGS are the arguments passed along with the CTLSTR argument to
1160 printf. */
1161
a0b31db1 1162static int ATTRIBUTE_PRINTF (1, 0)
cbdeadca
JJ
1163defaulted_query (const char *ctlstr, const char defchar, va_list args)
1164{
1165 int answer;
1166 int ans2;
1167 int retval;
1168 int def_value;
1169 char def_answer, not_def_answer;
981c7f5a 1170 char *y_string, *n_string, *question;
260c0b2a
DE
1171 /* Used to add duration we waited for user to respond to
1172 prompt_for_continue_wait_time. */
1173 struct timeval prompt_started, prompt_ended, prompt_delta;
cbdeadca
JJ
1174
1175 /* Set up according to which answer is the default. */
981c7f5a
DJ
1176 if (defchar == '\0')
1177 {
1178 def_value = 1;
1179 def_answer = 'Y';
1180 not_def_answer = 'N';
1181 y_string = "y";
1182 n_string = "n";
1183 }
1184 else if (defchar == 'y')
cbdeadca
JJ
1185 {
1186 def_value = 1;
1187 def_answer = 'Y';
1188 not_def_answer = 'N';
1189 y_string = "[y]";
1190 n_string = "n";
1191 }
1192 else
1193 {
1194 def_value = 0;
1195 def_answer = 'N';
1196 not_def_answer = 'Y';
1197 y_string = "y";
1198 n_string = "[n]";
1199 }
1200
981c7f5a 1201 /* Automatically answer the default value if the user did not want
a502cf95 1202 prompts or the command was issued with the server prefix. */
e360902b 1203 if (!confirm || server_command)
981c7f5a
DJ
1204 return def_value;
1205
1206 /* If input isn't coming from the user directly, just say what
7a01c6e0 1207 question we're asking, and then answer the default automatically. This
981c7f5a
DJ
1208 way, important error messages don't get lost when talking to GDB
1209 over a pipe. */
c63a1f86 1210 if (! input_from_terminal_p ())
981c7f5a
DJ
1211 {
1212 wrap_here ("");
1213 vfprintf_filtered (gdb_stdout, ctlstr, args);
1214
3e43a32a
MS
1215 printf_filtered (_("(%s or %s) [answered %c; "
1216 "input not from terminal]\n"),
981c7f5a
DJ
1217 y_string, n_string, def_answer);
1218 gdb_flush (gdb_stdout);
1219
1220 return def_value;
1221 }
1222
9a4105ab 1223 if (deprecated_query_hook)
cbdeadca 1224 {
9a4105ab 1225 return deprecated_query_hook (ctlstr, args);
cbdeadca
JJ
1226 }
1227
981c7f5a
DJ
1228 /* Format the question outside of the loop, to avoid reusing args. */
1229 question = xstrvprintf (ctlstr, args);
1230
260c0b2a
DE
1231 /* Used for calculating time spend waiting for user. */
1232 gettimeofday (&prompt_started, NULL);
1233
cbdeadca
JJ
1234 while (1)
1235 {
581e13c1 1236 wrap_here (""); /* Flush any buffered output. */
cbdeadca
JJ
1237 gdb_flush (gdb_stdout);
1238
1239 if (annotation_level > 1)
a3f17187 1240 printf_filtered (("\n\032\032pre-query\n"));
cbdeadca 1241
981c7f5a 1242 fputs_filtered (question, gdb_stdout);
a3f17187 1243 printf_filtered (_("(%s or %s) "), y_string, n_string);
cbdeadca
JJ
1244
1245 if (annotation_level > 1)
a3f17187 1246 printf_filtered (("\n\032\032query\n"));
cbdeadca
JJ
1247
1248 wrap_here ("");
1249 gdb_flush (gdb_stdout);
1250
1251 answer = fgetc (stdin);
8626589c
JB
1252
1253 /* We expect fgetc to block until a character is read. But
1254 this may not be the case if the terminal was opened with
1255 the NONBLOCK flag. In that case, if there is nothing to
1256 read on stdin, fgetc returns EOF, but also sets the error
1257 condition flag on stdin and errno to EAGAIN. With a true
1258 EOF, stdin's error condition flag is not set.
1259
1260 A situation where this behavior was observed is a pseudo
1261 terminal on AIX. */
1262 while (answer == EOF && ferror (stdin) && errno == EAGAIN)
1263 {
1264 /* Not a real EOF. Wait a little while and try again until
1265 we read something. */
1266 clearerr (stdin);
1267 gdb_usleep (10000);
1268 answer = fgetc (stdin);
1269 }
1270
cbdeadca
JJ
1271 clearerr (stdin); /* in case of C-d */
1272 if (answer == EOF) /* C-d */
1273 {
fa3fd85b 1274 printf_filtered ("EOF [assumed %c]\n", def_answer);
cbdeadca
JJ
1275 retval = def_value;
1276 break;
1277 }
581e13c1 1278 /* Eat rest of input line, to EOF or newline. */
cbdeadca
JJ
1279 if (answer != '\n')
1280 do
1281 {
1282 ans2 = fgetc (stdin);
1283 clearerr (stdin);
1284 }
1285 while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1286
1287 if (answer >= 'a')
1288 answer -= 040;
1289 /* Check answer. For the non-default, the user must specify
1290 the non-default explicitly. */
1291 if (answer == not_def_answer)
1292 {
1293 retval = !def_value;
1294 break;
1295 }
981c7f5a
DJ
1296 /* Otherwise, if a default was specified, the user may either
1297 specify the required input or have it default by entering
1298 nothing. */
1299 if (answer == def_answer
1300 || (defchar != '\0' &&
1301 (answer == '\n' || answer == '\r' || answer == EOF)))
cbdeadca
JJ
1302 {
1303 retval = def_value;
1304 break;
1305 }
1306 /* Invalid entries are not defaulted and require another selection. */
a3f17187 1307 printf_filtered (_("Please answer %s or %s.\n"),
cbdeadca
JJ
1308 y_string, n_string);
1309 }
1310
260c0b2a
DE
1311 /* Add time spend in this routine to prompt_for_continue_wait_time. */
1312 gettimeofday (&prompt_ended, NULL);
1313 timeval_sub (&prompt_delta, &prompt_ended, &prompt_started);
1314 timeval_add (&prompt_for_continue_wait_time,
1315 &prompt_for_continue_wait_time, &prompt_delta);
1316
981c7f5a 1317 xfree (question);
cbdeadca 1318 if (annotation_level > 1)
a3f17187 1319 printf_filtered (("\n\032\032post-query\n"));
cbdeadca
JJ
1320 return retval;
1321}
1322\f
1323
1324/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1325 answer is yes, or 0 if answer is defaulted.
1326 Takes three args which are given to printf to print the question.
1327 The first, a control string, should end in "? ".
1328 It should not say how to answer, because we do that. */
1329
1330int
1331nquery (const char *ctlstr, ...)
1332{
1333 va_list args;
899500d6 1334 int ret;
cbdeadca
JJ
1335
1336 va_start (args, ctlstr);
899500d6 1337 ret = defaulted_query (ctlstr, 'n', args);
cbdeadca 1338 va_end (args);
899500d6 1339 return ret;
cbdeadca
JJ
1340}
1341
1342/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1343 answer is yes, or 1 if answer is defaulted.
1344 Takes three args which are given to printf to print the question.
1345 The first, a control string, should end in "? ".
1346 It should not say how to answer, because we do that. */
1347
1348int
1349yquery (const char *ctlstr, ...)
1350{
1351 va_list args;
899500d6 1352 int ret;
cbdeadca
JJ
1353
1354 va_start (args, ctlstr);
899500d6 1355 ret = defaulted_query (ctlstr, 'y', args);
cbdeadca 1356 va_end (args);
899500d6 1357 return ret;
cbdeadca
JJ
1358}
1359
981c7f5a
DJ
1360/* Ask user a y-or-n question and return 1 iff answer is yes.
1361 Takes three args which are given to printf to print the question.
1362 The first, a control string, should end in "? ".
1363 It should not say how to answer, because we do that. */
1364
1365int
1366query (const char *ctlstr, ...)
1367{
1368 va_list args;
899500d6 1369 int ret;
981c7f5a
DJ
1370
1371 va_start (args, ctlstr);
899500d6 1372 ret = defaulted_query (ctlstr, '\0', args);
981c7f5a 1373 va_end (args);
899500d6 1374 return ret;
981c7f5a
DJ
1375}
1376
6c7a06a3
TT
1377/* A helper for parse_escape that converts a host character to a
1378 target character. C is the host character. If conversion is
1379 possible, then the target character is stored in *TARGET_C and the
1380 function returns 1. Otherwise, the function returns 0. */
1381
1382static int
f870a310 1383host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c)
234b45d4 1384{
6c7a06a3
TT
1385 struct obstack host_data;
1386 char the_char = c;
1387 struct cleanup *cleanups;
1388 int result = 0;
234b45d4 1389
6c7a06a3
TT
1390 obstack_init (&host_data);
1391 cleanups = make_cleanup_obstack_free (&host_data);
234b45d4 1392
f870a310 1393 convert_between_encodings (target_charset (gdbarch), host_charset (),
ac91cd70
PA
1394 (gdb_byte *) &the_char, 1, 1,
1395 &host_data, translit_none);
6c7a06a3
TT
1396
1397 if (obstack_object_size (&host_data) == 1)
1398 {
1399 result = 1;
1400 *target_c = *(char *) obstack_base (&host_data);
1401 }
1402
1403 do_cleanups (cleanups);
1404 return result;
234b45d4
KB
1405}
1406
c906108c
SS
1407/* Parse a C escape sequence. STRING_PTR points to a variable
1408 containing a pointer to the string to parse. That pointer
1409 should point to the character after the \. That pointer
1410 is updated past the characters we use. The value of the
1411 escape sequence is returned.
1412
1413 A negative value means the sequence \ newline was seen,
1414 which is supposed to be equivalent to nothing at all.
1415
1416 If \ is followed by a null character, we return a negative
1417 value and leave the string pointer pointing at the null character.
1418
1419 If \ is followed by 000, we return 0 and leave the string pointer
1420 after the zeros. A value of 0 does not mean end of string. */
1421
1422int
f870a310 1423parse_escape (struct gdbarch *gdbarch, char **string_ptr)
c906108c 1424{
581e13c1 1425 int target_char = -2; /* Initialize to avoid GCC warnings. */
52f0bd74 1426 int c = *(*string_ptr)++;
e0627e85 1427
6c7a06a3
TT
1428 switch (c)
1429 {
8731e58e
AC
1430 case '\n':
1431 return -2;
1432 case 0:
1433 (*string_ptr)--;
1434 return 0;
8731e58e
AC
1435
1436 case '0':
1437 case '1':
1438 case '2':
1439 case '3':
1440 case '4':
1441 case '5':
1442 case '6':
1443 case '7':
1444 {
6c7a06a3 1445 int i = host_hex_value (c);
aa1ee363 1446 int count = 0;
8731e58e
AC
1447 while (++count < 3)
1448 {
5cb316ef 1449 c = (**string_ptr);
6c7a06a3 1450 if (isdigit (c) && c != '8' && c != '9')
8731e58e 1451 {
5cb316ef 1452 (*string_ptr)++;
8731e58e 1453 i *= 8;
6c7a06a3 1454 i += host_hex_value (c);
8731e58e
AC
1455 }
1456 else
1457 {
8731e58e
AC
1458 break;
1459 }
1460 }
1461 return i;
1462 }
6c7a06a3
TT
1463
1464 case 'a':
1465 c = '\a';
1466 break;
1467 case 'b':
1468 c = '\b';
1469 break;
1470 case 'f':
1471 c = '\f';
1472 break;
1473 case 'n':
1474 c = '\n';
1475 break;
1476 case 'r':
1477 c = '\r';
1478 break;
1479 case 't':
1480 c = '\t';
1481 break;
1482 case 'v':
1483 c = '\v';
1484 break;
1485
1486 default:
1487 break;
1488 }
1489
f870a310 1490 if (!host_char_to_target (gdbarch, c, &target_char))
3351ea09
JB
1491 error (_("The escape sequence `\\%c' is equivalent to plain `%c',"
1492 " which has no equivalent\nin the `%s' character set."),
905b671b 1493 c, c, target_charset (gdbarch));
6c7a06a3 1494 return target_char;
c906108c
SS
1495}
1496\f
1497/* Print the character C on STREAM as part of the contents of a literal
1498 string whose delimiter is QUOTER. Note that this routine should only
1499 be call for printing things which are independent of the language
581e13c1 1500 of the program being debugged. */
c906108c 1501
43e526b9 1502static void
74f832da 1503printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
bee0189a
DJ
1504 void (*do_fprintf) (struct ui_file *, const char *, ...)
1505 ATTRIBUTE_FPTR_PRINTF_2, struct ui_file *stream, int quoter)
c906108c 1506{
c906108c
SS
1507 c &= 0xFF; /* Avoid sign bit follies */
1508
c5aa993b
JM
1509 if (c < 0x20 || /* Low control chars */
1510 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1511 (sevenbit_strings && c >= 0x80))
1512 { /* high order bit set */
1513 switch (c)
1514 {
1515 case '\n':
43e526b9 1516 do_fputs ("\\n", stream);
c5aa993b
JM
1517 break;
1518 case '\b':
43e526b9 1519 do_fputs ("\\b", stream);
c5aa993b
JM
1520 break;
1521 case '\t':
43e526b9 1522 do_fputs ("\\t", stream);
c5aa993b
JM
1523 break;
1524 case '\f':
43e526b9 1525 do_fputs ("\\f", stream);
c5aa993b
JM
1526 break;
1527 case '\r':
43e526b9 1528 do_fputs ("\\r", stream);
c5aa993b
JM
1529 break;
1530 case '\033':
43e526b9 1531 do_fputs ("\\e", stream);
c5aa993b
JM
1532 break;
1533 case '\007':
43e526b9 1534 do_fputs ("\\a", stream);
c5aa993b
JM
1535 break;
1536 default:
43e526b9 1537 do_fprintf (stream, "\\%.3o", (unsigned int) c);
c5aa993b
JM
1538 break;
1539 }
1540 }
1541 else
1542 {
1543 if (c == '\\' || c == quoter)
43e526b9
JM
1544 do_fputs ("\\", stream);
1545 do_fprintf (stream, "%c", c);
c5aa993b 1546 }
c906108c 1547}
43e526b9
JM
1548
1549/* Print the character C on STREAM as part of the contents of a
1550 literal string whose delimiter is QUOTER. Note that these routines
1551 should only be call for printing things which are independent of
581e13c1 1552 the language of the program being debugged. */
43e526b9
JM
1553
1554void
fba45db2 1555fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1556{
1557 while (*str)
1558 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1559}
1560
1561void
fba45db2 1562fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1563{
1564 while (*str)
1565 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1566}
1567
0876f84a
DJ
1568void
1569fputstrn_filtered (const char *str, int n, int quoter,
1570 struct ui_file *stream)
1571{
1572 int i;
e0627e85 1573
0876f84a
DJ
1574 for (i = 0; i < n; i++)
1575 printchar (str[i], fputs_filtered, fprintf_filtered, stream, quoter);
1576}
1577
43e526b9 1578void
8731e58e
AC
1579fputstrn_unfiltered (const char *str, int n, int quoter,
1580 struct ui_file *stream)
43e526b9
JM
1581{
1582 int i;
5d502164 1583
43e526b9
JM
1584 for (i = 0; i < n; i++)
1585 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1586}
c906108c 1587\f
c5aa993b 1588
c906108c
SS
1589/* Number of lines per page or UINT_MAX if paging is disabled. */
1590static unsigned int lines_per_page;
920d2a44
AC
1591static void
1592show_lines_per_page (struct ui_file *file, int from_tty,
1593 struct cmd_list_element *c, const char *value)
1594{
3e43a32a
MS
1595 fprintf_filtered (file,
1596 _("Number of lines gdb thinks are in a page is %s.\n"),
920d2a44
AC
1597 value);
1598}
eb0d3137 1599
cbfbd72a 1600/* Number of chars per line or UINT_MAX if line folding is disabled. */
c906108c 1601static unsigned int chars_per_line;
920d2a44
AC
1602static void
1603show_chars_per_line (struct ui_file *file, int from_tty,
1604 struct cmd_list_element *c, const char *value)
1605{
3e43a32a
MS
1606 fprintf_filtered (file,
1607 _("Number of characters gdb thinks "
1608 "are in a line is %s.\n"),
920d2a44
AC
1609 value);
1610}
eb0d3137 1611
c906108c
SS
1612/* Current count of lines printed on this page, chars on this line. */
1613static unsigned int lines_printed, chars_printed;
1614
1615/* Buffer and start column of buffered text, for doing smarter word-
1616 wrapping. When someone calls wrap_here(), we start buffering output
1617 that comes through fputs_filtered(). If we see a newline, we just
1618 spit it out and forget about the wrap_here(). If we see another
1619 wrap_here(), we spit it out and remember the newer one. If we see
1620 the end of the line, we spit out a newline, the indent, and then
1621 the buffered output. */
1622
1623/* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1624 are waiting to be output (they have already been counted in chars_printed).
1625 When wrap_buffer[0] is null, the buffer is empty. */
1626static char *wrap_buffer;
1627
1628/* Pointer in wrap_buffer to the next character to fill. */
1629static char *wrap_pointer;
1630
1631/* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1632 is non-zero. */
1633static char *wrap_indent;
1634
1635/* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1636 is not in effect. */
1637static int wrap_column;
c906108c 1638\f
c5aa993b 1639
eb0d3137
MK
1640/* Inialize the number of lines per page and chars per line. */
1641
c906108c 1642void
fba45db2 1643init_page_info (void)
c906108c 1644{
5da1313b
JK
1645 if (batch_flag)
1646 {
1647 lines_per_page = UINT_MAX;
1648 chars_per_line = UINT_MAX;
1649 }
1650 else
c906108c 1651#if defined(TUI)
5ecb1806 1652 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
c906108c
SS
1653#endif
1654 {
eb0d3137 1655 int rows, cols;
c906108c 1656
ec145965
EZ
1657#if defined(__GO32__)
1658 rows = ScreenRows ();
1659 cols = ScreenCols ();
1660 lines_per_page = rows;
1661 chars_per_line = cols;
1662#else
eb0d3137
MK
1663 /* Make sure Readline has initialized its terminal settings. */
1664 rl_reset_terminal (NULL);
c906108c 1665
eb0d3137
MK
1666 /* Get the screen size from Readline. */
1667 rl_get_screen_size (&rows, &cols);
1668 lines_per_page = rows;
1669 chars_per_line = cols;
c906108c 1670
eb0d3137
MK
1671 /* Readline should have fetched the termcap entry for us. */
1672 if (tgetnum ("li") < 0 || getenv ("EMACS"))
1673 {
1674 /* The number of lines per page is not mentioned in the
1675 terminal description. This probably means that paging is
1676 not useful (e.g. emacs shell window), so disable paging. */
1677 lines_per_page = UINT_MAX;
1678 }
c906108c 1679
c906108c 1680 /* If the output is not a terminal, don't paginate it. */
d9fcf2fb 1681 if (!ui_file_isatty (gdb_stdout))
c5aa993b 1682 lines_per_page = UINT_MAX;
eb0d3137 1683#endif
ec145965 1684 }
eb0d3137
MK
1685
1686 set_screen_size ();
c5aa993b 1687 set_width ();
c906108c
SS
1688}
1689
5da1313b
JK
1690/* Helper for make_cleanup_restore_page_info. */
1691
1692static void
1693do_restore_page_info_cleanup (void *arg)
1694{
1695 set_screen_size ();
1696 set_width ();
1697}
1698
1699/* Provide cleanup for restoring the terminal size. */
1700
1701struct cleanup *
1702make_cleanup_restore_page_info (void)
1703{
1704 struct cleanup *back_to;
1705
1706 back_to = make_cleanup (do_restore_page_info_cleanup, NULL);
1707 make_cleanup_restore_uinteger (&lines_per_page);
1708 make_cleanup_restore_uinteger (&chars_per_line);
1709
1710 return back_to;
1711}
1712
1713/* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
1714 Provide cleanup for restoring the original state. */
1715
1716struct cleanup *
1717set_batch_flag_and_make_cleanup_restore_page_info (void)
1718{
1719 struct cleanup *back_to = make_cleanup_restore_page_info ();
1720
1721 make_cleanup_restore_integer (&batch_flag);
1722 batch_flag = 1;
1723 init_page_info ();
1724
1725 return back_to;
1726}
1727
eb0d3137
MK
1728/* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */
1729
1730static void
1731set_screen_size (void)
1732{
1733 int rows = lines_per_page;
1734 int cols = chars_per_line;
1735
1736 if (rows <= 0)
1737 rows = INT_MAX;
1738
1739 if (cols <= 0)
0caa462c 1740 cols = INT_MAX;
eb0d3137
MK
1741
1742 /* Update Readline's idea of the terminal size. */
1743 rl_set_screen_size (rows, cols);
1744}
1745
1746/* Reinitialize WRAP_BUFFER according to the current value of
1747 CHARS_PER_LINE. */
1748
c906108c 1749static void
fba45db2 1750set_width (void)
c906108c
SS
1751{
1752 if (chars_per_line == 0)
c5aa993b 1753 init_page_info ();
c906108c
SS
1754
1755 if (!wrap_buffer)
1756 {
1757 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1758 wrap_buffer[0] = '\0';
1759 }
1760 else
1761 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
eb0d3137 1762 wrap_pointer = wrap_buffer; /* Start it at the beginning. */
c906108c
SS
1763}
1764
c5aa993b 1765static void
fba45db2 1766set_width_command (char *args, int from_tty, struct cmd_list_element *c)
c906108c 1767{
eb0d3137 1768 set_screen_size ();
c906108c
SS
1769 set_width ();
1770}
1771
eb0d3137
MK
1772static void
1773set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1774{
1775 set_screen_size ();
1776}
1777
c906108c
SS
1778/* Wait, so the user can read what's on the screen. Prompt the user
1779 to continue by pressing RETURN. */
1780
1781static void
fba45db2 1782prompt_for_continue (void)
c906108c
SS
1783{
1784 char *ignore;
1785 char cont_prompt[120];
260c0b2a
DE
1786 /* Used to add duration we waited for user to respond to
1787 prompt_for_continue_wait_time. */
1788 struct timeval prompt_started, prompt_ended, prompt_delta;
1789
1790 gettimeofday (&prompt_started, NULL);
c906108c
SS
1791
1792 if (annotation_level > 1)
a3f17187 1793 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
c906108c
SS
1794
1795 strcpy (cont_prompt,
1796 "---Type <return> to continue, or q <return> to quit---");
1797 if (annotation_level > 1)
1798 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1799
1800 /* We must do this *before* we call gdb_readline, else it will eventually
1801 call us -- thinking that we're trying to print beyond the end of the
1802 screen. */
1803 reinitialize_more_filter ();
1804
1805 immediate_quit++;
522002f9 1806 QUIT;
c906108c
SS
1807 /* On a real operating system, the user can quit with SIGINT.
1808 But not on GO32.
1809
1810 'q' is provided on all systems so users don't have to change habits
1811 from system to system, and because telling them what to do in
1812 the prompt is more user-friendly than expecting them to think of
1813 SIGINT. */
1814 /* Call readline, not gdb_readline, because GO32 readline handles control-C
1815 whereas control-C to gdb_readline will cause the user to get dumped
1816 out to DOS. */
b4f5539f 1817 ignore = gdb_readline_wrapper (cont_prompt);
c906108c 1818
260c0b2a
DE
1819 /* Add time spend in this routine to prompt_for_continue_wait_time. */
1820 gettimeofday (&prompt_ended, NULL);
1821 timeval_sub (&prompt_delta, &prompt_ended, &prompt_started);
1822 timeval_add (&prompt_for_continue_wait_time,
1823 &prompt_for_continue_wait_time, &prompt_delta);
1824
c906108c 1825 if (annotation_level > 1)
a3f17187 1826 printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
c906108c
SS
1827
1828 if (ignore)
1829 {
1830 char *p = ignore;
5d502164 1831
c906108c
SS
1832 while (*p == ' ' || *p == '\t')
1833 ++p;
1834 if (p[0] == 'q')
522002f9 1835 quit ();
b8c9b27d 1836 xfree (ignore);
c906108c
SS
1837 }
1838 immediate_quit--;
1839
1840 /* Now we have to do this again, so that GDB will know that it doesn't
1841 need to save the ---Type <return>--- line at the top of the screen. */
1842 reinitialize_more_filter ();
1843
581e13c1 1844 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
c906108c
SS
1845}
1846
bd712aed
DE
1847/* Initalize timer to keep track of how long we waited for the user. */
1848
1849void
1850reset_prompt_for_continue_wait_time (void)
1851{
1852 static const struct timeval zero_timeval = { 0 };
1853
1854 prompt_for_continue_wait_time = zero_timeval;
1855}
1856
1857/* Fetch the cumulative time spent in prompt_for_continue. */
1858
1859struct timeval
1860get_prompt_for_continue_wait_time (void)
1861{
1862 return prompt_for_continue_wait_time;
1863}
1864
c906108c
SS
1865/* Reinitialize filter; ie. tell it to reset to original values. */
1866
1867void
fba45db2 1868reinitialize_more_filter (void)
c906108c
SS
1869{
1870 lines_printed = 0;
1871 chars_printed = 0;
1872}
1873
1874/* Indicate that if the next sequence of characters overflows the line,
581e13c1 1875 a newline should be inserted here rather than when it hits the end.
c906108c
SS
1876 If INDENT is non-null, it is a string to be printed to indent the
1877 wrapped part on the next line. INDENT must remain accessible until
1878 the next call to wrap_here() or until a newline is printed through
1879 fputs_filtered().
1880
1881 If the line is already overfull, we immediately print a newline and
1882 the indentation, and disable further wrapping.
1883
1884 If we don't know the width of lines, but we know the page height,
1885 we must not wrap words, but should still keep track of newlines
1886 that were explicitly printed.
1887
1888 INDENT should not contain tabs, as that will mess up the char count
1889 on the next line. FIXME.
1890
1891 This routine is guaranteed to force out any output which has been
1892 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1893 used to force out output from the wrap_buffer. */
1894
1895void
fba45db2 1896wrap_here (char *indent)
c906108c 1897{
581e13c1 1898 /* This should have been allocated, but be paranoid anyway. */
c906108c 1899 if (!wrap_buffer)
3e43a32a
MS
1900 internal_error (__FILE__, __LINE__,
1901 _("failed internal consistency check"));
c906108c
SS
1902
1903 if (wrap_buffer[0])
1904 {
1905 *wrap_pointer = '\0';
1906 fputs_unfiltered (wrap_buffer, gdb_stdout);
1907 }
1908 wrap_pointer = wrap_buffer;
1909 wrap_buffer[0] = '\0';
3e43a32a 1910 if (chars_per_line == UINT_MAX) /* No line overflow checking. */
c906108c
SS
1911 {
1912 wrap_column = 0;
1913 }
1914 else if (chars_printed >= chars_per_line)
1915 {
1916 puts_filtered ("\n");
1917 if (indent != NULL)
1918 puts_filtered (indent);
1919 wrap_column = 0;
1920 }
1921 else
1922 {
1923 wrap_column = chars_printed;
1924 if (indent == NULL)
1925 wrap_indent = "";
1926 else
1927 wrap_indent = indent;
1928 }
1929}
1930
4a351cef 1931/* Print input string to gdb_stdout, filtered, with wrap,
581e13c1 1932 arranging strings in columns of n chars. String can be
4a351cef
AF
1933 right or left justified in the column. Never prints
1934 trailing spaces. String should never be longer than
1935 width. FIXME: this could be useful for the EXAMINE
581e13c1 1936 command, which currently doesn't tabulate very well. */
4a351cef
AF
1937
1938void
1939puts_filtered_tabular (char *string, int width, int right)
1940{
1941 int spaces = 0;
1942 int stringlen;
1943 char *spacebuf;
1944
1945 gdb_assert (chars_per_line > 0);
1946 if (chars_per_line == UINT_MAX)
1947 {
1948 fputs_filtered (string, gdb_stdout);
1949 fputs_filtered ("\n", gdb_stdout);
1950 return;
1951 }
1952
1953 if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1954 fputs_filtered ("\n", gdb_stdout);
1955
1956 if (width >= chars_per_line)
1957 width = chars_per_line - 1;
1958
1959 stringlen = strlen (string);
1960
1961 if (chars_printed > 0)
1962 spaces = width - (chars_printed - 1) % width - 1;
1963 if (right)
1964 spaces += width - stringlen;
1965
1966 spacebuf = alloca (spaces + 1);
1967 spacebuf[spaces] = '\0';
1968 while (spaces--)
1969 spacebuf[spaces] = ' ';
1970
1971 fputs_filtered (spacebuf, gdb_stdout);
1972 fputs_filtered (string, gdb_stdout);
1973}
1974
1975
c906108c 1976/* Ensure that whatever gets printed next, using the filtered output
581e13c1 1977 commands, starts at the beginning of the line. I.e. if there is
c906108c 1978 any pending output for the current line, flush it and start a new
581e13c1 1979 line. Otherwise do nothing. */
c906108c
SS
1980
1981void
fba45db2 1982begin_line (void)
c906108c
SS
1983{
1984 if (chars_printed > 0)
1985 {
1986 puts_filtered ("\n");
1987 }
1988}
1989
ac9a91a7 1990
c906108c
SS
1991/* Like fputs but if FILTER is true, pause after every screenful.
1992
1993 Regardless of FILTER can wrap at points other than the final
1994 character of a line.
1995
1996 Unlike fputs, fputs_maybe_filtered does not return a value.
1997 It is OK for LINEBUFFER to be NULL, in which case just don't print
1998 anything.
1999
2000 Note that a longjmp to top level may occur in this routine (only if
2001 FILTER is true) (since prompt_for_continue may do so) so this
2002 routine should not be called when cleanups are not in place. */
2003
2004static void
fba45db2
KB
2005fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
2006 int filter)
c906108c
SS
2007{
2008 const char *lineptr;
2009
2010 if (linebuffer == 0)
2011 return;
2012
2013 /* Don't do any filtering if it is disabled. */
390a8aca 2014 if (stream != gdb_stdout
b2e7f004
JK
2015 || !pagination_enabled
2016 || batch_flag
390a8aca 2017 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)
58dadb1b 2018 || top_level_interpreter () == NULL
390a8aca 2019 || ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
c906108c
SS
2020 {
2021 fputs_unfiltered (linebuffer, stream);
2022 return;
2023 }
2024
2025 /* Go through and output each character. Show line extension
2026 when this is necessary; prompt user for new page when this is
2027 necessary. */
c5aa993b 2028
c906108c
SS
2029 lineptr = linebuffer;
2030 while (*lineptr)
2031 {
2032 /* Possible new page. */
8731e58e 2033 if (filter && (lines_printed >= lines_per_page - 1))
c906108c
SS
2034 prompt_for_continue ();
2035
2036 while (*lineptr && *lineptr != '\n')
2037 {
2038 /* Print a single line. */
2039 if (*lineptr == '\t')
2040 {
2041 if (wrap_column)
2042 *wrap_pointer++ = '\t';
2043 else
2044 fputc_unfiltered ('\t', stream);
2045 /* Shifting right by 3 produces the number of tab stops
2046 we have already passed, and then adding one and
c5aa993b 2047 shifting left 3 advances to the next tab stop. */
c906108c
SS
2048 chars_printed = ((chars_printed >> 3) + 1) << 3;
2049 lineptr++;
2050 }
2051 else
2052 {
2053 if (wrap_column)
2054 *wrap_pointer++ = *lineptr;
2055 else
c5aa993b 2056 fputc_unfiltered (*lineptr, stream);
c906108c
SS
2057 chars_printed++;
2058 lineptr++;
2059 }
c5aa993b 2060
c906108c
SS
2061 if (chars_printed >= chars_per_line)
2062 {
2063 unsigned int save_chars = chars_printed;
2064
2065 chars_printed = 0;
2066 lines_printed++;
2067 /* If we aren't actually wrapping, don't output newline --
c5aa993b
JM
2068 if chars_per_line is right, we probably just overflowed
2069 anyway; if it's wrong, let us keep going. */
c906108c
SS
2070 if (wrap_column)
2071 fputc_unfiltered ('\n', stream);
2072
2073 /* Possible new page. */
2074 if (lines_printed >= lines_per_page - 1)
2075 prompt_for_continue ();
2076
581e13c1 2077 /* Now output indentation and wrapped string. */
c906108c
SS
2078 if (wrap_column)
2079 {
2080 fputs_unfiltered (wrap_indent, stream);
581e13c1
MS
2081 *wrap_pointer = '\0'; /* Null-terminate saved stuff, */
2082 fputs_unfiltered (wrap_buffer, stream); /* and eject it. */
c906108c
SS
2083 /* FIXME, this strlen is what prevents wrap_indent from
2084 containing tabs. However, if we recurse to print it
2085 and count its chars, we risk trouble if wrap_indent is
581e13c1 2086 longer than (the user settable) chars_per_line.
c906108c
SS
2087 Note also that this can set chars_printed > chars_per_line
2088 if we are printing a long string. */
2089 chars_printed = strlen (wrap_indent)
c5aa993b 2090 + (save_chars - wrap_column);
c906108c
SS
2091 wrap_pointer = wrap_buffer; /* Reset buffer */
2092 wrap_buffer[0] = '\0';
c5aa993b
JM
2093 wrap_column = 0; /* And disable fancy wrap */
2094 }
c906108c
SS
2095 }
2096 }
2097
2098 if (*lineptr == '\n')
2099 {
2100 chars_printed = 0;
3e43a32a
MS
2101 wrap_here ((char *) 0); /* Spit out chars, cancel
2102 further wraps. */
c906108c
SS
2103 lines_printed++;
2104 fputc_unfiltered ('\n', stream);
2105 lineptr++;
2106 }
2107 }
2108}
2109
2110void
fba45db2 2111fputs_filtered (const char *linebuffer, struct ui_file *stream)
c906108c
SS
2112{
2113 fputs_maybe_filtered (linebuffer, stream, 1);
2114}
2115
2116int
fba45db2 2117putchar_unfiltered (int c)
c906108c 2118{
11cf8741 2119 char buf = c;
e0627e85 2120
d9fcf2fb 2121 ui_file_write (gdb_stdout, &buf, 1);
c906108c
SS
2122 return c;
2123}
2124
d1f4cff8
AC
2125/* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2126 May return nonlocally. */
2127
2128int
2129putchar_filtered (int c)
2130{
2131 return fputc_filtered (c, gdb_stdout);
2132}
2133
c906108c 2134int
fba45db2 2135fputc_unfiltered (int c, struct ui_file *stream)
c906108c 2136{
11cf8741 2137 char buf = c;
e0627e85 2138
d9fcf2fb 2139 ui_file_write (stream, &buf, 1);
c906108c
SS
2140 return c;
2141}
2142
2143int
fba45db2 2144fputc_filtered (int c, struct ui_file *stream)
c906108c
SS
2145{
2146 char buf[2];
2147
2148 buf[0] = c;
2149 buf[1] = 0;
2150 fputs_filtered (buf, stream);
2151 return c;
2152}
2153
2154/* puts_debug is like fputs_unfiltered, except it prints special
2155 characters in printable fashion. */
2156
2157void
fba45db2 2158puts_debug (char *prefix, char *string, char *suffix)
c906108c
SS
2159{
2160 int ch;
2161
2162 /* Print prefix and suffix after each line. */
2163 static int new_line = 1;
2164 static int return_p = 0;
2165 static char *prev_prefix = "";
2166 static char *prev_suffix = "";
2167
2168 if (*string == '\n')
2169 return_p = 0;
2170
2171 /* If the prefix is changing, print the previous suffix, a new line,
2172 and the new prefix. */
c5aa993b 2173 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
c906108c 2174 {
9846de1b
JM
2175 fputs_unfiltered (prev_suffix, gdb_stdlog);
2176 fputs_unfiltered ("\n", gdb_stdlog);
2177 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2178 }
2179
2180 /* Print prefix if we printed a newline during the previous call. */
2181 if (new_line)
2182 {
2183 new_line = 0;
9846de1b 2184 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2185 }
2186
2187 prev_prefix = prefix;
2188 prev_suffix = suffix;
2189
2190 /* Output characters in a printable format. */
2191 while ((ch = *string++) != '\0')
2192 {
2193 switch (ch)
c5aa993b 2194 {
c906108c
SS
2195 default:
2196 if (isprint (ch))
9846de1b 2197 fputc_unfiltered (ch, gdb_stdlog);
c906108c
SS
2198
2199 else
9846de1b 2200 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
c906108c
SS
2201 break;
2202
c5aa993b
JM
2203 case '\\':
2204 fputs_unfiltered ("\\\\", gdb_stdlog);
2205 break;
2206 case '\b':
2207 fputs_unfiltered ("\\b", gdb_stdlog);
2208 break;
2209 case '\f':
2210 fputs_unfiltered ("\\f", gdb_stdlog);
2211 break;
2212 case '\n':
2213 new_line = 1;
2214 fputs_unfiltered ("\\n", gdb_stdlog);
2215 break;
2216 case '\r':
2217 fputs_unfiltered ("\\r", gdb_stdlog);
2218 break;
2219 case '\t':
2220 fputs_unfiltered ("\\t", gdb_stdlog);
2221 break;
2222 case '\v':
2223 fputs_unfiltered ("\\v", gdb_stdlog);
2224 break;
2225 }
c906108c
SS
2226
2227 return_p = ch == '\r';
2228 }
2229
2230 /* Print suffix if we printed a newline. */
2231 if (new_line)
2232 {
9846de1b
JM
2233 fputs_unfiltered (suffix, gdb_stdlog);
2234 fputs_unfiltered ("\n", gdb_stdlog);
c906108c
SS
2235 }
2236}
2237
2238
2239/* Print a variable number of ARGS using format FORMAT. If this
2240 information is going to put the amount written (since the last call
2241 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2242 call prompt_for_continue to get the users permision to continue.
2243
2244 Unlike fprintf, this function does not return a value.
2245
2246 We implement three variants, vfprintf (takes a vararg list and stream),
2247 fprintf (takes a stream to write on), and printf (the usual).
2248
2249 Note also that a longjmp to top level may occur in this routine
2250 (since prompt_for_continue may do so) so this routine should not be
2251 called when cleanups are not in place. */
2252
2253static void
fba45db2
KB
2254vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2255 va_list args, int filter)
c906108c
SS
2256{
2257 char *linebuffer;
2258 struct cleanup *old_cleanups;
2259
e623b504 2260 linebuffer = xstrvprintf (format, args);
b8c9b27d 2261 old_cleanups = make_cleanup (xfree, linebuffer);
c906108c
SS
2262 fputs_maybe_filtered (linebuffer, stream, filter);
2263 do_cleanups (old_cleanups);
2264}
2265
2266
2267void
fba45db2 2268vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2269{
2270 vfprintf_maybe_filtered (stream, format, args, 1);
2271}
2272
2273void
fba45db2 2274vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2275{
2276 char *linebuffer;
2277 struct cleanup *old_cleanups;
2278
e623b504 2279 linebuffer = xstrvprintf (format, args);
b8c9b27d 2280 old_cleanups = make_cleanup (xfree, linebuffer);
75feb17d
DJ
2281 if (debug_timestamp && stream == gdb_stdlog)
2282 {
2283 struct timeval tm;
2284 char *timestamp;
6e5abd65 2285 int len, need_nl;
75feb17d
DJ
2286
2287 gettimeofday (&tm, NULL);
6e5abd65
PA
2288
2289 len = strlen (linebuffer);
2290 need_nl = (len > 0 && linebuffer[len - 1] != '\n');
2291
2292 timestamp = xstrprintf ("%ld:%ld %s%s",
2293 (long) tm.tv_sec, (long) tm.tv_usec,
2294 linebuffer,
2295 need_nl ? "\n": "");
75feb17d
DJ
2296 make_cleanup (xfree, timestamp);
2297 fputs_unfiltered (timestamp, stream);
2298 }
6e5abd65
PA
2299 else
2300 fputs_unfiltered (linebuffer, stream);
c906108c
SS
2301 do_cleanups (old_cleanups);
2302}
2303
2304void
fba45db2 2305vprintf_filtered (const char *format, va_list args)
c906108c
SS
2306{
2307 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2308}
2309
2310void
fba45db2 2311vprintf_unfiltered (const char *format, va_list args)
c906108c
SS
2312{
2313 vfprintf_unfiltered (gdb_stdout, format, args);
2314}
2315
c906108c 2316void
8731e58e 2317fprintf_filtered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2318{
2319 va_list args;
e0627e85 2320
c906108c 2321 va_start (args, format);
c906108c
SS
2322 vfprintf_filtered (stream, format, args);
2323 va_end (args);
2324}
2325
c906108c 2326void
8731e58e 2327fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2328{
2329 va_list args;
e0627e85 2330
c906108c 2331 va_start (args, format);
c906108c
SS
2332 vfprintf_unfiltered (stream, format, args);
2333 va_end (args);
2334}
2335
2336/* Like fprintf_filtered, but prints its result indented.
2337 Called as fprintfi_filtered (spaces, stream, format, ...); */
2338
c906108c 2339void
8731e58e
AC
2340fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2341 ...)
c906108c
SS
2342{
2343 va_list args;
e0627e85 2344
c906108c 2345 va_start (args, format);
c906108c
SS
2346 print_spaces_filtered (spaces, stream);
2347
2348 vfprintf_filtered (stream, format, args);
2349 va_end (args);
2350}
2351
2352
c906108c 2353void
8731e58e 2354printf_filtered (const char *format, ...)
c906108c
SS
2355{
2356 va_list args;
e0627e85 2357
c906108c 2358 va_start (args, format);
c906108c
SS
2359 vfprintf_filtered (gdb_stdout, format, args);
2360 va_end (args);
2361}
2362
2363
c906108c 2364void
8731e58e 2365printf_unfiltered (const char *format, ...)
c906108c
SS
2366{
2367 va_list args;
e0627e85 2368
c906108c 2369 va_start (args, format);
c906108c
SS
2370 vfprintf_unfiltered (gdb_stdout, format, args);
2371 va_end (args);
2372}
2373
2374/* Like printf_filtered, but prints it's result indented.
2375 Called as printfi_filtered (spaces, format, ...); */
2376
c906108c 2377void
8731e58e 2378printfi_filtered (int spaces, const char *format, ...)
c906108c
SS
2379{
2380 va_list args;
e0627e85 2381
c906108c 2382 va_start (args, format);
c906108c
SS
2383 print_spaces_filtered (spaces, gdb_stdout);
2384 vfprintf_filtered (gdb_stdout, format, args);
2385 va_end (args);
2386}
2387
2388/* Easy -- but watch out!
2389
2390 This routine is *not* a replacement for puts()! puts() appends a newline.
2391 This one doesn't, and had better not! */
2392
2393void
fba45db2 2394puts_filtered (const char *string)
c906108c
SS
2395{
2396 fputs_filtered (string, gdb_stdout);
2397}
2398
2399void
fba45db2 2400puts_unfiltered (const char *string)
c906108c
SS
2401{
2402 fputs_unfiltered (string, gdb_stdout);
2403}
2404
2405/* Return a pointer to N spaces and a null. The pointer is good
2406 until the next call to here. */
2407char *
fba45db2 2408n_spaces (int n)
c906108c 2409{
392a587b
JM
2410 char *t;
2411 static char *spaces = 0;
2412 static int max_spaces = -1;
c906108c
SS
2413
2414 if (n > max_spaces)
2415 {
2416 if (spaces)
b8c9b27d 2417 xfree (spaces);
c5aa993b
JM
2418 spaces = (char *) xmalloc (n + 1);
2419 for (t = spaces + n; t != spaces;)
c906108c
SS
2420 *--t = ' ';
2421 spaces[n] = '\0';
2422 max_spaces = n;
2423 }
2424
2425 return spaces + max_spaces - n;
2426}
2427
2428/* Print N spaces. */
2429void
fba45db2 2430print_spaces_filtered (int n, struct ui_file *stream)
c906108c
SS
2431{
2432 fputs_filtered (n_spaces (n), stream);
2433}
2434\f
4a351cef 2435/* C++/ObjC demangler stuff. */
c906108c 2436
389e51db
AC
2437/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2438 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2439 If the name is not mangled, or the language for the name is unknown, or
581e13c1 2440 demangling is off, the name is printed in its "raw" form. */
c906108c
SS
2441
2442void
0d5cff50 2443fprintf_symbol_filtered (struct ui_file *stream, const char *name,
8731e58e 2444 enum language lang, int arg_mode)
c906108c
SS
2445{
2446 char *demangled;
2447
2448 if (name != NULL)
2449 {
2450 /* If user wants to see raw output, no problem. */
2451 if (!demangle)
2452 {
2453 fputs_filtered (name, stream);
2454 }
2455 else
2456 {
9a3d7dfd 2457 demangled = language_demangle (language_def (lang), name, arg_mode);
c906108c
SS
2458 fputs_filtered (demangled ? demangled : name, stream);
2459 if (demangled != NULL)
2460 {
b8c9b27d 2461 xfree (demangled);
c906108c
SS
2462 }
2463 }
2464 }
2465}
2466
2467/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2468 differences in whitespace. Returns 0 if they match, non-zero if they
2469 don't (slightly different than strcmp()'s range of return values).
c5aa993b 2470
c906108c
SS
2471 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2472 This "feature" is useful when searching for matching C++ function names
2473 (such as if the user types 'break FOO', where FOO is a mangled C++
581e13c1 2474 function). */
c906108c
SS
2475
2476int
fba45db2 2477strcmp_iw (const char *string1, const char *string2)
c906108c
SS
2478{
2479 while ((*string1 != '\0') && (*string2 != '\0'))
2480 {
2481 while (isspace (*string1))
2482 {
2483 string1++;
2484 }
2485 while (isspace (*string2))
2486 {
2487 string2++;
2488 }
559a7a62
JK
2489 if (case_sensitivity == case_sensitive_on && *string1 != *string2)
2490 break;
2491 if (case_sensitivity == case_sensitive_off
2492 && (tolower ((unsigned char) *string1)
2493 != tolower ((unsigned char) *string2)))
2494 break;
c906108c
SS
2495 if (*string1 != '\0')
2496 {
2497 string1++;
2498 string2++;
2499 }
2500 }
2501 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2502}
2de7ced7 2503
0fe19209
DC
2504/* This is like strcmp except that it ignores whitespace and treats
2505 '(' as the first non-NULL character in terms of ordering. Like
2506 strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2507 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2508 according to that ordering.
2509
2510 If a list is sorted according to this function and if you want to
2511 find names in the list that match some fixed NAME according to
2512 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2513 where this function would put NAME.
2514
559a7a62
JK
2515 This function must be neutral to the CASE_SENSITIVITY setting as the user
2516 may choose it during later lookup. Therefore this function always sorts
2517 primarily case-insensitively and secondarily case-sensitively.
2518
0fe19209
DC
2519 Here are some examples of why using strcmp to sort is a bad idea:
2520
2521 Whitespace example:
2522
2523 Say your partial symtab contains: "foo<char *>", "goo". Then, if
2524 we try to do a search for "foo<char*>", strcmp will locate this
2525 after "foo<char *>" and before "goo". Then lookup_partial_symbol
2526 will start looking at strings beginning with "goo", and will never
2527 see the correct match of "foo<char *>".
2528
2529 Parenthesis example:
2530
2531 In practice, this is less like to be an issue, but I'll give it a
2532 shot. Let's assume that '$' is a legitimate character to occur in
2533 symbols. (Which may well even be the case on some systems.) Then
2534 say that the partial symbol table contains "foo$" and "foo(int)".
2535 strcmp will put them in this order, since '$' < '('. Now, if the
2536 user searches for "foo", then strcmp will sort "foo" before "foo$".
2537 Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2538 "foo") is false, so it won't proceed to the actual match of
2539 "foo(int)" with "foo". */
2540
2541int
2542strcmp_iw_ordered (const char *string1, const char *string2)
2543{
559a7a62
JK
2544 const char *saved_string1 = string1, *saved_string2 = string2;
2545 enum case_sensitivity case_pass = case_sensitive_off;
2546
2547 for (;;)
0fe19209 2548 {
b11b1f88
JK
2549 /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'.
2550 Provide stub characters if we are already at the end of one of the
2551 strings. */
2552 char c1 = 'X', c2 = 'X';
2553
2554 while (*string1 != '\0' && *string2 != '\0')
0fe19209 2555 {
b11b1f88
JK
2556 while (isspace (*string1))
2557 string1++;
2558 while (isspace (*string2))
2559 string2++;
2560
559a7a62
JK
2561 switch (case_pass)
2562 {
2563 case case_sensitive_off:
2564 c1 = tolower ((unsigned char) *string1);
2565 c2 = tolower ((unsigned char) *string2);
2566 break;
2567 case case_sensitive_on:
b11b1f88
JK
2568 c1 = *string1;
2569 c2 = *string2;
559a7a62
JK
2570 break;
2571 }
b11b1f88
JK
2572 if (c1 != c2)
2573 break;
2574
2575 if (*string1 != '\0')
2576 {
2577 string1++;
2578 string2++;
2579 }
0fe19209 2580 }
b11b1f88
JK
2581
2582 switch (*string1)
0fe19209 2583 {
b11b1f88
JK
2584 /* Characters are non-equal unless they're both '\0'; we want to
2585 make sure we get the comparison right according to our
2586 comparison in the cases where one of them is '\0' or '('. */
2587 case '\0':
2588 if (*string2 == '\0')
559a7a62 2589 break;
b11b1f88
JK
2590 else
2591 return -1;
2592 case '(':
2593 if (*string2 == '\0')
2594 return 1;
2595 else
2596 return -1;
2597 default:
2598 if (*string2 == '\0' || *string2 == '(')
2599 return 1;
559a7a62
JK
2600 else if (c1 > c2)
2601 return 1;
2602 else if (c1 < c2)
2603 return -1;
2604 /* PASSTHRU */
0fe19209 2605 }
559a7a62
JK
2606
2607 if (case_pass == case_sensitive_on)
2608 return 0;
2609
2610 /* Otherwise the strings were equal in case insensitive way, make
2611 a more fine grained comparison in a case sensitive way. */
2612
2613 case_pass = case_sensitive_on;
2614 string1 = saved_string1;
2615 string2 = saved_string2;
0fe19209 2616 }
0fe19209
DC
2617}
2618
2de7ced7
DJ
2619/* A simple comparison function with opposite semantics to strcmp. */
2620
2621int
2622streq (const char *lhs, const char *rhs)
2623{
2624 return !strcmp (lhs, rhs);
2625}
c906108c 2626\f
c5aa993b 2627
c906108c 2628/*
c5aa993b
JM
2629 ** subset_compare()
2630 ** Answer whether string_to_compare is a full or partial match to
2631 ** template_string. The partial match must be in sequence starting
2632 ** at index 0.
2633 */
c906108c 2634int
fba45db2 2635subset_compare (char *string_to_compare, char *template_string)
7a292a7a
SS
2636{
2637 int match;
e0627e85 2638
8731e58e
AC
2639 if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2640 && strlen (string_to_compare) <= strlen (template_string))
2641 match =
2642 (strncmp
2643 (template_string, string_to_compare, strlen (string_to_compare)) == 0);
7a292a7a
SS
2644 else
2645 match = 0;
2646 return match;
2647}
c906108c 2648
7a292a7a 2649static void
fba45db2 2650pagination_on_command (char *arg, int from_tty)
c906108c
SS
2651{
2652 pagination_enabled = 1;
2653}
2654
7a292a7a 2655static void
fba45db2 2656pagination_off_command (char *arg, int from_tty)
c906108c
SS
2657{
2658 pagination_enabled = 0;
2659}
75feb17d
DJ
2660
2661static void
2662show_debug_timestamp (struct ui_file *file, int from_tty,
2663 struct cmd_list_element *c, const char *value)
2664{
3e43a32a
MS
2665 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"),
2666 value);
75feb17d 2667}
c906108c 2668\f
c5aa993b 2669
c906108c 2670void
fba45db2 2671initialize_utils (void)
c906108c 2672{
35096d9d 2673 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
77dec115
EZ
2674Set number of characters where GDB should wrap lines of its output."), _("\
2675Show number of characters where GDB should wrap lines of its output."), _("\
2676This affects where GDB wraps its output to fit the screen width.\n\
f81d1120 2677Setting this to \"unlimited\" or zero prevents GDB from wrapping its output."),
35096d9d 2678 set_width_command,
920d2a44 2679 show_chars_per_line,
35096d9d
AC
2680 &setlist, &showlist);
2681
2682 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
77dec115
EZ
2683Set number of lines in a page for GDB output pagination."), _("\
2684Show number of lines in a page for GDB output pagination."), _("\
2685This affects the number of lines after which GDB will pause\n\
2686its output and ask you whether to continue.\n\
f81d1120 2687Setting this to \"unlimited\" or zero causes GDB never pause during output."),
35096d9d 2688 set_height_command,
920d2a44 2689 show_lines_per_page,
35096d9d 2690 &setlist, &showlist);
c5aa993b 2691
c906108c
SS
2692 init_page_info ();
2693
5bf193a2
AC
2694 add_setshow_boolean_cmd ("pagination", class_support,
2695 &pagination_enabled, _("\
77dec115
EZ
2696Set state of GDB output pagination."), _("\
2697Show state of GDB output pagination."), _("\
2698When pagination is ON, GDB pauses at end of each screenful of\n\
2699its output and asks you whether to continue.\n\
f81d1120 2700Turning pagination off is an alternative to \"set height unlimited\"."),
5bf193a2 2701 NULL,
920d2a44 2702 show_pagination_enabled,
5bf193a2 2703 &setlist, &showlist);
4261bedc 2704
c906108c
SS
2705 if (xdb_commands)
2706 {
c5aa993b 2707 add_com ("am", class_support, pagination_on_command,
1bedd215 2708 _("Enable pagination"));
c5aa993b 2709 add_com ("sm", class_support, pagination_off_command,
1bedd215 2710 _("Disable pagination"));
c906108c
SS
2711 }
2712
5bf193a2
AC
2713 add_setshow_boolean_cmd ("sevenbit-strings", class_support,
2714 &sevenbit_strings, _("\
2715Set printing of 8-bit characters in strings as \\nnn."), _("\
2716Show printing of 8-bit characters in strings as \\nnn."), NULL,
2717 NULL,
920d2a44 2718 show_sevenbit_strings,
5bf193a2
AC
2719 &setprintlist, &showprintlist);
2720
75feb17d
DJ
2721 add_setshow_boolean_cmd ("timestamp", class_maintenance,
2722 &debug_timestamp, _("\
2723Set timestamping of debugging messages."), _("\
2724Show timestamping of debugging messages."), _("\
2725When set, debugging messages will be marked with seconds and microseconds."),
2726 NULL,
2727 show_debug_timestamp,
2728 &setdebuglist, &showdebuglist);
c906108c
SS
2729}
2730
581e13c1
MS
2731/* Print routines to handle variable size regs, etc. */
2732/* Temporary storage using circular buffer. */
c906108c 2733#define NUMCELLS 16
0759e0bf 2734#define CELLSIZE 50
c5aa993b 2735static char *
fba45db2 2736get_cell (void)
c906108c
SS
2737{
2738 static char buf[NUMCELLS][CELLSIZE];
c5aa993b 2739 static int cell = 0;
e0627e85 2740
c5aa993b
JM
2741 if (++cell >= NUMCELLS)
2742 cell = 0;
c906108c
SS
2743 return buf[cell];
2744}
2745
66bf4b3a 2746const char *
5af949e3 2747paddress (struct gdbarch *gdbarch, CORE_ADDR addr)
66bf4b3a
AC
2748{
2749 /* Truncate address to the size of a target address, avoiding shifts
2750 larger or equal than the width of a CORE_ADDR. The local
2751 variable ADDR_BIT stops the compiler reporting a shift overflow
581e13c1 2752 when it won't occur. */
66bf4b3a
AC
2753 /* NOTE: This assumes that the significant address information is
2754 kept in the least significant bits of ADDR - the upper bits were
76e71323 2755 either zero or sign extended. Should gdbarch_address_to_pointer or
66bf4b3a
AC
2756 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
2757
5af949e3 2758 int addr_bit = gdbarch_addr_bit (gdbarch);
66bf4b3a
AC
2759
2760 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2761 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2762 return hex_string (addr);
2763}
2764
f1310107
TJB
2765/* This function is described in "defs.h". */
2766
2767const char *
2768print_core_address (struct gdbarch *gdbarch, CORE_ADDR address)
2769{
2770 int addr_bit = gdbarch_addr_bit (gdbarch);
2771
2772 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2773 address &= ((CORE_ADDR) 1 << addr_bit) - 1;
2774
2775 /* FIXME: cagney/2002-05-03: Need local_address_string() function
2776 that returns the language localized string formatted to a width
2777 based on gdbarch_addr_bit. */
2778 if (addr_bit <= 32)
2779 return hex_string_custom (address, 8);
2780 else
2781 return hex_string_custom (address, 16);
2782}
2783
8e3b41a9
JK
2784/* Callback hash_f for htab_create_alloc or htab_create_alloc_ex. */
2785
2786hashval_t
2787core_addr_hash (const void *ap)
2788{
2789 const CORE_ADDR *addrp = ap;
2790
2791 return *addrp;
2792}
2793
2794/* Callback eq_f for htab_create_alloc or htab_create_alloc_ex. */
2795
2796int
2797core_addr_eq (const void *ap, const void *bp)
2798{
2799 const CORE_ADDR *addr_ap = ap;
2800 const CORE_ADDR *addr_bp = bp;
2801
2802 return *addr_ap == *addr_bp;
2803}
2804
8cf46f62
MK
2805static char *
2806decimal2str (char *sign, ULONGEST addr, int width)
104c1213 2807{
8cf46f62 2808 /* Steal code from valprint.c:print_decimal(). Should this worry
581e13c1 2809 about the real size of addr as the above does? */
104c1213 2810 unsigned long temp[3];
8cf46f62 2811 char *str = get_cell ();
104c1213 2812 int i = 0;
5d502164 2813
104c1213
JM
2814 do
2815 {
2816 temp[i] = addr % (1000 * 1000 * 1000);
2817 addr /= (1000 * 1000 * 1000);
2818 i++;
bb599908 2819 width -= 9;
104c1213
JM
2820 }
2821 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
8cf46f62 2822
bb599908
PH
2823 width += 9;
2824 if (width < 0)
2825 width = 0;
8cf46f62 2826
104c1213
JM
2827 switch (i)
2828 {
2829 case 1:
8cf46f62 2830 xsnprintf (str, CELLSIZE, "%s%0*lu", sign, width, temp[0]);
104c1213
JM
2831 break;
2832 case 2:
8cf46f62
MK
2833 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu", sign, width,
2834 temp[1], temp[0]);
104c1213
JM
2835 break;
2836 case 3:
8cf46f62
MK
2837 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu%09lu", sign, width,
2838 temp[2], temp[1], temp[0]);
bb599908
PH
2839 break;
2840 default:
2841 internal_error (__FILE__, __LINE__,
e2e0b3e5 2842 _("failed internal consistency check"));
bb599908 2843 }
8cf46f62
MK
2844
2845 return str;
bb599908
PH
2846}
2847
8cf46f62
MK
2848static char *
2849octal2str (ULONGEST addr, int width)
bb599908
PH
2850{
2851 unsigned long temp[3];
8cf46f62 2852 char *str = get_cell ();
bb599908 2853 int i = 0;
5d502164 2854
bb599908
PH
2855 do
2856 {
2857 temp[i] = addr % (0100000 * 0100000);
2858 addr /= (0100000 * 0100000);
2859 i++;
2860 width -= 10;
2861 }
2862 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
8cf46f62 2863
bb599908
PH
2864 width += 10;
2865 if (width < 0)
2866 width = 0;
8cf46f62 2867
bb599908
PH
2868 switch (i)
2869 {
2870 case 1:
2871 if (temp[0] == 0)
8cf46f62 2872 xsnprintf (str, CELLSIZE, "%*o", width, 0);
bb599908 2873 else
8cf46f62 2874 xsnprintf (str, CELLSIZE, "0%0*lo", width, temp[0]);
bb599908
PH
2875 break;
2876 case 2:
8cf46f62 2877 xsnprintf (str, CELLSIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
bb599908
PH
2878 break;
2879 case 3:
8cf46f62
MK
2880 xsnprintf (str, CELLSIZE, "0%0*lo%010lo%010lo", width,
2881 temp[2], temp[1], temp[0]);
104c1213
JM
2882 break;
2883 default:
8731e58e 2884 internal_error (__FILE__, __LINE__,
e2e0b3e5 2885 _("failed internal consistency check"));
104c1213 2886 }
8cf46f62
MK
2887
2888 return str;
104c1213
JM
2889}
2890
2891char *
623d3eb1 2892pulongest (ULONGEST u)
104c1213 2893{
623d3eb1 2894 return decimal2str ("", u, 0);
104c1213
JM
2895}
2896
2897char *
623d3eb1 2898plongest (LONGEST l)
104c1213 2899{
623d3eb1
DE
2900 if (l < 0)
2901 return decimal2str ("-", -l, 0);
104c1213 2902 else
623d3eb1 2903 return decimal2str ("", l, 0);
104c1213
JM
2904}
2905
8cf46f62 2906/* Eliminate warning from compiler on 32-bit systems. */
5683e87a
AC
2907static int thirty_two = 32;
2908
104c1213 2909char *
5683e87a 2910phex (ULONGEST l, int sizeof_l)
104c1213 2911{
45a1e866 2912 char *str;
8cf46f62 2913
5683e87a 2914 switch (sizeof_l)
104c1213
JM
2915 {
2916 case 8:
45a1e866 2917 str = get_cell ();
8cf46f62
MK
2918 xsnprintf (str, CELLSIZE, "%08lx%08lx",
2919 (unsigned long) (l >> thirty_two),
2920 (unsigned long) (l & 0xffffffff));
104c1213
JM
2921 break;
2922 case 4:
45a1e866 2923 str = get_cell ();
8cf46f62 2924 xsnprintf (str, CELLSIZE, "%08lx", (unsigned long) l);
104c1213
JM
2925 break;
2926 case 2:
45a1e866 2927 str = get_cell ();
8cf46f62 2928 xsnprintf (str, CELLSIZE, "%04x", (unsigned short) (l & 0xffff));
104c1213
JM
2929 break;
2930 default:
45a1e866 2931 str = phex (l, sizeof (l));
5683e87a 2932 break;
104c1213 2933 }
8cf46f62 2934
5683e87a 2935 return str;
104c1213
JM
2936}
2937
c5aa993b 2938char *
5683e87a 2939phex_nz (ULONGEST l, int sizeof_l)
c906108c 2940{
faf833ca 2941 char *str;
8cf46f62 2942
5683e87a 2943 switch (sizeof_l)
c906108c 2944 {
c5aa993b
JM
2945 case 8:
2946 {
5683e87a 2947 unsigned long high = (unsigned long) (l >> thirty_two);
5d502164 2948
faf833ca 2949 str = get_cell ();
c5aa993b 2950 if (high == 0)
8cf46f62
MK
2951 xsnprintf (str, CELLSIZE, "%lx",
2952 (unsigned long) (l & 0xffffffff));
c5aa993b 2953 else
8cf46f62
MK
2954 xsnprintf (str, CELLSIZE, "%lx%08lx", high,
2955 (unsigned long) (l & 0xffffffff));
c906108c 2956 break;
c5aa993b
JM
2957 }
2958 case 4:
faf833ca 2959 str = get_cell ();
8cf46f62 2960 xsnprintf (str, CELLSIZE, "%lx", (unsigned long) l);
c5aa993b
JM
2961 break;
2962 case 2:
faf833ca 2963 str = get_cell ();
8cf46f62 2964 xsnprintf (str, CELLSIZE, "%x", (unsigned short) (l & 0xffff));
c5aa993b
JM
2965 break;
2966 default:
faf833ca 2967 str = phex_nz (l, sizeof (l));
5683e87a 2968 break;
c906108c 2969 }
8cf46f62 2970
5683e87a 2971 return str;
c906108c 2972}
ac2e2ef7 2973
0759e0bf
AC
2974/* Converts a LONGEST to a C-format hexadecimal literal and stores it
2975 in a static string. Returns a pointer to this string. */
2976char *
2977hex_string (LONGEST num)
2978{
2979 char *result = get_cell ();
e0627e85 2980
8cf46f62 2981 xsnprintf (result, CELLSIZE, "0x%s", phex_nz (num, sizeof (num)));
0759e0bf
AC
2982 return result;
2983}
2984
2985/* Converts a LONGEST number to a C-format hexadecimal literal and
2986 stores it in a static string. Returns a pointer to this string
2987 that is valid until the next call. The number is padded on the
2988 left with 0s to at least WIDTH characters. */
2989char *
2990hex_string_custom (LONGEST num, int width)
2991{
2992 char *result = get_cell ();
2993 char *result_end = result + CELLSIZE - 1;
2994 const char *hex = phex_nz (num, sizeof (num));
2995 int hex_len = strlen (hex);
2996
2997 if (hex_len > width)
2998 width = hex_len;
2999 if (width + 2 >= CELLSIZE)
3e43a32a
MS
3000 internal_error (__FILE__, __LINE__, _("\
3001hex_string_custom: insufficient space to store result"));
0759e0bf
AC
3002
3003 strcpy (result_end - width - 2, "0x");
3004 memset (result_end - width, '0', width);
3005 strcpy (result_end - hex_len, hex);
3006 return result_end - width - 2;
3007}
ac2e2ef7 3008
bb599908
PH
3009/* Convert VAL to a numeral in the given radix. For
3010 * radix 10, IS_SIGNED may be true, indicating a signed quantity;
3011 * otherwise VAL is interpreted as unsigned. If WIDTH is supplied,
3012 * it is the minimum width (0-padded if needed). USE_C_FORMAT means
3013 * to use C format in all cases. If it is false, then 'x'
581e13c1 3014 * and 'o' formats do not include a prefix (0x or leading 0). */
bb599908
PH
3015
3016char *
3017int_string (LONGEST val, int radix, int is_signed, int width,
3018 int use_c_format)
3019{
3020 switch (radix)
3021 {
3022 case 16:
3023 {
3024 char *result;
5d502164 3025
bb599908
PH
3026 if (width == 0)
3027 result = hex_string (val);
3028 else
3029 result = hex_string_custom (val, width);
3030 if (! use_c_format)
3031 result += 2;
3032 return result;
3033 }
3034 case 10:
3035 {
bb599908 3036 if (is_signed && val < 0)
8cf46f62 3037 return decimal2str ("-", -val, width);
bb599908 3038 else
8cf46f62 3039 return decimal2str ("", val, width);
bb599908
PH
3040 }
3041 case 8:
3042 {
8cf46f62 3043 char *result = octal2str (val, width);
5d502164 3044
bb599908
PH
3045 if (use_c_format || val == 0)
3046 return result;
3047 else
3048 return result + 1;
3049 }
3050 default:
3051 internal_error (__FILE__, __LINE__,
e2e0b3e5 3052 _("failed internal consistency check"));
bb599908
PH
3053 }
3054}
3055
03dd37c3
AC
3056/* Convert a CORE_ADDR into a string. */
3057const char *
3058core_addr_to_string (const CORE_ADDR addr)
49b563f9
KS
3059{
3060 char *str = get_cell ();
e0627e85 3061
49b563f9
KS
3062 strcpy (str, "0x");
3063 strcat (str, phex (addr, sizeof (addr)));
3064 return str;
3065}
3066
3067const char *
3068core_addr_to_string_nz (const CORE_ADDR addr)
03dd37c3
AC
3069{
3070 char *str = get_cell ();
e0627e85 3071
03dd37c3
AC
3072 strcpy (str, "0x");
3073 strcat (str, phex_nz (addr, sizeof (addr)));
3074 return str;
3075}
3076
3077/* Convert a string back into a CORE_ADDR. */
3078CORE_ADDR
3079string_to_core_addr (const char *my_string)
3080{
3081 CORE_ADDR addr = 0;
9544c605 3082
03dd37c3
AC
3083 if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
3084 {
ced572fe 3085 /* Assume that it is in hex. */
03dd37c3 3086 int i;
5d502164 3087
03dd37c3
AC
3088 for (i = 2; my_string[i] != '\0'; i++)
3089 {
3090 if (isdigit (my_string[i]))
3091 addr = (my_string[i] - '0') + (addr * 16);
8731e58e 3092 else if (isxdigit (my_string[i]))
03dd37c3
AC
3093 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
3094 else
63f06803 3095 error (_("invalid hex \"%s\""), my_string);
03dd37c3
AC
3096 }
3097 }
3098 else
3099 {
3100 /* Assume that it is in decimal. */
3101 int i;
5d502164 3102
03dd37c3
AC
3103 for (i = 0; my_string[i] != '\0'; i++)
3104 {
3105 if (isdigit (my_string[i]))
3106 addr = (my_string[i] - '0') + (addr * 10);
3107 else
63f06803 3108 error (_("invalid decimal \"%s\""), my_string);
03dd37c3
AC
3109 }
3110 }
9544c605 3111
03dd37c3
AC
3112 return addr;
3113}
58d370e0 3114
17ea7499
CES
3115const char *
3116host_address_to_string (const void *addr)
3117{
3118 char *str = get_cell ();
ea8992ce 3119
773698b5 3120 xsnprintf (str, CELLSIZE, "0x%s", phex_nz ((uintptr_t) addr, sizeof (addr)));
17ea7499
CES
3121 return str;
3122}
3123
58d370e0
TT
3124char *
3125gdb_realpath (const char *filename)
3126{
70d35819
AC
3127 /* Method 1: The system has a compile time upper bound on a filename
3128 path. Use that and realpath() to canonicalize the name. This is
3129 the most common case. Note that, if there isn't a compile time
3130 upper bound, you want to avoid realpath() at all costs. */
d8d2a3ee 3131#if defined (HAVE_REALPATH) && defined (PATH_MAX)
70d35819 3132 {
70d35819 3133 char buf[PATH_MAX];
82c0260e 3134 const char *rp = realpath (filename, buf);
5d502164 3135
70d35819
AC
3136 if (rp == NULL)
3137 rp = filename;
3138 return xstrdup (rp);
6f88d630 3139 }
a4db0f07
RH
3140#endif /* HAVE_REALPATH */
3141
70d35819
AC
3142 /* Method 2: The host system (i.e., GNU) has the function
3143 canonicalize_file_name() which malloc's a chunk of memory and
3144 returns that, use that. */
3145#if defined(HAVE_CANONICALIZE_FILE_NAME)
3146 {
3147 char *rp = canonicalize_file_name (filename);
5d502164 3148
70d35819
AC
3149 if (rp == NULL)
3150 return xstrdup (filename);
3151 else
3152 return rp;
3153 }
58d370e0 3154#endif
70d35819 3155
6411e720
AC
3156 /* FIXME: cagney/2002-11-13:
3157
3158 Method 2a: Use realpath() with a NULL buffer. Some systems, due
7a9dd1b2 3159 to the problems described in method 3, have modified their
6411e720
AC
3160 realpath() implementation so that it will allocate a buffer when
3161 NULL is passed in. Before this can be used, though, some sort of
3162 configure time test would need to be added. Otherwize the code
3163 will likely core dump. */
3164
70d35819
AC
3165 /* Method 3: Now we're getting desperate! The system doesn't have a
3166 compile time buffer size and no alternative function. Query the
3167 OS, using pathconf(), for the buffer limit. Care is needed
3168 though, some systems do not limit PATH_MAX (return -1 for
3169 pathconf()) making it impossible to pass a correctly sized buffer
3170 to realpath() (it could always overflow). On those systems, we
3171 skip this. */
8c0da261 3172#if defined (HAVE_REALPATH) && defined (_PC_PATH_MAX) && defined(HAVE_ALLOCA)
70d35819
AC
3173 {
3174 /* Find out the max path size. */
3175 long path_max = pathconf ("/", _PC_PATH_MAX);
5d502164 3176
70d35819
AC
3177 if (path_max > 0)
3178 {
3179 /* PATH_MAX is bounded. */
3180 char *buf = alloca (path_max);
3181 char *rp = realpath (filename, buf);
5d502164 3182
70d35819
AC
3183 return xstrdup (rp ? rp : filename);
3184 }
3185 }
3186#endif
3187
9c5e4386
JB
3188 /* The MS Windows method. If we don't have realpath, we assume we
3189 don't have symlinks and just canonicalize to a Windows absolute
3190 path. GetFullPath converts ../ and ./ in relative paths to
3191 absolute paths, filling in current drive if one is not given
3192 or using the current directory of a specified drive (eg, "E:foo").
3193 It also converts all forward slashes to back slashes. */
3194 /* The file system is case-insensitive but case-preserving.
3195 So we do not lowercase the path. Otherwise, we might not
3196 be able to display the original casing in a given path. */
3197#if defined (_WIN32)
3198 {
3199 char buf[MAX_PATH];
3200 DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
3201
3202 if (len > 0 && len < MAX_PATH)
3203 return xstrdup (buf);
3204 }
3205#endif
3206
70d35819
AC
3207 /* This system is a lost cause, just dup the buffer. */
3208 return xstrdup (filename);
58d370e0 3209}
303c8ebd 3210
5b03f266
AC
3211ULONGEST
3212align_up (ULONGEST v, int n)
3213{
3214 /* Check that N is really a power of two. */
3215 gdb_assert (n && (n & (n-1)) == 0);
3216 return (v + n - 1) & -n;
3217}
3218
3219ULONGEST
3220align_down (ULONGEST v, int n)
3221{
3222 /* Check that N is really a power of two. */
3223 gdb_assert (n && (n & (n-1)) == 0);
3224 return (v & -n);
3225}
ae5a43e0 3226
5bd1ef56
TT
3227/* See utils.h. */
3228
3229LONGEST
3230gdb_sign_extend (LONGEST value, int bit)
3231{
3232 gdb_assert (bit >= 1 && bit <= 8 * sizeof (LONGEST));
3233
3234 if (((value >> (bit - 1)) & 1) != 0)
3235 {
3236 LONGEST signbit = ((LONGEST) 1) << (bit - 1);
3237
3238 value = (value ^ signbit) - signbit;
3239 }
3240
3241 return value;
3242}
3243
ae5a43e0
DJ
3244/* Allocation function for the libiberty hash table which uses an
3245 obstack. The obstack is passed as DATA. */
3246
3247void *
3248hashtab_obstack_allocate (void *data, size_t size, size_t count)
3249{
3250 unsigned int total = size * count;
3251 void *ptr = obstack_alloc ((struct obstack *) data, total);
e0627e85 3252
ae5a43e0
DJ
3253 memset (ptr, 0, total);
3254 return ptr;
3255}
3256
3257/* Trivial deallocation function for the libiberty splay tree and hash
3258 table - don't deallocate anything. Rely on later deletion of the
3259 obstack. DATA will be the obstack, although it is not needed
3260 here. */
3261
3262void
3263dummy_obstack_deallocate (void *object, void *data)
3264{
3265 return;
3266}
253c8abb
DJ
3267
3268/* The bit offset of the highest byte in a ULONGEST, for overflow
3269 checking. */
3270
3271#define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
3272
3273/* True (non-zero) iff DIGIT is a valid digit in radix BASE,
3274 where 2 <= BASE <= 36. */
3275
3276static int
3277is_digit_in_base (unsigned char digit, int base)
3278{
3279 if (!isalnum (digit))
3280 return 0;
3281 if (base <= 10)
3282 return (isdigit (digit) && digit < base + '0');
3283 else
3284 return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
3285}
3286
3287static int
3288digit_to_int (unsigned char c)
3289{
3290 if (isdigit (c))
3291 return c - '0';
3292 else
3293 return tolower (c) - 'a' + 10;
3294}
3295
3296/* As for strtoul, but for ULONGEST results. */
3297
3298ULONGEST
3299strtoulst (const char *num, const char **trailer, int base)
3300{
3301 unsigned int high_part;
3302 ULONGEST result;
3303 int minus = 0;
3304 int i = 0;
3305
3306 /* Skip leading whitespace. */
3307 while (isspace (num[i]))
3308 i++;
3309
3310 /* Handle prefixes. */
3311 if (num[i] == '+')
3312 i++;
3313 else if (num[i] == '-')
3314 {
3315 minus = 1;
3316 i++;
3317 }
3318
3319 if (base == 0 || base == 16)
3320 {
3321 if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
3322 {
3323 i += 2;
3324 if (base == 0)
3325 base = 16;
3326 }
3327 }
3328
3329 if (base == 0 && num[i] == '0')
3330 base = 8;
3331
3332 if (base == 0)
3333 base = 10;
3334
3335 if (base < 2 || base > 36)
3336 {
3337 errno = EINVAL;
3338 return 0;
3339 }
3340
3341 result = high_part = 0;
3342 for (; is_digit_in_base (num[i], base); i += 1)
3343 {
3344 result = result * base + digit_to_int (num[i]);
3345 high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
3346 result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
3347 if (high_part > 0xff)
3348 {
3349 errno = ERANGE;
3350 result = ~ (ULONGEST) 0;
3351 high_part = 0;
3352 minus = 0;
3353 break;
3354 }
3355 }
3356
3357 if (trailer != NULL)
3358 *trailer = &num[i];
3359
3360 result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
3361 if (minus)
3362 return -result;
3363 else
3364 return result;
3365}
e1024ff1
DJ
3366
3367/* Simple, portable version of dirname that does not modify its
3368 argument. */
3369
3370char *
3371ldirname (const char *filename)
3372{
3373 const char *base = lbasename (filename);
3374 char *dirname;
3375
3376 while (base > filename && IS_DIR_SEPARATOR (base[-1]))
3377 --base;
3378
3379 if (base == filename)
3380 return NULL;
3381
3382 dirname = xmalloc (base - filename + 2);
3383 memcpy (dirname, filename, base - filename);
3384
3385 /* On DOS based file systems, convert "d:foo" to "d:.", so that we
3386 create "d:./bar" later instead of the (different) "d:/bar". */
3387 if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
3388 && !IS_DIR_SEPARATOR (filename[0]))
3389 dirname[base++ - filename] = '.';
3390
3391 dirname[base - filename] = '\0';
3392 return dirname;
3393}
d1a41061
PP
3394
3395/* Call libiberty's buildargv, and return the result.
3396 If buildargv fails due to out-of-memory, call nomem.
3397 Therefore, the returned value is guaranteed to be non-NULL,
3398 unless the parameter itself is NULL. */
3399
3400char **
3401gdb_buildargv (const char *s)
3402{
3403 char **argv = buildargv (s);
e0627e85 3404
d1a41061 3405 if (s != NULL && argv == NULL)
d26e3629 3406 malloc_failure (0);
d1a41061
PP
3407 return argv;
3408}
3c16cced 3409
dc146f7c
VP
3410int
3411compare_positive_ints (const void *ap, const void *bp)
3412{
3413 /* Because we know we're comparing two ints which are positive,
3414 there's no danger of overflow here. */
3415 return * (int *) ap - * (int *) bp;
3416}
3417
f8eba3c6
TT
3418/* String compare function for qsort. */
3419
3420int
3421compare_strings (const void *arg1, const void *arg2)
3422{
3423 const char **s1 = (const char **) arg1;
3424 const char **s2 = (const char **) arg2;
3425
3426 return strcmp (*s1, *s2);
3427}
3428
d18b8b7a 3429#define AMBIGUOUS_MESS1 ".\nMatching formats:"
3e43a32a
MS
3430#define AMBIGUOUS_MESS2 \
3431 ".\nUse \"set gnutarget format-name\" to specify the format."
d18b8b7a
HZ
3432
3433const char *
3434gdb_bfd_errmsg (bfd_error_type error_tag, char **matching)
3435{
3436 char *ret, *retp;
3437 int ret_len;
3438 char **p;
3439
3440 /* Check if errmsg just need simple return. */
3441 if (error_tag != bfd_error_file_ambiguously_recognized || matching == NULL)
3442 return bfd_errmsg (error_tag);
3443
3444 ret_len = strlen (bfd_errmsg (error_tag)) + strlen (AMBIGUOUS_MESS1)
3445 + strlen (AMBIGUOUS_MESS2);
3446 for (p = matching; *p; p++)
3447 ret_len += strlen (*p) + 1;
3448 ret = xmalloc (ret_len + 1);
3449 retp = ret;
3450 make_cleanup (xfree, ret);
3451
3452 strcpy (retp, bfd_errmsg (error_tag));
3453 retp += strlen (retp);
3454
3455 strcpy (retp, AMBIGUOUS_MESS1);
3456 retp += strlen (retp);
3457
3458 for (p = matching; *p; p++)
3459 {
3460 sprintf (retp, " %s", *p);
3461 retp += strlen (retp);
3462 }
3463 xfree (matching);
3464
3465 strcpy (retp, AMBIGUOUS_MESS2);
3466
3467 return ret;
3468}
3469
74164c56
JK
3470/* Return ARGS parsed as a valid pid, or throw an error. */
3471
3472int
3473parse_pid_to_attach (char *args)
3474{
3475 unsigned long pid;
3476 char *dummy;
3477
3478 if (!args)
3479 error_no_arg (_("process-id to attach"));
3480
3481 dummy = args;
3482 pid = strtoul (args, &dummy, 0);
3483 /* Some targets don't set errno on errors, grrr! */
3484 if ((pid == 0 && dummy == args) || dummy != &args[strlen (args)])
3485 error (_("Illegal process-id: %s."), args);
3486
3487 return pid;
3488}
3489
353d1d73
JK
3490/* Helper for make_bpstat_clear_actions_cleanup. */
3491
3492static void
3493do_bpstat_clear_actions_cleanup (void *unused)
3494{
3495 bpstat_clear_actions ();
3496}
3497
3498/* Call bpstat_clear_actions for the case an exception is throw. You should
3499 discard_cleanups if no exception is caught. */
3500
3501struct cleanup *
3502make_bpstat_clear_actions_cleanup (void)
3503{
3504 return make_cleanup (do_bpstat_clear_actions_cleanup, NULL);
3505}
3506
df15bd07
JK
3507/* Check for GCC >= 4.x according to the symtab->producer string. Return minor
3508 version (x) of 4.x in such case. If it is not GCC or it is GCC older than
3509 4.x return -1. If it is GCC 5.x or higher return INT_MAX. */
3510
3511int
3512producer_is_gcc_ge_4 (const char *producer)
3513{
3514 const char *cs;
3515 int major, minor;
3516
3517 if (producer == NULL)
3518 {
3519 /* For unknown compilers expect their behavior is not compliant. For GCC
3520 this case can also happen for -gdwarf-4 type units supported since
3521 gcc-4.5. */
3522
3523 return -1;
3524 }
3525
3526 /* Skip any identifier after "GNU " - such as "C++" or "Java". */
3527
3528 if (strncmp (producer, "GNU ", strlen ("GNU ")) != 0)
3529 {
3530 /* For non-GCC compilers expect their behavior is not compliant. */
3531
3532 return -1;
3533 }
3534 cs = &producer[strlen ("GNU ")];
3535 while (*cs && !isdigit (*cs))
3536 cs++;
3537 if (sscanf (cs, "%d.%d", &major, &minor) != 2)
3538 {
3539 /* Not recognized as GCC. */
3540
3541 return -1;
3542 }
3543
3544 if (major < 4)
3545 return -1;
3546 if (major > 4)
3547 return INT_MAX;
3548 return minor;
3549}
3550
e4ab2fad
JK
3551/* Helper for make_cleanup_free_char_ptr_vec. */
3552
3553static void
3554do_free_char_ptr_vec (void *arg)
3555{
3556 VEC (char_ptr) *char_ptr_vec = arg;
3557
3558 free_char_ptr_vec (char_ptr_vec);
3559}
3560
3561/* Make cleanup handler calling xfree for each element of CHAR_PTR_VEC and
3562 final VEC_free for CHAR_PTR_VEC itself.
3563
3564 You must not modify CHAR_PTR_VEC after this cleanup registration as the
3565 CHAR_PTR_VEC base address may change on its updates. Contrary to VEC_free
3566 this function does not (cannot) clear the pointer. */
3567
3568struct cleanup *
3569make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
3570{
3571 return make_cleanup (do_free_char_ptr_vec, char_ptr_vec);
3572}
3573
6dea1fbd
JK
3574/* Substitute all occurences of string FROM by string TO in *STRINGP. *STRINGP
3575 must come from xrealloc-compatible allocator and it may be updated. FROM
1564a261
JK
3576 needs to be delimited by IS_DIR_SEPARATOR or DIRNAME_SEPARATOR (or be
3577 located at the start or end of *STRINGP. */
6dea1fbd
JK
3578
3579void
3580substitute_path_component (char **stringp, const char *from, const char *to)
3581{
3582 char *string = *stringp, *s;
3583 const size_t from_len = strlen (from);
3584 const size_t to_len = strlen (to);
3585
3586 for (s = string;;)
3587 {
3588 s = strstr (s, from);
3589 if (s == NULL)
3590 break;
3591
1564a261
JK
3592 if ((s == string || IS_DIR_SEPARATOR (s[-1])
3593 || s[-1] == DIRNAME_SEPARATOR)
3594 && (s[from_len] == '\0' || IS_DIR_SEPARATOR (s[from_len])
3595 || s[from_len] == DIRNAME_SEPARATOR))
6dea1fbd
JK
3596 {
3597 char *string_new;
3598
3599 string_new = xrealloc (string, (strlen (string) + to_len + 1));
3600
3601 /* Relocate the current S pointer. */
3602 s = s - string + string_new;
3603 string = string_new;
3604
3605 /* Replace from by to. */
3606 memmove (&s[to_len], &s[from_len], strlen (&s[from_len]) + 1);
3607 memcpy (s, to, to_len);
3608
3609 s += to_len;
3610 }
3611 else
3612 s++;
3613 }
3614
3615 *stringp = string;
3616}
3617
0b6cb71e
DE
3618#ifdef HAVE_WAITPID
3619
3620#ifdef SIGALRM
3621
3622/* SIGALRM handler for waitpid_with_timeout. */
3623
3624static void
3625sigalrm_handler (int signo)
3626{
3627 /* Nothing to do. */
3628}
3629
3630#endif
3631
3632/* Wrapper to wait for child PID to die with TIMEOUT.
3633 TIMEOUT is the time to stop waiting in seconds.
3634 If TIMEOUT is zero, pass WNOHANG to waitpid.
3635 Returns PID if it was successfully waited for, otherwise -1.
3636
3637 Timeouts are currently implemented with alarm and SIGALRM.
3638 If the host does not support them, this waits "forever".
3639 It would be odd though for a host to have waitpid and not SIGALRM. */
3640
3641pid_t
3642wait_to_die_with_timeout (pid_t pid, int *status, int timeout)
3643{
3644 pid_t waitpid_result;
3645
3646 gdb_assert (pid > 0);
3647 gdb_assert (timeout >= 0);
3648
3649 if (timeout > 0)
3650 {
3651#ifdef SIGALRM
3652#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3653 struct sigaction sa, old_sa;
3654
3655 sa.sa_handler = sigalrm_handler;
3656 sigemptyset (&sa.sa_mask);
3657 sa.sa_flags = 0;
3658 sigaction (SIGALRM, &sa, &old_sa);
3659#else
3660 void (*ofunc) ();
3661
3662 ofunc = (void (*)()) signal (SIGALRM, sigalrm_handler);
3663#endif
3664
3665 alarm (timeout);
3666#endif
3667
3668 waitpid_result = waitpid (pid, status, 0);
3669
3670#ifdef SIGALRM
3671 alarm (0);
3672#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3673 sigaction (SIGALRM, &old_sa, NULL);
3674#else
3675 signal (SIGALRM, ofunc);
3676#endif
3677#endif
3678 }
3679 else
3680 waitpid_result = waitpid (pid, status, WNOHANG);
3681
3682 if (waitpid_result == pid)
3683 return pid;
3684 else
3685 return -1;
3686}
3687
3688#endif /* HAVE_WAITPID */
3689
202cbf1c
JK
3690/* Provide fnmatch compatible function for FNM_FILE_NAME matching of host files.
3691 Both FNM_FILE_NAME and FNM_NOESCAPE must be set in FLAGS.
3692
3693 It handles correctly HAVE_DOS_BASED_FILE_SYSTEM and
3694 HAVE_CASE_INSENSITIVE_FILE_SYSTEM. */
3695
3696int
3697gdb_filename_fnmatch (const char *pattern, const char *string, int flags)
3698{
3699 gdb_assert ((flags & FNM_FILE_NAME) != 0);
3700
3701 /* It is unclear how '\' escaping vs. directory separator should coexist. */
3702 gdb_assert ((flags & FNM_NOESCAPE) != 0);
3703
3704#ifdef HAVE_DOS_BASED_FILE_SYSTEM
3705 {
3706 char *pattern_slash, *string_slash;
3707
3708 /* Replace '\' by '/' in both strings. */
3709
3710 pattern_slash = alloca (strlen (pattern) + 1);
3711 strcpy (pattern_slash, pattern);
3712 pattern = pattern_slash;
3713 for (; *pattern_slash != 0; pattern_slash++)
3714 if (IS_DIR_SEPARATOR (*pattern_slash))
3715 *pattern_slash = '/';
3716
3717 string_slash = alloca (strlen (string) + 1);
3718 strcpy (string_slash, string);
3719 string = string_slash;
3720 for (; *string_slash != 0; string_slash++)
3721 if (IS_DIR_SEPARATOR (*string_slash))
3722 *string_slash = '/';
3723 }
3724#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
3725
3726#ifdef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
3727 flags |= FNM_CASEFOLD;
3728#endif /* HAVE_CASE_INSENSITIVE_FILE_SYSTEM */
3729
3730 return fnmatch (pattern, string, flags);
3731}
3732
2c0b251b
PA
3733/* Provide a prototype to silence -Wmissing-prototypes. */
3734extern initialize_file_ftype _initialize_utils;
3735
3c16cced
PA
3736void
3737_initialize_utils (void)
3738{
3739 add_internal_problem_command (&internal_error_problem);
3740 add_internal_problem_command (&internal_warning_problem);
3741}
This page took 2.60206 seconds and 4 git commands to generate.