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