OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [gdb/] [utils.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.