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