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

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [gdb/] [utils.c] - Blame information for rev 1778

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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