* ltmain.sh (relink_command): Fix typo in previous change.
[binutils-gdb.git] / gdb / utils.c
1 /* General utility routines for GDB, the GNU debugger.
2 Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3 1996, 1997, 1998, 1999, 2000, 2001, 2002
4 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23 /* FIXME: cagney/2002-02-28: The GDB coding standard indicates that
24 "defs.h" should be included first. Unfortunatly some systems
25 (currently Debian GNU/Linux) include the <stdbool.h> via <curses.h>
26 and they clash with "bfd.h"'s definiton of true/false. The correct
27 fix is to remove true/false from "bfd.h", however, until that
28 happens, hack around it by including "config.h" and <curses.h>
29 first. */
30
31 #include "config.h"
32
33 #ifdef HAVE_CURSES_H
34 #include <curses.h>
35 #endif
36 #ifdef HAVE_TERM_H
37 #include <term.h>
38 #endif
39
40 #include "defs.h"
41 #include "gdb_assert.h"
42 #include <ctype.h>
43 #include "gdb_string.h"
44 #include "event-top.h"
45
46 #ifdef __GO32__
47 #include <pc.h>
48 #endif
49
50 /* SunOS's curses.h has a '#define reg register' in it. Thank you Sun. */
51 #ifdef reg
52 #undef reg
53 #endif
54
55 #include <signal.h>
56 #include "gdbcmd.h"
57 #include "serial.h"
58 #include "bfd.h"
59 #include "target.h"
60 #include "demangle.h"
61 #include "expression.h"
62 #include "language.h"
63 #include "annotate.h"
64
65 #include "inferior.h" /* for signed_pointer_to_address */
66
67 #include <sys/param.h> /* For MAXPATHLEN */
68
69 #include <readline/readline.h>
70
71 #ifdef USE_MMALLOC
72 #include "mmalloc.h"
73 #endif
74
75 #ifdef NEED_DECLARATION_MALLOC
76 extern PTR malloc ();
77 #endif
78 #ifdef NEED_DECLARATION_REALLOC
79 extern PTR realloc ();
80 #endif
81 #ifdef NEED_DECLARATION_FREE
82 extern void free ();
83 #endif
84 /* Actually, we'll never have the decl, since we don't define _GNU_SOURCE. */
85 #if defined(HAVE_CANONICALIZE_FILE_NAME) \
86 && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
87 extern char *canonicalize_file_name (const char *);
88 #endif
89
90 #undef XMALLOC
91 #define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
92
93 /* readline defines this. */
94 #undef savestring
95
96 void (*error_begin_hook) (void);
97
98 /* Holds the last error message issued by gdb */
99
100 static struct ui_file *gdb_lasterr;
101
102 /* Prototypes for local functions */
103
104 static void vfprintf_maybe_filtered (struct ui_file *, const char *,
105 va_list, int);
106
107 static void fputs_maybe_filtered (const char *, struct ui_file *, int);
108
109 #if defined (USE_MMALLOC) && !defined (NO_MMCHECK)
110 static void malloc_botch (void);
111 #endif
112
113 static void prompt_for_continue (void);
114
115 static void set_width_command (char *, int, struct cmd_list_element *);
116
117 static void set_width (void);
118
119 /* Chain of cleanup actions established with make_cleanup,
120 to be executed if an error happens. */
121
122 static struct cleanup *cleanup_chain; /* cleaned up after a failed command */
123 static struct cleanup *final_cleanup_chain; /* cleaned up when gdb exits */
124 static struct cleanup *run_cleanup_chain; /* cleaned up on each 'run' */
125 static struct cleanup *exec_cleanup_chain; /* cleaned up on each execution command */
126 /* cleaned up on each error from within an execution command */
127 static struct cleanup *exec_error_cleanup_chain;
128
129 /* Pointer to what is left to do for an execution command after the
130 target stops. Used only in asynchronous mode, by targets that
131 support async execution. The finish and until commands use it. So
132 does the target extended-remote command. */
133 struct continuation *cmd_continuation;
134 struct continuation *intermediate_continuation;
135
136 /* Nonzero if we have job control. */
137
138 int job_control;
139
140 /* Nonzero means a quit has been requested. */
141
142 int quit_flag;
143
144 /* Nonzero means quit immediately if Control-C is typed now, rather
145 than waiting until QUIT is executed. Be careful in setting this;
146 code which executes with immediate_quit set has to be very careful
147 about being able to deal with being interrupted at any time. It is
148 almost always better to use QUIT; the only exception I can think of
149 is being able to quit out of a system call (using EINTR loses if
150 the SIGINT happens between the previous QUIT and the system call).
151 To immediately quit in the case in which a SIGINT happens between
152 the previous QUIT and setting immediate_quit (desirable anytime we
153 expect to block), call QUIT after setting immediate_quit. */
154
155 int immediate_quit;
156
157 /* Nonzero means that encoded C++ names should be printed out in their
158 C++ form rather than raw. */
159
160 int demangle = 1;
161
162 /* Nonzero means that encoded C++ names should be printed out in their
163 C++ form even in assembler language displays. If this is set, but
164 DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */
165
166 int asm_demangle = 0;
167
168 /* Nonzero means that strings with character values >0x7F should be printed
169 as octal escapes. Zero means just print the value (e.g. it's an
170 international character, and the terminal or window can cope.) */
171
172 int sevenbit_strings = 0;
173
174 /* String to be printed before error messages, if any. */
175
176 char *error_pre_print;
177
178 /* String to be printed before quit messages, if any. */
179
180 char *quit_pre_print;
181
182 /* String to be printed before warning messages, if any. */
183
184 char *warning_pre_print = "\nwarning: ";
185
186 int pagination_enabled = 1;
187 \f
188
189 /* Add a new cleanup to the cleanup_chain,
190 and return the previous chain pointer
191 to be passed later to do_cleanups or discard_cleanups.
192 Args are FUNCTION to clean up with, and ARG to pass to it. */
193
194 struct cleanup *
195 make_cleanup (make_cleanup_ftype *function, void *arg)
196 {
197 return make_my_cleanup (&cleanup_chain, function, arg);
198 }
199
200 struct cleanup *
201 make_final_cleanup (make_cleanup_ftype *function, void *arg)
202 {
203 return make_my_cleanup (&final_cleanup_chain, function, arg);
204 }
205
206 struct cleanup *
207 make_run_cleanup (make_cleanup_ftype *function, void *arg)
208 {
209 return make_my_cleanup (&run_cleanup_chain, function, arg);
210 }
211
212 struct cleanup *
213 make_exec_cleanup (make_cleanup_ftype *function, void *arg)
214 {
215 return make_my_cleanup (&exec_cleanup_chain, function, arg);
216 }
217
218 struct cleanup *
219 make_exec_error_cleanup (make_cleanup_ftype *function, void *arg)
220 {
221 return make_my_cleanup (&exec_error_cleanup_chain, function, arg);
222 }
223
224 static void
225 do_freeargv (void *arg)
226 {
227 freeargv ((char **) arg);
228 }
229
230 struct cleanup *
231 make_cleanup_freeargv (char **arg)
232 {
233 return make_my_cleanup (&cleanup_chain, do_freeargv, arg);
234 }
235
236 static void
237 do_bfd_close_cleanup (void *arg)
238 {
239 bfd_close (arg);
240 }
241
242 struct cleanup *
243 make_cleanup_bfd_close (bfd *abfd)
244 {
245 return make_cleanup (do_bfd_close_cleanup, abfd);
246 }
247
248 static void
249 do_close_cleanup (void *arg)
250 {
251 int *fd = arg;
252 close (*fd);
253 xfree (fd);
254 }
255
256 struct cleanup *
257 make_cleanup_close (int fd)
258 {
259 int *saved_fd = xmalloc (sizeof (fd));
260 *saved_fd = fd;
261 return make_cleanup (do_close_cleanup, saved_fd);
262 }
263
264 static void
265 do_ui_file_delete (void *arg)
266 {
267 ui_file_delete (arg);
268 }
269
270 struct cleanup *
271 make_cleanup_ui_file_delete (struct ui_file *arg)
272 {
273 return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
274 }
275
276 struct cleanup *
277 make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
278 void *arg)
279 {
280 register struct cleanup *new
281 = (struct cleanup *) xmalloc (sizeof (struct cleanup));
282 register struct cleanup *old_chain = *pmy_chain;
283
284 new->next = *pmy_chain;
285 new->function = function;
286 new->arg = arg;
287 *pmy_chain = new;
288
289 return old_chain;
290 }
291
292 /* Discard cleanups and do the actions they describe
293 until we get back to the point OLD_CHAIN in the cleanup_chain. */
294
295 void
296 do_cleanups (register struct cleanup *old_chain)
297 {
298 do_my_cleanups (&cleanup_chain, old_chain);
299 }
300
301 void
302 do_final_cleanups (register struct cleanup *old_chain)
303 {
304 do_my_cleanups (&final_cleanup_chain, old_chain);
305 }
306
307 void
308 do_run_cleanups (register struct cleanup *old_chain)
309 {
310 do_my_cleanups (&run_cleanup_chain, old_chain);
311 }
312
313 void
314 do_exec_cleanups (register struct cleanup *old_chain)
315 {
316 do_my_cleanups (&exec_cleanup_chain, old_chain);
317 }
318
319 void
320 do_exec_error_cleanups (register struct cleanup *old_chain)
321 {
322 do_my_cleanups (&exec_error_cleanup_chain, old_chain);
323 }
324
325 void
326 do_my_cleanups (register struct cleanup **pmy_chain,
327 register struct cleanup *old_chain)
328 {
329 register struct cleanup *ptr;
330 while ((ptr = *pmy_chain) != old_chain)
331 {
332 *pmy_chain = ptr->next; /* Do this first incase recursion */
333 (*ptr->function) (ptr->arg);
334 xfree (ptr);
335 }
336 }
337
338 /* Discard cleanups, not doing the actions they describe,
339 until we get back to the point OLD_CHAIN in the cleanup_chain. */
340
341 void
342 discard_cleanups (register struct cleanup *old_chain)
343 {
344 discard_my_cleanups (&cleanup_chain, old_chain);
345 }
346
347 void
348 discard_final_cleanups (register struct cleanup *old_chain)
349 {
350 discard_my_cleanups (&final_cleanup_chain, old_chain);
351 }
352
353 void
354 discard_exec_error_cleanups (register struct cleanup *old_chain)
355 {
356 discard_my_cleanups (&exec_error_cleanup_chain, old_chain);
357 }
358
359 void
360 discard_my_cleanups (register struct cleanup **pmy_chain,
361 register struct cleanup *old_chain)
362 {
363 register struct cleanup *ptr;
364 while ((ptr = *pmy_chain) != old_chain)
365 {
366 *pmy_chain = ptr->next;
367 xfree (ptr);
368 }
369 }
370
371 /* Set the cleanup_chain to 0, and return the old cleanup chain. */
372 struct cleanup *
373 save_cleanups (void)
374 {
375 return save_my_cleanups (&cleanup_chain);
376 }
377
378 struct cleanup *
379 save_final_cleanups (void)
380 {
381 return save_my_cleanups (&final_cleanup_chain);
382 }
383
384 struct cleanup *
385 save_my_cleanups (struct cleanup **pmy_chain)
386 {
387 struct cleanup *old_chain = *pmy_chain;
388
389 *pmy_chain = 0;
390 return old_chain;
391 }
392
393 /* Restore the cleanup chain from a previously saved chain. */
394 void
395 restore_cleanups (struct cleanup *chain)
396 {
397 restore_my_cleanups (&cleanup_chain, chain);
398 }
399
400 void
401 restore_final_cleanups (struct cleanup *chain)
402 {
403 restore_my_cleanups (&final_cleanup_chain, chain);
404 }
405
406 void
407 restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
408 {
409 *pmy_chain = chain;
410 }
411
412 /* This function is useful for cleanups.
413 Do
414
415 foo = xmalloc (...);
416 old_chain = make_cleanup (free_current_contents, &foo);
417
418 to arrange to free the object thus allocated. */
419
420 void
421 free_current_contents (void *ptr)
422 {
423 void **location = ptr;
424 if (location == NULL)
425 internal_error (__FILE__, __LINE__,
426 "free_current_contents: NULL pointer");
427 if (*location != NULL)
428 {
429 xfree (*location);
430 *location = NULL;
431 }
432 }
433
434 /* Provide a known function that does nothing, to use as a base for
435 for a possibly long chain of cleanups. This is useful where we
436 use the cleanup chain for handling normal cleanups as well as dealing
437 with cleanups that need to be done as a result of a call to error().
438 In such cases, we may not be certain where the first cleanup is, unless
439 we have a do-nothing one to always use as the base. */
440
441 /* ARGSUSED */
442 void
443 null_cleanup (void *arg)
444 {
445 }
446
447 /* Add a continuation to the continuation list, the global list
448 cmd_continuation. The new continuation will be added at the front.*/
449 void
450 add_continuation (void (*continuation_hook) (struct continuation_arg *),
451 struct continuation_arg *arg_list)
452 {
453 struct continuation *continuation_ptr;
454
455 continuation_ptr = (struct continuation *) xmalloc (sizeof (struct continuation));
456 continuation_ptr->continuation_hook = continuation_hook;
457 continuation_ptr->arg_list = arg_list;
458 continuation_ptr->next = cmd_continuation;
459 cmd_continuation = continuation_ptr;
460 }
461
462 /* Walk down the cmd_continuation list, and execute all the
463 continuations. There is a problem though. In some cases new
464 continuations may be added while we are in the middle of this
465 loop. If this happens they will be added in the front, and done
466 before we have a chance of exhausting those that were already
467 there. We need to then save the beginning of the list in a pointer
468 and do the continuations from there on, instead of using the
469 global beginning of list as our iteration pointer.*/
470 void
471 do_all_continuations (void)
472 {
473 struct continuation *continuation_ptr;
474 struct continuation *saved_continuation;
475
476 /* Copy the list header into another pointer, and set the global
477 list header to null, so that the global list can change as a side
478 effect of invoking the continuations and the processing of
479 the preexisting continuations will not be affected. */
480 continuation_ptr = cmd_continuation;
481 cmd_continuation = NULL;
482
483 /* Work now on the list we have set aside. */
484 while (continuation_ptr)
485 {
486 (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
487 saved_continuation = continuation_ptr;
488 continuation_ptr = continuation_ptr->next;
489 xfree (saved_continuation);
490 }
491 }
492
493 /* Walk down the cmd_continuation list, and get rid of all the
494 continuations. */
495 void
496 discard_all_continuations (void)
497 {
498 struct continuation *continuation_ptr;
499
500 while (cmd_continuation)
501 {
502 continuation_ptr = cmd_continuation;
503 cmd_continuation = continuation_ptr->next;
504 xfree (continuation_ptr);
505 }
506 }
507
508 /* Add a continuation to the continuation list, the global list
509 intermediate_continuation. The new continuation will be added at the front.*/
510 void
511 add_intermediate_continuation (void (*continuation_hook)
512 (struct continuation_arg *),
513 struct continuation_arg *arg_list)
514 {
515 struct continuation *continuation_ptr;
516
517 continuation_ptr = (struct continuation *) xmalloc (sizeof (struct continuation));
518 continuation_ptr->continuation_hook = continuation_hook;
519 continuation_ptr->arg_list = arg_list;
520 continuation_ptr->next = intermediate_continuation;
521 intermediate_continuation = continuation_ptr;
522 }
523
524 /* Walk down the cmd_continuation list, and execute all the
525 continuations. There is a problem though. In some cases new
526 continuations may be added while we are in the middle of this
527 loop. If this happens they will be added in the front, and done
528 before we have a chance of exhausting those that were already
529 there. We need to then save the beginning of the list in a pointer
530 and do the continuations from there on, instead of using the
531 global beginning of list as our iteration pointer.*/
532 void
533 do_all_intermediate_continuations (void)
534 {
535 struct continuation *continuation_ptr;
536 struct continuation *saved_continuation;
537
538 /* Copy the list header into another pointer, and set the global
539 list header to null, so that the global list can change as a side
540 effect of invoking the continuations and the processing of
541 the preexisting continuations will not be affected. */
542 continuation_ptr = intermediate_continuation;
543 intermediate_continuation = NULL;
544
545 /* Work now on the list we have set aside. */
546 while (continuation_ptr)
547 {
548 (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
549 saved_continuation = continuation_ptr;
550 continuation_ptr = continuation_ptr->next;
551 xfree (saved_continuation);
552 }
553 }
554
555 /* Walk down the cmd_continuation list, and get rid of all the
556 continuations. */
557 void
558 discard_all_intermediate_continuations (void)
559 {
560 struct continuation *continuation_ptr;
561
562 while (intermediate_continuation)
563 {
564 continuation_ptr = intermediate_continuation;
565 intermediate_continuation = continuation_ptr->next;
566 xfree (continuation_ptr);
567 }
568 }
569
570 \f
571
572 /* Print a warning message. The first argument STRING is the warning
573 message, used as an fprintf format string, the second is the
574 va_list of arguments for that string. A warning is unfiltered (not
575 paginated) so that the user does not need to page through each
576 screen full of warnings when there are lots of them. */
577
578 void
579 vwarning (const char *string, va_list args)
580 {
581 if (warning_hook)
582 (*warning_hook) (string, args);
583 else
584 {
585 target_terminal_ours ();
586 wrap_here (""); /* Force out any buffered output */
587 gdb_flush (gdb_stdout);
588 if (warning_pre_print)
589 fprintf_unfiltered (gdb_stderr, warning_pre_print);
590 vfprintf_unfiltered (gdb_stderr, string, args);
591 fprintf_unfiltered (gdb_stderr, "\n");
592 va_end (args);
593 }
594 }
595
596 /* Print a warning message.
597 The first argument STRING is the warning message, used as a fprintf string,
598 and the remaining args are passed as arguments to it.
599 The primary difference between warnings and errors is that a warning
600 does not force the return to command level. */
601
602 void
603 warning (const char *string,...)
604 {
605 va_list args;
606 va_start (args, string);
607 vwarning (string, args);
608 va_end (args);
609 }
610
611 /* Print an error message and return to command level.
612 The first argument STRING is the error message, used as a fprintf string,
613 and the remaining args are passed as arguments to it. */
614
615 NORETURN void
616 verror (const char *string, va_list args)
617 {
618 struct ui_file *tmp_stream = mem_fileopen ();
619 make_cleanup_ui_file_delete (tmp_stream);
620 vfprintf_unfiltered (tmp_stream, string, args);
621 error_stream (tmp_stream);
622 }
623
624 NORETURN void
625 error (const char *string,...)
626 {
627 va_list args;
628 va_start (args, string);
629 verror (string, args);
630 va_end (args);
631 }
632
633 static void
634 do_write (void *data, const char *buffer, long length_buffer)
635 {
636 ui_file_write (data, buffer, length_buffer);
637 }
638
639 NORETURN void
640 error_stream (struct ui_file *stream)
641 {
642 if (error_begin_hook)
643 error_begin_hook ();
644
645 /* Copy the stream into the GDB_LASTERR buffer. */
646 ui_file_rewind (gdb_lasterr);
647 ui_file_put (stream, do_write, gdb_lasterr);
648
649 /* Write the message plus any error_pre_print to gdb_stderr. */
650 target_terminal_ours ();
651 wrap_here (""); /* Force out any buffered output */
652 gdb_flush (gdb_stdout);
653 annotate_error_begin ();
654 if (error_pre_print)
655 fprintf_filtered (gdb_stderr, error_pre_print);
656 ui_file_put (stream, do_write, gdb_stderr);
657 fprintf_filtered (gdb_stderr, "\n");
658
659 throw_exception (RETURN_ERROR);
660 }
661
662 /* Get the last error message issued by gdb */
663
664 char *
665 error_last_message (void)
666 {
667 long len;
668 return ui_file_xstrdup (gdb_lasterr, &len);
669 }
670
671 /* This is to be called by main() at the very beginning */
672
673 void
674 error_init (void)
675 {
676 gdb_lasterr = mem_fileopen ();
677 }
678
679 /* Print a message reporting an internal error. Ask the user if they
680 want to continue, dump core, or just exit. */
681
682 NORETURN void
683 internal_verror (const char *file, int line,
684 const char *fmt, va_list ap)
685 {
686 static char msg[] = "Internal GDB error: recursive internal error.\n";
687 static int dejavu = 0;
688 int quit_p;
689 int dump_core_p;
690
691 /* don't allow infinite error recursion. */
692 switch (dejavu)
693 {
694 case 0:
695 dejavu = 1;
696 break;
697 case 1:
698 dejavu = 2;
699 fputs_unfiltered (msg, gdb_stderr);
700 abort (); /* NOTE: GDB has only three calls to abort(). */
701 default:
702 dejavu = 3;
703 write (STDERR_FILENO, msg, sizeof (msg));
704 exit (1);
705 }
706
707 /* Try to get the message out */
708 target_terminal_ours ();
709 fprintf_unfiltered (gdb_stderr, "%s:%d: gdb-internal-error: ", file, line);
710 vfprintf_unfiltered (gdb_stderr, fmt, ap);
711 fputs_unfiltered ("\n", gdb_stderr);
712
713 /* Default (yes/batch case) is to quit GDB. When in batch mode this
714 lessens the likelhood of GDB going into an infinate loop. */
715 quit_p = query ("\
716 An internal GDB error was detected. This may make further\n\
717 debugging unreliable. Quit this debugging session? ");
718
719 /* Default (yes/batch case) is to dump core. This leaves a GDB
720 dropping so that it is easier to see that something went wrong to
721 GDB. */
722 dump_core_p = query ("\
723 Create a core file containing the current state of GDB? ");
724
725 if (quit_p)
726 {
727 if (dump_core_p)
728 abort (); /* NOTE: GDB has only three calls to abort(). */
729 else
730 exit (1);
731 }
732 else
733 {
734 if (dump_core_p)
735 {
736 if (fork () == 0)
737 abort (); /* NOTE: GDB has only three calls to abort(). */
738 }
739 }
740
741 dejavu = 0;
742 throw_exception (RETURN_ERROR);
743 }
744
745 NORETURN void
746 internal_error (const char *file, int line, const char *string, ...)
747 {
748 va_list ap;
749 va_start (ap, string);
750
751 internal_verror (file, line, string, ap);
752 va_end (ap);
753 }
754
755 /* The strerror() function can return NULL for errno values that are
756 out of range. Provide a "safe" version that always returns a
757 printable string. */
758
759 char *
760 safe_strerror (int errnum)
761 {
762 char *msg;
763 static char buf[32];
764
765 if ((msg = strerror (errnum)) == NULL)
766 {
767 sprintf (buf, "(undocumented errno %d)", errnum);
768 msg = buf;
769 }
770 return (msg);
771 }
772
773 /* Print the system error message for errno, and also mention STRING
774 as the file name for which the error was encountered.
775 Then return to command level. */
776
777 NORETURN void
778 perror_with_name (const char *string)
779 {
780 char *err;
781 char *combined;
782
783 err = safe_strerror (errno);
784 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
785 strcpy (combined, string);
786 strcat (combined, ": ");
787 strcat (combined, err);
788
789 /* I understand setting these is a matter of taste. Still, some people
790 may clear errno but not know about bfd_error. Doing this here is not
791 unreasonable. */
792 bfd_set_error (bfd_error_no_error);
793 errno = 0;
794
795 error ("%s.", combined);
796 }
797
798 /* Print the system error message for ERRCODE, and also mention STRING
799 as the file name for which the error was encountered. */
800
801 void
802 print_sys_errmsg (const char *string, int errcode)
803 {
804 char *err;
805 char *combined;
806
807 err = safe_strerror (errcode);
808 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
809 strcpy (combined, string);
810 strcat (combined, ": ");
811 strcat (combined, err);
812
813 /* We want anything which was printed on stdout to come out first, before
814 this message. */
815 gdb_flush (gdb_stdout);
816 fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
817 }
818
819 /* Control C eventually causes this to be called, at a convenient time. */
820
821 void
822 quit (void)
823 {
824 struct serial *gdb_stdout_serial = serial_fdopen (1);
825
826 target_terminal_ours ();
827
828 /* We want all output to appear now, before we print "Quit". We
829 have 3 levels of buffering we have to flush (it's possible that
830 some of these should be changed to flush the lower-level ones
831 too): */
832
833 /* 1. The _filtered buffer. */
834 wrap_here ((char *) 0);
835
836 /* 2. The stdio buffer. */
837 gdb_flush (gdb_stdout);
838 gdb_flush (gdb_stderr);
839
840 /* 3. The system-level buffer. */
841 serial_drain_output (gdb_stdout_serial);
842 serial_un_fdopen (gdb_stdout_serial);
843
844 annotate_error_begin ();
845
846 /* Don't use *_filtered; we don't want to prompt the user to continue. */
847 if (quit_pre_print)
848 fprintf_unfiltered (gdb_stderr, quit_pre_print);
849
850 #ifdef __MSDOS__
851 /* No steenking SIGINT will ever be coming our way when the
852 program is resumed. Don't lie. */
853 fprintf_unfiltered (gdb_stderr, "Quit\n");
854 #else
855 if (job_control
856 /* If there is no terminal switching for this target, then we can't
857 possibly get screwed by the lack of job control. */
858 || current_target.to_terminal_ours == NULL)
859 fprintf_unfiltered (gdb_stderr, "Quit\n");
860 else
861 fprintf_unfiltered (gdb_stderr,
862 "Quit (expect signal SIGINT when the program is resumed)\n");
863 #endif
864 throw_exception (RETURN_QUIT);
865 }
866
867 /* Control C comes here */
868 void
869 request_quit (int signo)
870 {
871 quit_flag = 1;
872 /* Restore the signal handler. Harmless with BSD-style signals, needed
873 for System V-style signals. So just always do it, rather than worrying
874 about USG defines and stuff like that. */
875 signal (signo, request_quit);
876
877 #ifdef REQUEST_QUIT
878 REQUEST_QUIT;
879 #else
880 if (immediate_quit)
881 quit ();
882 #endif
883 }
884 \f
885 /* Memory management stuff (malloc friends). */
886
887 #if !defined (USE_MMALLOC)
888
889 /* NOTE: These must use PTR so that their definition matches the
890 declaration found in "mmalloc.h". */
891
892 static void *
893 mmalloc (void *md, size_t size)
894 {
895 return malloc (size); /* NOTE: GDB's only call to malloc() */
896 }
897
898 static void *
899 mrealloc (void *md, void *ptr, size_t size)
900 {
901 if (ptr == 0) /* Guard against old realloc's */
902 return mmalloc (md, size);
903 else
904 return realloc (ptr, size); /* NOTE: GDB's only call to ralloc() */
905 }
906
907 static void *
908 mcalloc (void *md, size_t number, size_t size)
909 {
910 return calloc (number, size); /* NOTE: GDB's only call to calloc() */
911 }
912
913 static void
914 mfree (void *md, void *ptr)
915 {
916 free (ptr); /* NOTE: GDB's only call to free() */
917 }
918
919 #endif /* USE_MMALLOC */
920
921 #if !defined (USE_MMALLOC) || defined (NO_MMCHECK)
922
923 void
924 init_malloc (void *md)
925 {
926 }
927
928 #else /* Have mmalloc and want corruption checking */
929
930 static void
931 malloc_botch (void)
932 {
933 fprintf_unfiltered (gdb_stderr, "Memory corruption\n");
934 internal_error (__FILE__, __LINE__, "failed internal consistency check");
935 }
936
937 /* Attempt to install hooks in mmalloc/mrealloc/mfree for the heap specified
938 by MD, to detect memory corruption. Note that MD may be NULL to specify
939 the default heap that grows via sbrk.
940
941 Note that for freshly created regions, we must call mmcheckf prior to any
942 mallocs in the region. Otherwise, any region which was allocated prior to
943 installing the checking hooks, which is later reallocated or freed, will
944 fail the checks! The mmcheck function only allows initial hooks to be
945 installed before the first mmalloc. However, anytime after we have called
946 mmcheck the first time to install the checking hooks, we can call it again
947 to update the function pointer to the memory corruption handler.
948
949 Returns zero on failure, non-zero on success. */
950
951 #ifndef MMCHECK_FORCE
952 #define MMCHECK_FORCE 0
953 #endif
954
955 void
956 init_malloc (void *md)
957 {
958 if (!mmcheckf (md, malloc_botch, MMCHECK_FORCE))
959 {
960 /* Don't use warning(), which relies on current_target being set
961 to something other than dummy_target, until after
962 initialize_all_files(). */
963
964 fprintf_unfiltered
965 (gdb_stderr, "warning: failed to install memory consistency checks; ");
966 fprintf_unfiltered
967 (gdb_stderr, "configuration should define NO_MMCHECK or MMCHECK_FORCE\n");
968 }
969
970 mmtrace ();
971 }
972
973 #endif /* Have mmalloc and want corruption checking */
974
975 /* Called when a memory allocation fails, with the number of bytes of
976 memory requested in SIZE. */
977
978 NORETURN void
979 nomem (long size)
980 {
981 if (size > 0)
982 {
983 internal_error (__FILE__, __LINE__,
984 "virtual memory exhausted: can't allocate %ld bytes.", size);
985 }
986 else
987 {
988 internal_error (__FILE__, __LINE__,
989 "virtual memory exhausted.");
990 }
991 }
992
993 /* The xmmalloc() family of memory management routines.
994
995 These are are like the mmalloc() family except that they implement
996 consistent semantics and guard against typical memory management
997 problems: if a malloc fails, an internal error is thrown; if
998 free(NULL) is called, it is ignored; if *alloc(0) is called, NULL
999 is returned.
1000
1001 All these routines are implemented using the mmalloc() family. */
1002
1003 void *
1004 xmmalloc (void *md, size_t size)
1005 {
1006 void *val;
1007
1008 if (size == 0)
1009 {
1010 val = NULL;
1011 }
1012 else
1013 {
1014 val = mmalloc (md, size);
1015 if (val == NULL)
1016 nomem (size);
1017 }
1018 return (val);
1019 }
1020
1021 void *
1022 xmrealloc (void *md, void *ptr, size_t size)
1023 {
1024 void *val;
1025
1026 if (size == 0)
1027 {
1028 if (ptr != NULL)
1029 mfree (md, ptr);
1030 val = NULL;
1031 }
1032 else
1033 {
1034 if (ptr != NULL)
1035 {
1036 val = mrealloc (md, ptr, size);
1037 }
1038 else
1039 {
1040 val = mmalloc (md, size);
1041 }
1042 if (val == NULL)
1043 {
1044 nomem (size);
1045 }
1046 }
1047 return (val);
1048 }
1049
1050 void *
1051 xmcalloc (void *md, size_t number, size_t size)
1052 {
1053 void *mem;
1054 if (number == 0 || size == 0)
1055 mem = NULL;
1056 else
1057 {
1058 mem = mcalloc (md, number, size);
1059 if (mem == NULL)
1060 nomem (number * size);
1061 }
1062 return mem;
1063 }
1064
1065 void
1066 xmfree (void *md, void *ptr)
1067 {
1068 if (ptr != NULL)
1069 mfree (md, ptr);
1070 }
1071
1072 /* The xmalloc() (libiberty.h) family of memory management routines.
1073
1074 These are like the ISO-C malloc() family except that they implement
1075 consistent semantics and guard against typical memory management
1076 problems. See xmmalloc() above for further information.
1077
1078 All these routines are wrappers to the xmmalloc() family. */
1079
1080 /* NOTE: These are declared using PTR to ensure consistency with
1081 "libiberty.h". xfree() is GDB local. */
1082
1083 PTR
1084 xmalloc (size_t size)
1085 {
1086 return xmmalloc (NULL, size);
1087 }
1088
1089 PTR
1090 xrealloc (PTR ptr, size_t size)
1091 {
1092 return xmrealloc (NULL, ptr, size);
1093 }
1094
1095 PTR
1096 xcalloc (size_t number, size_t size)
1097 {
1098 return xmcalloc (NULL, number, size);
1099 }
1100
1101 void
1102 xfree (void *ptr)
1103 {
1104 xmfree (NULL, ptr);
1105 }
1106 \f
1107
1108 /* Like asprintf/vasprintf but get an internal_error if the call
1109 fails. */
1110
1111 void
1112 xasprintf (char **ret, const char *format, ...)
1113 {
1114 va_list args;
1115 va_start (args, format);
1116 xvasprintf (ret, format, args);
1117 va_end (args);
1118 }
1119
1120 void
1121 xvasprintf (char **ret, const char *format, va_list ap)
1122 {
1123 int status = vasprintf (ret, format, ap);
1124 /* NULL could be returned due to a memory allocation problem; a
1125 badly format string; or something else. */
1126 if ((*ret) == NULL)
1127 internal_error (__FILE__, __LINE__,
1128 "vasprintf returned NULL buffer (errno %d)",
1129 errno);
1130 /* A negative status with a non-NULL buffer shouldn't never
1131 happen. But to be sure. */
1132 if (status < 0)
1133 internal_error (__FILE__, __LINE__,
1134 "vasprintf call failed (errno %d)",
1135 errno);
1136 }
1137
1138
1139 /* My replacement for the read system call.
1140 Used like `read' but keeps going if `read' returns too soon. */
1141
1142 int
1143 myread (int desc, char *addr, int len)
1144 {
1145 register int val;
1146 int orglen = len;
1147
1148 while (len > 0)
1149 {
1150 val = read (desc, addr, len);
1151 if (val < 0)
1152 return val;
1153 if (val == 0)
1154 return orglen - len;
1155 len -= val;
1156 addr += val;
1157 }
1158 return orglen;
1159 }
1160 \f
1161 /* Make a copy of the string at PTR with SIZE characters
1162 (and add a null character at the end in the copy).
1163 Uses malloc to get the space. Returns the address of the copy. */
1164
1165 char *
1166 savestring (const char *ptr, size_t size)
1167 {
1168 register char *p = (char *) xmalloc (size + 1);
1169 memcpy (p, ptr, size);
1170 p[size] = 0;
1171 return p;
1172 }
1173
1174 char *
1175 msavestring (void *md, const char *ptr, size_t size)
1176 {
1177 register char *p = (char *) xmmalloc (md, size + 1);
1178 memcpy (p, ptr, size);
1179 p[size] = 0;
1180 return p;
1181 }
1182
1183 char *
1184 mstrsave (void *md, const char *ptr)
1185 {
1186 return (msavestring (md, ptr, strlen (ptr)));
1187 }
1188
1189 void
1190 print_spaces (register int n, register struct ui_file *file)
1191 {
1192 fputs_unfiltered (n_spaces (n), file);
1193 }
1194
1195 /* Print a host address. */
1196
1197 void
1198 gdb_print_host_address (void *addr, struct ui_file *stream)
1199 {
1200
1201 /* We could use the %p conversion specifier to fprintf if we had any
1202 way of knowing whether this host supports it. But the following
1203 should work on the Alpha and on 32 bit machines. */
1204
1205 fprintf_filtered (stream, "0x%lx", (unsigned long) addr);
1206 }
1207
1208 /* Ask user a y-or-n question and return 1 iff answer is yes.
1209 Takes three args which are given to printf to print the question.
1210 The first, a control string, should end in "? ".
1211 It should not say how to answer, because we do that. */
1212
1213 /* VARARGS */
1214 int
1215 query (const char *ctlstr,...)
1216 {
1217 va_list args;
1218 register int answer;
1219 register int ans2;
1220 int retval;
1221
1222 va_start (args, ctlstr);
1223
1224 if (query_hook)
1225 {
1226 return query_hook (ctlstr, args);
1227 }
1228
1229 /* Automatically answer "yes" if input is not from a terminal. */
1230 if (!input_from_terminal_p ())
1231 return 1;
1232
1233 while (1)
1234 {
1235 wrap_here (""); /* Flush any buffered output */
1236 gdb_flush (gdb_stdout);
1237
1238 if (annotation_level > 1)
1239 printf_filtered ("\n\032\032pre-query\n");
1240
1241 vfprintf_filtered (gdb_stdout, ctlstr, args);
1242 printf_filtered ("(y or n) ");
1243
1244 if (annotation_level > 1)
1245 printf_filtered ("\n\032\032query\n");
1246
1247 wrap_here ("");
1248 gdb_flush (gdb_stdout);
1249
1250 answer = fgetc (stdin);
1251 clearerr (stdin); /* in case of C-d */
1252 if (answer == EOF) /* C-d */
1253 {
1254 retval = 1;
1255 break;
1256 }
1257 /* Eat rest of input line, to EOF or newline */
1258 if (answer != '\n')
1259 do
1260 {
1261 ans2 = fgetc (stdin);
1262 clearerr (stdin);
1263 }
1264 while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1265
1266 if (answer >= 'a')
1267 answer -= 040;
1268 if (answer == 'Y')
1269 {
1270 retval = 1;
1271 break;
1272 }
1273 if (answer == 'N')
1274 {
1275 retval = 0;
1276 break;
1277 }
1278 printf_filtered ("Please answer y or n.\n");
1279 }
1280
1281 if (annotation_level > 1)
1282 printf_filtered ("\n\032\032post-query\n");
1283 return retval;
1284 }
1285 \f
1286
1287 /* Parse a C escape sequence. STRING_PTR points to a variable
1288 containing a pointer to the string to parse. That pointer
1289 should point to the character after the \. That pointer
1290 is updated past the characters we use. The value of the
1291 escape sequence is returned.
1292
1293 A negative value means the sequence \ newline was seen,
1294 which is supposed to be equivalent to nothing at all.
1295
1296 If \ is followed by a null character, we return a negative
1297 value and leave the string pointer pointing at the null character.
1298
1299 If \ is followed by 000, we return 0 and leave the string pointer
1300 after the zeros. A value of 0 does not mean end of string. */
1301
1302 int
1303 parse_escape (char **string_ptr)
1304 {
1305 register int c = *(*string_ptr)++;
1306 switch (c)
1307 {
1308 case 'a':
1309 return 007; /* Bell (alert) char */
1310 case 'b':
1311 return '\b';
1312 case 'e': /* Escape character */
1313 return 033;
1314 case 'f':
1315 return '\f';
1316 case 'n':
1317 return '\n';
1318 case 'r':
1319 return '\r';
1320 case 't':
1321 return '\t';
1322 case 'v':
1323 return '\v';
1324 case '\n':
1325 return -2;
1326 case 0:
1327 (*string_ptr)--;
1328 return 0;
1329 case '^':
1330 c = *(*string_ptr)++;
1331 if (c == '\\')
1332 c = parse_escape (string_ptr);
1333 if (c == '?')
1334 return 0177;
1335 return (c & 0200) | (c & 037);
1336
1337 case '0':
1338 case '1':
1339 case '2':
1340 case '3':
1341 case '4':
1342 case '5':
1343 case '6':
1344 case '7':
1345 {
1346 register int i = c - '0';
1347 register int count = 0;
1348 while (++count < 3)
1349 {
1350 if ((c = *(*string_ptr)++) >= '0' && c <= '7')
1351 {
1352 i *= 8;
1353 i += c - '0';
1354 }
1355 else
1356 {
1357 (*string_ptr)--;
1358 break;
1359 }
1360 }
1361 return i;
1362 }
1363 default:
1364 return c;
1365 }
1366 }
1367 \f
1368 /* Print the character C on STREAM as part of the contents of a literal
1369 string whose delimiter is QUOTER. Note that this routine should only
1370 be call for printing things which are independent of the language
1371 of the program being debugged. */
1372
1373 static void
1374 printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
1375 void (*do_fprintf) (struct ui_file *, const char *, ...),
1376 struct ui_file *stream, int quoter)
1377 {
1378
1379 c &= 0xFF; /* Avoid sign bit follies */
1380
1381 if (c < 0x20 || /* Low control chars */
1382 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1383 (sevenbit_strings && c >= 0x80))
1384 { /* high order bit set */
1385 switch (c)
1386 {
1387 case '\n':
1388 do_fputs ("\\n", stream);
1389 break;
1390 case '\b':
1391 do_fputs ("\\b", stream);
1392 break;
1393 case '\t':
1394 do_fputs ("\\t", stream);
1395 break;
1396 case '\f':
1397 do_fputs ("\\f", stream);
1398 break;
1399 case '\r':
1400 do_fputs ("\\r", stream);
1401 break;
1402 case '\033':
1403 do_fputs ("\\e", stream);
1404 break;
1405 case '\007':
1406 do_fputs ("\\a", stream);
1407 break;
1408 default:
1409 do_fprintf (stream, "\\%.3o", (unsigned int) c);
1410 break;
1411 }
1412 }
1413 else
1414 {
1415 if (c == '\\' || c == quoter)
1416 do_fputs ("\\", stream);
1417 do_fprintf (stream, "%c", c);
1418 }
1419 }
1420
1421 /* Print the character C on STREAM as part of the contents of a
1422 literal string whose delimiter is QUOTER. Note that these routines
1423 should only be call for printing things which are independent of
1424 the language of the program being debugged. */
1425
1426 void
1427 fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
1428 {
1429 while (*str)
1430 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1431 }
1432
1433 void
1434 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
1435 {
1436 while (*str)
1437 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1438 }
1439
1440 void
1441 fputstrn_unfiltered (const char *str, int n, int quoter, struct ui_file *stream)
1442 {
1443 int i;
1444 for (i = 0; i < n; i++)
1445 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1446 }
1447
1448 \f
1449
1450 /* Number of lines per page or UINT_MAX if paging is disabled. */
1451 static unsigned int lines_per_page;
1452 /* Number of chars per line or UINT_MAX if line folding is disabled. */
1453 static unsigned int chars_per_line;
1454 /* Current count of lines printed on this page, chars on this line. */
1455 static unsigned int lines_printed, chars_printed;
1456
1457 /* Buffer and start column of buffered text, for doing smarter word-
1458 wrapping. When someone calls wrap_here(), we start buffering output
1459 that comes through fputs_filtered(). If we see a newline, we just
1460 spit it out and forget about the wrap_here(). If we see another
1461 wrap_here(), we spit it out and remember the newer one. If we see
1462 the end of the line, we spit out a newline, the indent, and then
1463 the buffered output. */
1464
1465 /* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1466 are waiting to be output (they have already been counted in chars_printed).
1467 When wrap_buffer[0] is null, the buffer is empty. */
1468 static char *wrap_buffer;
1469
1470 /* Pointer in wrap_buffer to the next character to fill. */
1471 static char *wrap_pointer;
1472
1473 /* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1474 is non-zero. */
1475 static char *wrap_indent;
1476
1477 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1478 is not in effect. */
1479 static int wrap_column;
1480 \f
1481
1482 /* Inialize the lines and chars per page */
1483 void
1484 init_page_info (void)
1485 {
1486 #if defined(TUI)
1487 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
1488 #endif
1489 {
1490 /* These defaults will be used if we are unable to get the correct
1491 values from termcap. */
1492 #if defined(__GO32__)
1493 lines_per_page = ScreenRows ();
1494 chars_per_line = ScreenCols ();
1495 #else
1496 lines_per_page = 24;
1497 chars_per_line = 80;
1498
1499 #if !defined (_WIN32)
1500 /* No termcap under MPW, although might be cool to do something
1501 by looking at worksheet or console window sizes. */
1502 /* Initialize the screen height and width from termcap. */
1503 {
1504 char *termtype = getenv ("TERM");
1505
1506 /* Positive means success, nonpositive means failure. */
1507 int status;
1508
1509 /* 2048 is large enough for all known terminals, according to the
1510 GNU termcap manual. */
1511 char term_buffer[2048];
1512
1513 if (termtype)
1514 {
1515 status = tgetent (term_buffer, termtype);
1516 if (status > 0)
1517 {
1518 int val;
1519 int running_in_emacs = getenv ("EMACS") != NULL;
1520
1521 val = tgetnum ("li");
1522 if (val >= 0 && !running_in_emacs)
1523 lines_per_page = val;
1524 else
1525 /* The number of lines per page is not mentioned
1526 in the terminal description. This probably means
1527 that paging is not useful (e.g. emacs shell window),
1528 so disable paging. */
1529 lines_per_page = UINT_MAX;
1530
1531 val = tgetnum ("co");
1532 if (val >= 0)
1533 chars_per_line = val;
1534 }
1535 }
1536 }
1537 #endif /* MPW */
1538
1539 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1540
1541 /* If there is a better way to determine the window size, use it. */
1542 SIGWINCH_HANDLER (SIGWINCH);
1543 #endif
1544 #endif
1545 /* If the output is not a terminal, don't paginate it. */
1546 if (!ui_file_isatty (gdb_stdout))
1547 lines_per_page = UINT_MAX;
1548 } /* the command_line_version */
1549 set_width ();
1550 }
1551
1552 static void
1553 set_width (void)
1554 {
1555 if (chars_per_line == 0)
1556 init_page_info ();
1557
1558 if (!wrap_buffer)
1559 {
1560 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1561 wrap_buffer[0] = '\0';
1562 }
1563 else
1564 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
1565 wrap_pointer = wrap_buffer; /* Start it at the beginning */
1566 }
1567
1568 /* ARGSUSED */
1569 static void
1570 set_width_command (char *args, int from_tty, struct cmd_list_element *c)
1571 {
1572 set_width ();
1573 }
1574
1575 /* Wait, so the user can read what's on the screen. Prompt the user
1576 to continue by pressing RETURN. */
1577
1578 static void
1579 prompt_for_continue (void)
1580 {
1581 char *ignore;
1582 char cont_prompt[120];
1583
1584 if (annotation_level > 1)
1585 printf_unfiltered ("\n\032\032pre-prompt-for-continue\n");
1586
1587 strcpy (cont_prompt,
1588 "---Type <return> to continue, or q <return> to quit---");
1589 if (annotation_level > 1)
1590 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1591
1592 /* We must do this *before* we call gdb_readline, else it will eventually
1593 call us -- thinking that we're trying to print beyond the end of the
1594 screen. */
1595 reinitialize_more_filter ();
1596
1597 immediate_quit++;
1598 /* On a real operating system, the user can quit with SIGINT.
1599 But not on GO32.
1600
1601 'q' is provided on all systems so users don't have to change habits
1602 from system to system, and because telling them what to do in
1603 the prompt is more user-friendly than expecting them to think of
1604 SIGINT. */
1605 /* Call readline, not gdb_readline, because GO32 readline handles control-C
1606 whereas control-C to gdb_readline will cause the user to get dumped
1607 out to DOS. */
1608 ignore = readline (cont_prompt);
1609
1610 if (annotation_level > 1)
1611 printf_unfiltered ("\n\032\032post-prompt-for-continue\n");
1612
1613 if (ignore)
1614 {
1615 char *p = ignore;
1616 while (*p == ' ' || *p == '\t')
1617 ++p;
1618 if (p[0] == 'q')
1619 {
1620 if (!event_loop_p)
1621 request_quit (SIGINT);
1622 else
1623 async_request_quit (0);
1624 }
1625 xfree (ignore);
1626 }
1627 immediate_quit--;
1628
1629 /* Now we have to do this again, so that GDB will know that it doesn't
1630 need to save the ---Type <return>--- line at the top of the screen. */
1631 reinitialize_more_filter ();
1632
1633 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
1634 }
1635
1636 /* Reinitialize filter; ie. tell it to reset to original values. */
1637
1638 void
1639 reinitialize_more_filter (void)
1640 {
1641 lines_printed = 0;
1642 chars_printed = 0;
1643 }
1644
1645 /* Indicate that if the next sequence of characters overflows the line,
1646 a newline should be inserted here rather than when it hits the end.
1647 If INDENT is non-null, it is a string to be printed to indent the
1648 wrapped part on the next line. INDENT must remain accessible until
1649 the next call to wrap_here() or until a newline is printed through
1650 fputs_filtered().
1651
1652 If the line is already overfull, we immediately print a newline and
1653 the indentation, and disable further wrapping.
1654
1655 If we don't know the width of lines, but we know the page height,
1656 we must not wrap words, but should still keep track of newlines
1657 that were explicitly printed.
1658
1659 INDENT should not contain tabs, as that will mess up the char count
1660 on the next line. FIXME.
1661
1662 This routine is guaranteed to force out any output which has been
1663 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1664 used to force out output from the wrap_buffer. */
1665
1666 void
1667 wrap_here (char *indent)
1668 {
1669 /* This should have been allocated, but be paranoid anyway. */
1670 if (!wrap_buffer)
1671 internal_error (__FILE__, __LINE__, "failed internal consistency check");
1672
1673 if (wrap_buffer[0])
1674 {
1675 *wrap_pointer = '\0';
1676 fputs_unfiltered (wrap_buffer, gdb_stdout);
1677 }
1678 wrap_pointer = wrap_buffer;
1679 wrap_buffer[0] = '\0';
1680 if (chars_per_line == UINT_MAX) /* No line overflow checking */
1681 {
1682 wrap_column = 0;
1683 }
1684 else if (chars_printed >= chars_per_line)
1685 {
1686 puts_filtered ("\n");
1687 if (indent != NULL)
1688 puts_filtered (indent);
1689 wrap_column = 0;
1690 }
1691 else
1692 {
1693 wrap_column = chars_printed;
1694 if (indent == NULL)
1695 wrap_indent = "";
1696 else
1697 wrap_indent = indent;
1698 }
1699 }
1700
1701 /* Ensure that whatever gets printed next, using the filtered output
1702 commands, starts at the beginning of the line. I.E. if there is
1703 any pending output for the current line, flush it and start a new
1704 line. Otherwise do nothing. */
1705
1706 void
1707 begin_line (void)
1708 {
1709 if (chars_printed > 0)
1710 {
1711 puts_filtered ("\n");
1712 }
1713 }
1714
1715
1716 /* Like fputs but if FILTER is true, pause after every screenful.
1717
1718 Regardless of FILTER can wrap at points other than the final
1719 character of a line.
1720
1721 Unlike fputs, fputs_maybe_filtered does not return a value.
1722 It is OK for LINEBUFFER to be NULL, in which case just don't print
1723 anything.
1724
1725 Note that a longjmp to top level may occur in this routine (only if
1726 FILTER is true) (since prompt_for_continue may do so) so this
1727 routine should not be called when cleanups are not in place. */
1728
1729 static void
1730 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1731 int filter)
1732 {
1733 const char *lineptr;
1734
1735 if (linebuffer == 0)
1736 return;
1737
1738 /* Don't do any filtering if it is disabled. */
1739 if ((stream != gdb_stdout) || !pagination_enabled
1740 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
1741 {
1742 fputs_unfiltered (linebuffer, stream);
1743 return;
1744 }
1745
1746 /* Go through and output each character. Show line extension
1747 when this is necessary; prompt user for new page when this is
1748 necessary. */
1749
1750 lineptr = linebuffer;
1751 while (*lineptr)
1752 {
1753 /* Possible new page. */
1754 if (filter &&
1755 (lines_printed >= lines_per_page - 1))
1756 prompt_for_continue ();
1757
1758 while (*lineptr && *lineptr != '\n')
1759 {
1760 /* Print a single line. */
1761 if (*lineptr == '\t')
1762 {
1763 if (wrap_column)
1764 *wrap_pointer++ = '\t';
1765 else
1766 fputc_unfiltered ('\t', stream);
1767 /* Shifting right by 3 produces the number of tab stops
1768 we have already passed, and then adding one and
1769 shifting left 3 advances to the next tab stop. */
1770 chars_printed = ((chars_printed >> 3) + 1) << 3;
1771 lineptr++;
1772 }
1773 else
1774 {
1775 if (wrap_column)
1776 *wrap_pointer++ = *lineptr;
1777 else
1778 fputc_unfiltered (*lineptr, stream);
1779 chars_printed++;
1780 lineptr++;
1781 }
1782
1783 if (chars_printed >= chars_per_line)
1784 {
1785 unsigned int save_chars = chars_printed;
1786
1787 chars_printed = 0;
1788 lines_printed++;
1789 /* If we aren't actually wrapping, don't output newline --
1790 if chars_per_line is right, we probably just overflowed
1791 anyway; if it's wrong, let us keep going. */
1792 if (wrap_column)
1793 fputc_unfiltered ('\n', stream);
1794
1795 /* Possible new page. */
1796 if (lines_printed >= lines_per_page - 1)
1797 prompt_for_continue ();
1798
1799 /* Now output indentation and wrapped string */
1800 if (wrap_column)
1801 {
1802 fputs_unfiltered (wrap_indent, stream);
1803 *wrap_pointer = '\0'; /* Null-terminate saved stuff */
1804 fputs_unfiltered (wrap_buffer, stream); /* and eject it */
1805 /* FIXME, this strlen is what prevents wrap_indent from
1806 containing tabs. However, if we recurse to print it
1807 and count its chars, we risk trouble if wrap_indent is
1808 longer than (the user settable) chars_per_line.
1809 Note also that this can set chars_printed > chars_per_line
1810 if we are printing a long string. */
1811 chars_printed = strlen (wrap_indent)
1812 + (save_chars - wrap_column);
1813 wrap_pointer = wrap_buffer; /* Reset buffer */
1814 wrap_buffer[0] = '\0';
1815 wrap_column = 0; /* And disable fancy wrap */
1816 }
1817 }
1818 }
1819
1820 if (*lineptr == '\n')
1821 {
1822 chars_printed = 0;
1823 wrap_here ((char *) 0); /* Spit out chars, cancel further wraps */
1824 lines_printed++;
1825 fputc_unfiltered ('\n', stream);
1826 lineptr++;
1827 }
1828 }
1829 }
1830
1831 void
1832 fputs_filtered (const char *linebuffer, struct ui_file *stream)
1833 {
1834 fputs_maybe_filtered (linebuffer, stream, 1);
1835 }
1836
1837 int
1838 putchar_unfiltered (int c)
1839 {
1840 char buf = c;
1841 ui_file_write (gdb_stdout, &buf, 1);
1842 return c;
1843 }
1844
1845 /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
1846 May return nonlocally. */
1847
1848 int
1849 putchar_filtered (int c)
1850 {
1851 return fputc_filtered (c, gdb_stdout);
1852 }
1853
1854 int
1855 fputc_unfiltered (int c, struct ui_file *stream)
1856 {
1857 char buf = c;
1858 ui_file_write (stream, &buf, 1);
1859 return c;
1860 }
1861
1862 int
1863 fputc_filtered (int c, struct ui_file *stream)
1864 {
1865 char buf[2];
1866
1867 buf[0] = c;
1868 buf[1] = 0;
1869 fputs_filtered (buf, stream);
1870 return c;
1871 }
1872
1873 /* puts_debug is like fputs_unfiltered, except it prints special
1874 characters in printable fashion. */
1875
1876 void
1877 puts_debug (char *prefix, char *string, char *suffix)
1878 {
1879 int ch;
1880
1881 /* Print prefix and suffix after each line. */
1882 static int new_line = 1;
1883 static int return_p = 0;
1884 static char *prev_prefix = "";
1885 static char *prev_suffix = "";
1886
1887 if (*string == '\n')
1888 return_p = 0;
1889
1890 /* If the prefix is changing, print the previous suffix, a new line,
1891 and the new prefix. */
1892 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
1893 {
1894 fputs_unfiltered (prev_suffix, gdb_stdlog);
1895 fputs_unfiltered ("\n", gdb_stdlog);
1896 fputs_unfiltered (prefix, gdb_stdlog);
1897 }
1898
1899 /* Print prefix if we printed a newline during the previous call. */
1900 if (new_line)
1901 {
1902 new_line = 0;
1903 fputs_unfiltered (prefix, gdb_stdlog);
1904 }
1905
1906 prev_prefix = prefix;
1907 prev_suffix = suffix;
1908
1909 /* Output characters in a printable format. */
1910 while ((ch = *string++) != '\0')
1911 {
1912 switch (ch)
1913 {
1914 default:
1915 if (isprint (ch))
1916 fputc_unfiltered (ch, gdb_stdlog);
1917
1918 else
1919 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
1920 break;
1921
1922 case '\\':
1923 fputs_unfiltered ("\\\\", gdb_stdlog);
1924 break;
1925 case '\b':
1926 fputs_unfiltered ("\\b", gdb_stdlog);
1927 break;
1928 case '\f':
1929 fputs_unfiltered ("\\f", gdb_stdlog);
1930 break;
1931 case '\n':
1932 new_line = 1;
1933 fputs_unfiltered ("\\n", gdb_stdlog);
1934 break;
1935 case '\r':
1936 fputs_unfiltered ("\\r", gdb_stdlog);
1937 break;
1938 case '\t':
1939 fputs_unfiltered ("\\t", gdb_stdlog);
1940 break;
1941 case '\v':
1942 fputs_unfiltered ("\\v", gdb_stdlog);
1943 break;
1944 }
1945
1946 return_p = ch == '\r';
1947 }
1948
1949 /* Print suffix if we printed a newline. */
1950 if (new_line)
1951 {
1952 fputs_unfiltered (suffix, gdb_stdlog);
1953 fputs_unfiltered ("\n", gdb_stdlog);
1954 }
1955 }
1956
1957
1958 /* Print a variable number of ARGS using format FORMAT. If this
1959 information is going to put the amount written (since the last call
1960 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
1961 call prompt_for_continue to get the users permision to continue.
1962
1963 Unlike fprintf, this function does not return a value.
1964
1965 We implement three variants, vfprintf (takes a vararg list and stream),
1966 fprintf (takes a stream to write on), and printf (the usual).
1967
1968 Note also that a longjmp to top level may occur in this routine
1969 (since prompt_for_continue may do so) so this routine should not be
1970 called when cleanups are not in place. */
1971
1972 static void
1973 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
1974 va_list args, int filter)
1975 {
1976 char *linebuffer;
1977 struct cleanup *old_cleanups;
1978
1979 xvasprintf (&linebuffer, format, args);
1980 old_cleanups = make_cleanup (xfree, linebuffer);
1981 fputs_maybe_filtered (linebuffer, stream, filter);
1982 do_cleanups (old_cleanups);
1983 }
1984
1985
1986 void
1987 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
1988 {
1989 vfprintf_maybe_filtered (stream, format, args, 1);
1990 }
1991
1992 void
1993 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
1994 {
1995 char *linebuffer;
1996 struct cleanup *old_cleanups;
1997
1998 xvasprintf (&linebuffer, format, args);
1999 old_cleanups = make_cleanup (xfree, linebuffer);
2000 fputs_unfiltered (linebuffer, stream);
2001 do_cleanups (old_cleanups);
2002 }
2003
2004 void
2005 vprintf_filtered (const char *format, va_list args)
2006 {
2007 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2008 }
2009
2010 void
2011 vprintf_unfiltered (const char *format, va_list args)
2012 {
2013 vfprintf_unfiltered (gdb_stdout, format, args);
2014 }
2015
2016 void
2017 fprintf_filtered (struct ui_file * stream, const char *format,...)
2018 {
2019 va_list args;
2020 va_start (args, format);
2021 vfprintf_filtered (stream, format, args);
2022 va_end (args);
2023 }
2024
2025 void
2026 fprintf_unfiltered (struct ui_file * stream, const char *format,...)
2027 {
2028 va_list args;
2029 va_start (args, format);
2030 vfprintf_unfiltered (stream, format, args);
2031 va_end (args);
2032 }
2033
2034 /* Like fprintf_filtered, but prints its result indented.
2035 Called as fprintfi_filtered (spaces, stream, format, ...); */
2036
2037 void
2038 fprintfi_filtered (int spaces, struct ui_file * stream, const char *format,...)
2039 {
2040 va_list args;
2041 va_start (args, format);
2042 print_spaces_filtered (spaces, stream);
2043
2044 vfprintf_filtered (stream, format, args);
2045 va_end (args);
2046 }
2047
2048
2049 void
2050 printf_filtered (const char *format,...)
2051 {
2052 va_list args;
2053 va_start (args, format);
2054 vfprintf_filtered (gdb_stdout, format, args);
2055 va_end (args);
2056 }
2057
2058
2059 void
2060 printf_unfiltered (const char *format,...)
2061 {
2062 va_list args;
2063 va_start (args, format);
2064 vfprintf_unfiltered (gdb_stdout, format, args);
2065 va_end (args);
2066 }
2067
2068 /* Like printf_filtered, but prints it's result indented.
2069 Called as printfi_filtered (spaces, format, ...); */
2070
2071 void
2072 printfi_filtered (int spaces, const char *format,...)
2073 {
2074 va_list args;
2075 va_start (args, format);
2076 print_spaces_filtered (spaces, gdb_stdout);
2077 vfprintf_filtered (gdb_stdout, format, args);
2078 va_end (args);
2079 }
2080
2081 /* Easy -- but watch out!
2082
2083 This routine is *not* a replacement for puts()! puts() appends a newline.
2084 This one doesn't, and had better not! */
2085
2086 void
2087 puts_filtered (const char *string)
2088 {
2089 fputs_filtered (string, gdb_stdout);
2090 }
2091
2092 void
2093 puts_unfiltered (const char *string)
2094 {
2095 fputs_unfiltered (string, gdb_stdout);
2096 }
2097
2098 /* Return a pointer to N spaces and a null. The pointer is good
2099 until the next call to here. */
2100 char *
2101 n_spaces (int n)
2102 {
2103 char *t;
2104 static char *spaces = 0;
2105 static int max_spaces = -1;
2106
2107 if (n > max_spaces)
2108 {
2109 if (spaces)
2110 xfree (spaces);
2111 spaces = (char *) xmalloc (n + 1);
2112 for (t = spaces + n; t != spaces;)
2113 *--t = ' ';
2114 spaces[n] = '\0';
2115 max_spaces = n;
2116 }
2117
2118 return spaces + max_spaces - n;
2119 }
2120
2121 /* Print N spaces. */
2122 void
2123 print_spaces_filtered (int n, struct ui_file *stream)
2124 {
2125 fputs_filtered (n_spaces (n), stream);
2126 }
2127 \f
2128 /* C++ demangler stuff. */
2129
2130 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2131 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2132 If the name is not mangled, or the language for the name is unknown, or
2133 demangling is off, the name is printed in its "raw" form. */
2134
2135 void
2136 fprintf_symbol_filtered (struct ui_file *stream, char *name, enum language lang,
2137 int arg_mode)
2138 {
2139 char *demangled;
2140
2141 if (name != NULL)
2142 {
2143 /* If user wants to see raw output, no problem. */
2144 if (!demangle)
2145 {
2146 fputs_filtered (name, stream);
2147 }
2148 else
2149 {
2150 switch (lang)
2151 {
2152 case language_cplus:
2153 demangled = cplus_demangle (name, arg_mode);
2154 break;
2155 case language_java:
2156 demangled = cplus_demangle (name, arg_mode | DMGL_JAVA);
2157 break;
2158 case language_chill:
2159 demangled = chill_demangle (name);
2160 break;
2161 default:
2162 demangled = NULL;
2163 break;
2164 }
2165 fputs_filtered (demangled ? demangled : name, stream);
2166 if (demangled != NULL)
2167 {
2168 xfree (demangled);
2169 }
2170 }
2171 }
2172 }
2173
2174 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2175 differences in whitespace. Returns 0 if they match, non-zero if they
2176 don't (slightly different than strcmp()'s range of return values).
2177
2178 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2179 This "feature" is useful when searching for matching C++ function names
2180 (such as if the user types 'break FOO', where FOO is a mangled C++
2181 function). */
2182
2183 int
2184 strcmp_iw (const char *string1, const char *string2)
2185 {
2186 while ((*string1 != '\0') && (*string2 != '\0'))
2187 {
2188 while (isspace (*string1))
2189 {
2190 string1++;
2191 }
2192 while (isspace (*string2))
2193 {
2194 string2++;
2195 }
2196 if (*string1 != *string2)
2197 {
2198 break;
2199 }
2200 if (*string1 != '\0')
2201 {
2202 string1++;
2203 string2++;
2204 }
2205 }
2206 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2207 }
2208 \f
2209
2210 /*
2211 ** subset_compare()
2212 ** Answer whether string_to_compare is a full or partial match to
2213 ** template_string. The partial match must be in sequence starting
2214 ** at index 0.
2215 */
2216 int
2217 subset_compare (char *string_to_compare, char *template_string)
2218 {
2219 int match;
2220 if (template_string != (char *) NULL && string_to_compare != (char *) NULL &&
2221 strlen (string_to_compare) <= strlen (template_string))
2222 match = (strncmp (template_string,
2223 string_to_compare,
2224 strlen (string_to_compare)) == 0);
2225 else
2226 match = 0;
2227 return match;
2228 }
2229
2230
2231 static void pagination_on_command (char *arg, int from_tty);
2232 static void
2233 pagination_on_command (char *arg, int from_tty)
2234 {
2235 pagination_enabled = 1;
2236 }
2237
2238 static void pagination_on_command (char *arg, int from_tty);
2239 static void
2240 pagination_off_command (char *arg, int from_tty)
2241 {
2242 pagination_enabled = 0;
2243 }
2244 \f
2245
2246 void
2247 initialize_utils (void)
2248 {
2249 struct cmd_list_element *c;
2250
2251 c = add_set_cmd ("width", class_support, var_uinteger,
2252 (char *) &chars_per_line,
2253 "Set number of characters gdb thinks are in a line.",
2254 &setlist);
2255 add_show_from_set (c, &showlist);
2256 set_cmd_sfunc (c, set_width_command);
2257
2258 add_show_from_set
2259 (add_set_cmd ("height", class_support,
2260 var_uinteger, (char *) &lines_per_page,
2261 "Set number of lines gdb thinks are in a page.", &setlist),
2262 &showlist);
2263
2264 init_page_info ();
2265
2266 /* If the output is not a terminal, don't paginate it. */
2267 if (!ui_file_isatty (gdb_stdout))
2268 lines_per_page = UINT_MAX;
2269
2270 set_width_command ((char *) NULL, 0, c);
2271
2272 add_show_from_set
2273 (add_set_cmd ("demangle", class_support, var_boolean,
2274 (char *) &demangle,
2275 "Set demangling of encoded C++ names when displaying symbols.",
2276 &setprintlist),
2277 &showprintlist);
2278
2279 add_show_from_set
2280 (add_set_cmd ("pagination", class_support,
2281 var_boolean, (char *) &pagination_enabled,
2282 "Set state of pagination.", &setlist),
2283 &showlist);
2284
2285 if (xdb_commands)
2286 {
2287 add_com ("am", class_support, pagination_on_command,
2288 "Enable pagination");
2289 add_com ("sm", class_support, pagination_off_command,
2290 "Disable pagination");
2291 }
2292
2293 add_show_from_set
2294 (add_set_cmd ("sevenbit-strings", class_support, var_boolean,
2295 (char *) &sevenbit_strings,
2296 "Set printing of 8-bit characters in strings as \\nnn.",
2297 &setprintlist),
2298 &showprintlist);
2299
2300 add_show_from_set
2301 (add_set_cmd ("asm-demangle", class_support, var_boolean,
2302 (char *) &asm_demangle,
2303 "Set demangling of C++ names in disassembly listings.",
2304 &setprintlist),
2305 &showprintlist);
2306 }
2307
2308 /* Machine specific function to handle SIGWINCH signal. */
2309
2310 #ifdef SIGWINCH_HANDLER_BODY
2311 SIGWINCH_HANDLER_BODY
2312 #endif
2313
2314 /* print routines to handle variable size regs, etc. */
2315
2316 /* temporary storage using circular buffer */
2317 #define NUMCELLS 16
2318 #define CELLSIZE 32
2319 static char *
2320 get_cell (void)
2321 {
2322 static char buf[NUMCELLS][CELLSIZE];
2323 static int cell = 0;
2324 if (++cell >= NUMCELLS)
2325 cell = 0;
2326 return buf[cell];
2327 }
2328
2329 int
2330 strlen_paddr (void)
2331 {
2332 return (TARGET_ADDR_BIT / 8 * 2);
2333 }
2334
2335 char *
2336 paddr (CORE_ADDR addr)
2337 {
2338 return phex (addr, TARGET_ADDR_BIT / 8);
2339 }
2340
2341 char *
2342 paddr_nz (CORE_ADDR addr)
2343 {
2344 return phex_nz (addr, TARGET_ADDR_BIT / 8);
2345 }
2346
2347 static void
2348 decimal2str (char *paddr_str, char *sign, ULONGEST addr)
2349 {
2350 /* steal code from valprint.c:print_decimal(). Should this worry
2351 about the real size of addr as the above does? */
2352 unsigned long temp[3];
2353 int i = 0;
2354 do
2355 {
2356 temp[i] = addr % (1000 * 1000 * 1000);
2357 addr /= (1000 * 1000 * 1000);
2358 i++;
2359 }
2360 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2361 switch (i)
2362 {
2363 case 1:
2364 sprintf (paddr_str, "%s%lu",
2365 sign, temp[0]);
2366 break;
2367 case 2:
2368 sprintf (paddr_str, "%s%lu%09lu",
2369 sign, temp[1], temp[0]);
2370 break;
2371 case 3:
2372 sprintf (paddr_str, "%s%lu%09lu%09lu",
2373 sign, temp[2], temp[1], temp[0]);
2374 break;
2375 default:
2376 internal_error (__FILE__, __LINE__, "failed internal consistency check");
2377 }
2378 }
2379
2380 char *
2381 paddr_u (CORE_ADDR addr)
2382 {
2383 char *paddr_str = get_cell ();
2384 decimal2str (paddr_str, "", addr);
2385 return paddr_str;
2386 }
2387
2388 char *
2389 paddr_d (LONGEST addr)
2390 {
2391 char *paddr_str = get_cell ();
2392 if (addr < 0)
2393 decimal2str (paddr_str, "-", -addr);
2394 else
2395 decimal2str (paddr_str, "", addr);
2396 return paddr_str;
2397 }
2398
2399 /* eliminate warning from compiler on 32-bit systems */
2400 static int thirty_two = 32;
2401
2402 char *
2403 phex (ULONGEST l, int sizeof_l)
2404 {
2405 char *str;
2406 switch (sizeof_l)
2407 {
2408 case 8:
2409 str = get_cell ();
2410 sprintf (str, "%08lx%08lx",
2411 (unsigned long) (l >> thirty_two),
2412 (unsigned long) (l & 0xffffffff));
2413 break;
2414 case 4:
2415 str = get_cell ();
2416 sprintf (str, "%08lx", (unsigned long) l);
2417 break;
2418 case 2:
2419 str = get_cell ();
2420 sprintf (str, "%04x", (unsigned short) (l & 0xffff));
2421 break;
2422 default:
2423 str = phex (l, sizeof (l));
2424 break;
2425 }
2426 return str;
2427 }
2428
2429 char *
2430 phex_nz (ULONGEST l, int sizeof_l)
2431 {
2432 char *str;
2433 switch (sizeof_l)
2434 {
2435 case 8:
2436 {
2437 unsigned long high = (unsigned long) (l >> thirty_two);
2438 str = get_cell ();
2439 if (high == 0)
2440 sprintf (str, "%lx", (unsigned long) (l & 0xffffffff));
2441 else
2442 sprintf (str, "%lx%08lx",
2443 high, (unsigned long) (l & 0xffffffff));
2444 break;
2445 }
2446 case 4:
2447 str = get_cell ();
2448 sprintf (str, "%lx", (unsigned long) l);
2449 break;
2450 case 2:
2451 str = get_cell ();
2452 sprintf (str, "%x", (unsigned short) (l & 0xffff));
2453 break;
2454 default:
2455 str = phex_nz (l, sizeof (l));
2456 break;
2457 }
2458 return str;
2459 }
2460
2461
2462 /* Convert to / from the hosts pointer to GDB's internal CORE_ADDR
2463 using the target's conversion routines. */
2464 CORE_ADDR
2465 host_pointer_to_address (void *ptr)
2466 {
2467 if (sizeof (ptr) != TYPE_LENGTH (builtin_type_void_data_ptr))
2468 internal_error (__FILE__, __LINE__,
2469 "core_addr_to_void_ptr: bad cast");
2470 return POINTER_TO_ADDRESS (builtin_type_void_data_ptr, &ptr);
2471 }
2472
2473 void *
2474 address_to_host_pointer (CORE_ADDR addr)
2475 {
2476 void *ptr;
2477 if (sizeof (ptr) != TYPE_LENGTH (builtin_type_void_data_ptr))
2478 internal_error (__FILE__, __LINE__,
2479 "core_addr_to_void_ptr: bad cast");
2480 ADDRESS_TO_POINTER (builtin_type_void_data_ptr, &ptr, addr);
2481 return ptr;
2482 }
2483
2484 /* Convert a CORE_ADDR into a string. */
2485 const char *
2486 core_addr_to_string (const CORE_ADDR addr)
2487 {
2488 char *str = get_cell ();
2489 strcpy (str, "0x");
2490 strcat (str, phex (addr, sizeof (addr)));
2491 return str;
2492 }
2493
2494 const char *
2495 core_addr_to_string_nz (const CORE_ADDR addr)
2496 {
2497 char *str = get_cell ();
2498 strcpy (str, "0x");
2499 strcat (str, phex_nz (addr, sizeof (addr)));
2500 return str;
2501 }
2502
2503 /* Convert a string back into a CORE_ADDR. */
2504 CORE_ADDR
2505 string_to_core_addr (const char *my_string)
2506 {
2507 CORE_ADDR addr = 0;
2508 if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
2509 {
2510 /* Assume that it is in decimal. */
2511 int i;
2512 for (i = 2; my_string[i] != '\0'; i++)
2513 {
2514 if (isdigit (my_string[i]))
2515 addr = (my_string[i] - '0') + (addr * 16);
2516 else if (isxdigit (my_string[i]))
2517 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
2518 else
2519 internal_error (__FILE__, __LINE__, "invalid hex");
2520 }
2521 }
2522 else
2523 {
2524 /* Assume that it is in decimal. */
2525 int i;
2526 for (i = 0; my_string[i] != '\0'; i++)
2527 {
2528 if (isdigit (my_string[i]))
2529 addr = (my_string[i] - '0') + (addr * 10);
2530 else
2531 internal_error (__FILE__, __LINE__, "invalid decimal");
2532 }
2533 }
2534 return addr;
2535 }
2536
2537 char *
2538 gdb_realpath (const char *filename)
2539 {
2540 #if defined(HAVE_REALPATH)
2541 # if defined (PATH_MAX)
2542 char buf[PATH_MAX];
2543 # define USE_REALPATH
2544 # elif defined (MAXPATHLEN)
2545 char buf[MAXPATHLEN];
2546 # define USE_REALPATH
2547 # elif defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
2548 char *buf = alloca ((size_t)pathconf ("/", _PC_PATH_MAX));
2549 # define USE_REALPATH
2550 # endif
2551 #endif /* HAVE_REALPATH */
2552
2553 #if defined(USE_REALPATH)
2554 char *rp = realpath (filename, buf);
2555 return xstrdup (rp ? rp : filename);
2556 #elif defined(HAVE_CANONICALIZE_FILE_NAME)
2557 return canonicalize_file_name (filename);
2558 #else
2559 return xstrdup (filename);
2560 #endif
2561 }