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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [gdb/] [utils.c] - Blame information for rev 25

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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