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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [utils.c] - Blame information for rev 835

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

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

powered by: WebSVN 2.1.0

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