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