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