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

Subversion Repositories or1k

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/* Memory-access and commands for "inferior" process, for GDB.
2
   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3
   1996, 1997, 1998, 1999, 2000, 2001
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 2 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program; if not, write to the Free Software
20
   Foundation, Inc., 59 Temple Place - Suite 330,
21
   Boston, MA 02111-1307, USA.  */
22
 
23
#include "defs.h"
24
#include <signal.h>
25
#include "gdb_string.h"
26
#include "symtab.h"
27
#include "gdbtypes.h"
28
#include "frame.h"
29
#include "inferior.h"
30
#include "environ.h"
31
#include "value.h"
32
#include "gdbcmd.h"
33
#include "symfile.h"
34
#include "gdbcore.h"
35
#include "target.h"
36
#include "language.h"
37
#include "symfile.h"
38
#include "objfiles.h"
39
#include "completer.h"
40
#ifdef UI_OUT
41
#include "ui-out.h"
42
#endif
43
#include "event-top.h"
44
#include "parser-defs.h"
45
 
46
/* Functions exported for general use: */
47
 
48
void nofp_registers_info (char *, int);
49
 
50
void all_registers_info (char *, int);
51
 
52
void registers_info (char *, int);
53
 
54
/* Local functions: */
55
 
56
void continue_command (char *, int);
57
 
58
static void print_return_value (int struct_return, struct type *value_type);
59
 
60
static void finish_command_continuation (struct continuation_arg *);
61
 
62
static void until_next_command (int);
63
 
64
static void until_command (char *, int);
65
 
66
static void path_info (char *, int);
67
 
68
static void path_command (char *, int);
69
 
70
static void unset_command (char *, int);
71
 
72
static void float_info (char *, int);
73
 
74
static void detach_command (char *, int);
75
 
76
static void interrupt_target_command (char *args, int from_tty);
77
 
78
static void unset_environment_command (char *, int);
79
 
80
static void set_environment_command (char *, int);
81
 
82
static void environment_info (char *, int);
83
 
84
static void program_info (char *, int);
85
 
86
static void finish_command (char *, int);
87
 
88
static void signal_command (char *, int);
89
 
90
static void jump_command (char *, int);
91
 
92
static void step_1 (int, int, char *);
93
static void step_once (int skip_subroutines, int single_inst, int count);
94
static void step_1_continuation (struct continuation_arg *arg);
95
 
96
void nexti_command (char *, int);
97
 
98
void stepi_command (char *, int);
99
 
100
static void next_command (char *, int);
101
 
102
static void step_command (char *, int);
103
 
104
static void run_command (char *, int);
105
 
106
static void run_no_args_command (char *args, int from_tty);
107
 
108
static void go_command (char *line_no, int from_tty);
109
 
110
static int strip_bg_char (char **);
111
 
112
void _initialize_infcmd (void);
113
 
114
#define GO_USAGE   "Usage: go <location>\n"
115
 
116
static void breakpoint_auto_delete_contents (PTR);
117
 
118
#define ERROR_NO_INFERIOR \
119
   if (!target_has_execution) error ("The program is not being run.");
120
 
121
/* String containing arguments to give to the program, separated by spaces.
122
   Empty string (pointer to '\0') means no args.  */
123
 
124
static char *inferior_args;
125
 
126
/* File name for default use for standard in/out in the inferior.  */
127
 
128
char *inferior_io_terminal;
129
 
130
/* Pid of our debugged inferior, or 0 if no inferior now.
131
   Since various parts of infrun.c test this to see whether there is a program
132
   being debugged it should be nonzero (currently 3 is used) for remote
133
   debugging.  */
134
 
135
ptid_t inferior_ptid;
136
 
137
/* Last signal that the inferior received (why it stopped).  */
138
 
139
enum target_signal stop_signal;
140
 
141
/* Address at which inferior stopped.  */
142
 
143
CORE_ADDR stop_pc;
144
 
145
/* Chain containing status of breakpoint(s) that we have stopped at.  */
146
 
147
bpstat stop_bpstat;
148
 
149
/* Flag indicating that a command has proceeded the inferior past the
150
   current breakpoint.  */
151
 
152
int breakpoint_proceeded;
153
 
154
/* Nonzero if stopped due to a step command.  */
155
 
156
int stop_step;
157
 
158
/* Nonzero if stopped due to completion of a stack dummy routine.  */
159
 
160
int stop_stack_dummy;
161
 
162
/* Nonzero if stopped due to a random (unexpected) signal in inferior
163
   process.  */
164
 
165
int stopped_by_random_signal;
166
 
167
/* Range to single step within.
168
   If this is nonzero, respond to a single-step signal
169
   by continuing to step if the pc is in this range.  */
170
 
171
CORE_ADDR step_range_start;     /* Inclusive */
172
CORE_ADDR step_range_end;       /* Exclusive */
173
 
174
/* Stack frame address as of when stepping command was issued.
175
   This is how we know when we step into a subroutine call,
176
   and how to set the frame for the breakpoint used to step out.  */
177
 
178
CORE_ADDR step_frame_address;
179
 
180
/* Our notion of the current stack pointer.  */
181
 
182
CORE_ADDR step_sp;
183
 
184
enum step_over_calls_kind step_over_calls;
185
 
186
/* If stepping, nonzero means step count is > 1
187
   so don't print frame next time inferior stops
188
   if it stops due to stepping.  */
189
 
190
int step_multi;
191
 
192
/* Environment to use for running inferior,
193
   in format described in environ.h.  */
194
 
195
struct environ *inferior_environ;
196
 
197
/* Accessor routines. */
198
 
199
char *
200
get_inferior_args (void)
201
{
202
  return inferior_args;
203
}
204
 
205
char *
206
set_inferior_args (char *newargs)
207
{
208
  char *saved_args = inferior_args;
209
 
210
  inferior_args = newargs;
211
 
212
  return saved_args;
213
}
214
 
215
/* This function detects whether or not a '&' character (indicating
216
   background execution) has been added as *the last* of the arguments ARGS
217
   of a command. If it has, it removes it and returns 1. Otherwise it
218
   does nothing and returns 0. */
219
static int
220
strip_bg_char (char **args)
221
{
222
  char *p = NULL;
223
 
224
  p = strchr (*args, '&');
225
 
226
  if (p)
227
    {
228
      if (p == (*args + strlen (*args) - 1))
229
        {
230
          if (strlen (*args) > 1)
231
            {
232
              do
233
                p--;
234
              while (*p == ' ' || *p == '\t');
235
              *(p + 1) = '\0';
236
            }
237
          else
238
            *args = 0;
239
          return 1;
240
        }
241
    }
242
  return 0;
243
}
244
 
245
/* ARGSUSED */
246
void
247
tty_command (char *file, int from_tty)
248
{
249
  if (file == 0)
250
    error_no_arg ("terminal name for running target process");
251
 
252
  inferior_io_terminal = savestring (file, strlen (file));
253
}
254
 
255
static void
256
run_command (char *args, int from_tty)
257
{
258
  char *exec_file;
259
 
260
  dont_repeat ();
261
 
262
  if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution)
263
    {
264
      if (from_tty
265
          && !query ("The program being debugged has been started already.\n\
266
Start it from the beginning? "))
267
        error ("Program not restarted.");
268
      target_kill ();
269
#if defined(SOLIB_RESTART)
270
      SOLIB_RESTART ();
271
#endif
272
      init_wait_for_inferior ();
273
    }
274
 
275
  clear_breakpoint_hit_counts ();
276
 
277
  exec_file = (char *) get_exec_file (0);
278
 
279
  /* Purge old solib objfiles. */
280
  objfile_purge_solibs ();
281
 
282
  do_run_cleanups (NULL);
283
 
284
  /* The exec file is re-read every time we do a generic_mourn_inferior, so
285
     we just have to worry about the symbol file.  */
286
  reread_symbols ();
287
 
288
  /* We keep symbols from add-symbol-file, on the grounds that the
289
     user might want to add some symbols before running the program
290
     (right?).  But sometimes (dynamic loading where the user manually
291
     introduces the new symbols with add-symbol-file), the code which
292
     the symbols describe does not persist between runs.  Currently
293
     the user has to manually nuke all symbols between runs if they
294
     want them to go away (PR 2207).  This is probably reasonable.  */
295
 
296
  if (!args)
297
    {
298
      if (event_loop_p && target_can_async_p ())
299
        async_disable_stdin ();
300
    }
301
  else
302
    {
303
      int async_exec = strip_bg_char (&args);
304
 
305
      /* If we get a request for running in the bg but the target
306
         doesn't support it, error out. */
307
      if (event_loop_p && async_exec && !target_can_async_p ())
308
        error ("Asynchronous execution not supported on this target.");
309
 
310
      /* If we don't get a request of running in the bg, then we need
311
         to simulate synchronous (fg) execution. */
312
      if (event_loop_p && !async_exec && target_can_async_p ())
313
        {
314
          /* Simulate synchronous execution */
315
          async_disable_stdin ();
316
        }
317
 
318
      /* If there were other args, beside '&', process them. */
319
      if (args)
320
        {
321
          char *old_args = set_inferior_args (xstrdup (args));
322
          xfree (old_args);
323
        }
324
    }
325
 
326
  if (from_tty)
327
    {
328
#ifdef UI_OUT
329
      ui_out_field_string (uiout, NULL, "Starting program");
330
      ui_out_text (uiout, ": ");
331
      if (exec_file)
332
        ui_out_field_string (uiout, "execfile", exec_file);
333
      ui_out_spaces (uiout, 1);
334
      ui_out_field_string (uiout, "infargs", inferior_args);
335
      ui_out_text (uiout, "\n");
336
      ui_out_flush (uiout);
337
#else
338
      puts_filtered ("Starting program: ");
339
      if (exec_file)
340
        puts_filtered (exec_file);
341
      puts_filtered (" ");
342
      puts_filtered (inferior_args);
343
      puts_filtered ("\n");
344
      gdb_flush (gdb_stdout);
345
#endif
346
    }
347
 
348
  target_create_inferior (exec_file, inferior_args,
349
                          environ_vector (inferior_environ));
350
}
351
 
352
 
353
static void
354
run_no_args_command (char *args, int from_tty)
355
{
356
  char *old_args = set_inferior_args (xstrdup (""));
357
  xfree (old_args);
358
}
359
 
360
 
361
void
362
continue_command (char *proc_count_exp, int from_tty)
363
{
364
  int async_exec = 0;
365
  ERROR_NO_INFERIOR;
366
 
367
  /* Find out whether we must run in the background. */
368
  if (proc_count_exp != NULL)
369
    async_exec = strip_bg_char (&proc_count_exp);
370
 
371
  /* If we must run in the background, but the target can't do it,
372
     error out. */
373
  if (event_loop_p && async_exec && !target_can_async_p ())
374
    error ("Asynchronous execution not supported on this target.");
375
 
376
  /* If we are not asked to run in the bg, then prepare to run in the
377
     foreground, synchronously. */
378
  if (event_loop_p && !async_exec && target_can_async_p ())
379
    {
380
      /* Simulate synchronous execution */
381
      async_disable_stdin ();
382
    }
383
 
384
  /* If have argument (besides '&'), set proceed count of breakpoint
385
     we stopped at.  */
386
  if (proc_count_exp != NULL)
387
    {
388
      bpstat bs = stop_bpstat;
389
      int num = bpstat_num (&bs);
390
      if (num == 0 && from_tty)
391
        {
392
          printf_filtered
393
            ("Not stopped at any breakpoint; argument ignored.\n");
394
        }
395
      while (num != 0)
396
        {
397
          set_ignore_count (num,
398
                            parse_and_eval_long (proc_count_exp) - 1,
399
                            from_tty);
400
          /* set_ignore_count prints a message ending with a period.
401
             So print two spaces before "Continuing.".  */
402
          if (from_tty)
403
            printf_filtered ("  ");
404
          num = bpstat_num (&bs);
405
        }
406
    }
407
 
408
  if (from_tty)
409
    printf_filtered ("Continuing.\n");
410
 
411
  clear_proceed_status ();
412
 
413
  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
414
}
415
 
416
/* Step until outside of current statement.  */
417
 
418
/* ARGSUSED */
419
static void
420
step_command (char *count_string, int from_tty)
421
{
422
  step_1 (0, 0, count_string);
423
}
424
 
425
/* Likewise, but skip over subroutine calls as if single instructions.  */
426
 
427
/* ARGSUSED */
428
static void
429
next_command (char *count_string, int from_tty)
430
{
431
  step_1 (1, 0, count_string);
432
}
433
 
434
/* Likewise, but step only one instruction.  */
435
 
436
/* ARGSUSED */
437
void
438
stepi_command (char *count_string, int from_tty)
439
{
440
  step_1 (0, 1, count_string);
441
}
442
 
443
/* ARGSUSED */
444
void
445
nexti_command (char *count_string, int from_tty)
446
{
447
  step_1 (1, 1, count_string);
448
}
449
 
450
static void
451
disable_longjmp_breakpoint_cleanup (void *ignore)
452
{
453
  disable_longjmp_breakpoint ();
454
}
455
 
456
static void
457
step_1 (int skip_subroutines, int single_inst, char *count_string)
458
{
459
  register int count = 1;
460
  struct frame_info *frame;
461
  struct cleanup *cleanups = 0;
462
  int async_exec = 0;
463
 
464
  ERROR_NO_INFERIOR;
465
 
466
  if (count_string)
467
    async_exec = strip_bg_char (&count_string);
468
 
469
  /* If we get a request for running in the bg but the target
470
     doesn't support it, error out. */
471
  if (event_loop_p && async_exec && !target_can_async_p ())
472
    error ("Asynchronous execution not supported on this target.");
473
 
474
  /* If we don't get a request of running in the bg, then we need
475
     to simulate synchronous (fg) execution. */
476
  if (event_loop_p && !async_exec && target_can_async_p ())
477
    {
478
      /* Simulate synchronous execution */
479
      async_disable_stdin ();
480
    }
481
 
482
  count = count_string ? parse_and_eval_long (count_string) : 1;
483
 
484
  if (!single_inst || skip_subroutines)         /* leave si command alone */
485
    {
486
      enable_longjmp_breakpoint ();
487
      if (!event_loop_p || !target_can_async_p ())
488
        cleanups = make_cleanup (disable_longjmp_breakpoint_cleanup, 0 /*ignore*/);
489
      else
490
        make_exec_cleanup (disable_longjmp_breakpoint_cleanup, 0 /*ignore*/);
491
    }
492
 
493
  /* In synchronous case, all is well, just use the regular for loop. */
494
  if (!event_loop_p || !target_can_async_p ())
495
    {
496
      for (; count > 0; count--)
497
        {
498
          clear_proceed_status ();
499
 
500
          frame = get_current_frame ();
501
          if (!frame)           /* Avoid coredump here.  Why tho? */
502
            error ("No current frame");
503
          step_frame_address = FRAME_FP (frame);
504
          step_sp = read_sp ();
505
 
506
          if (!single_inst)
507
            {
508
              find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
509
              if (step_range_end == 0)
510
                {
511
                  char *name;
512
                  if (find_pc_partial_function (stop_pc, &name, &step_range_start,
513
                                                &step_range_end) == 0)
514
                    error ("Cannot find bounds of current function");
515
 
516
                  target_terminal_ours ();
517
                  printf_filtered ("\
518
Single stepping until exit from function %s, \n\
519
which has no line number information.\n", name);
520
                }
521
            }
522
          else
523
            {
524
              /* Say we are stepping, but stop after one insn whatever it does.  */
525
              step_range_start = step_range_end = 1;
526
              if (!skip_subroutines)
527
                /* It is stepi.
528
                   Don't step over function calls, not even to functions lacking
529
                   line numbers.  */
530
                step_over_calls = STEP_OVER_NONE;
531
            }
532
 
533
          if (skip_subroutines)
534
            step_over_calls = STEP_OVER_ALL;
535
 
536
          step_multi = (count > 1);
537
          proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
538
 
539
          if (!stop_step)
540
            break;
541
 
542
          /* FIXME: On nexti, this may have already been done (when we hit the
543
             step resume break, I think).  Probably this should be moved to
544
             wait_for_inferior (near the top).  */
545
#if defined (SHIFT_INST_REGS)
546
          SHIFT_INST_REGS ();
547
#endif
548
        }
549
 
550
      if (!single_inst || skip_subroutines)
551
        do_cleanups (cleanups);
552
      return;
553
    }
554
  /* In case of asynchronous target things get complicated, do only
555
     one step for now, before returning control to the event loop. Let
556
     the continuation figure out how many other steps we need to do,
557
     and handle them one at the time, through step_once(). */
558
  else
559
    {
560
      if (event_loop_p && target_can_async_p ())
561
        step_once (skip_subroutines, single_inst, count);
562
    }
563
}
564
 
565
/* Called after we are done with one step operation, to check whether
566
   we need to step again, before we print the prompt and return control
567
   to the user. If count is > 1, we will need to do one more call to
568
   proceed(), via step_once(). Basically it is like step_once and
569
   step_1_continuation are co-recursive. */
570
static void
571
step_1_continuation (struct continuation_arg *arg)
572
{
573
  int count;
574
  int skip_subroutines;
575
  int single_inst;
576
 
577
  skip_subroutines = arg->data.integer;
578
  single_inst      = arg->next->data.integer;
579
  count            = arg->next->next->data.integer;
580
 
581
  if (stop_step)
582
    {
583
      /* FIXME: On nexti, this may have already been done (when we hit the
584
         step resume break, I think).  Probably this should be moved to
585
         wait_for_inferior (near the top).  */
586
#if defined (SHIFT_INST_REGS)
587
      SHIFT_INST_REGS ();
588
#endif
589
      step_once (skip_subroutines, single_inst, count - 1);
590
    }
591
  else
592
    if (!single_inst || skip_subroutines)
593
      do_exec_cleanups (ALL_CLEANUPS);
594
}
595
 
596
/* Do just one step operation. If count >1 we will have to set up a
597
   continuation to be done after the target stops (after this one
598
   step). This is useful to implement the 'step n' kind of commands, in
599
   case of asynchronous targets. We had to split step_1 into two parts,
600
   one to be done before proceed() and one afterwards. This function is
601
   called in case of step n with n>1, after the first step operation has
602
   been completed.*/
603
static void
604
step_once (int skip_subroutines, int single_inst, int count)
605
{
606
  struct continuation_arg *arg1;
607
  struct continuation_arg *arg2;
608
  struct continuation_arg *arg3;
609
  struct frame_info *frame;
610
 
611
  if (count > 0)
612
    {
613
      clear_proceed_status ();
614
 
615
      frame = get_current_frame ();
616
      if (!frame)               /* Avoid coredump here.  Why tho? */
617
        error ("No current frame");
618
      step_frame_address = FRAME_FP (frame);
619
      step_sp = read_sp ();
620
 
621
      if (!single_inst)
622
        {
623
          find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
624
 
625
          /* If we have no line info, switch to stepi mode.  */
626
          if (step_range_end == 0 && step_stop_if_no_debug)
627
            {
628
              step_range_start = step_range_end = 1;
629
            }
630
          else if (step_range_end == 0)
631
            {
632
              char *name;
633
              if (find_pc_partial_function (stop_pc, &name, &step_range_start,
634
                                            &step_range_end) == 0)
635
                error ("Cannot find bounds of current function");
636
 
637
              target_terminal_ours ();
638
              printf_filtered ("\
639
Single stepping until exit from function %s, \n\
640
which has no line number information.\n", name);
641
            }
642
        }
643
      else
644
        {
645
          /* Say we are stepping, but stop after one insn whatever it does.  */
646
          step_range_start = step_range_end = 1;
647
          if (!skip_subroutines)
648
            /* It is stepi.
649
               Don't step over function calls, not even to functions lacking
650
               line numbers.  */
651
            step_over_calls = STEP_OVER_NONE;
652
        }
653
 
654
      if (skip_subroutines)
655
        step_over_calls = STEP_OVER_ALL;
656
 
657
      step_multi = (count > 1);
658
      arg1 =
659
        (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
660
      arg2 =
661
        (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
662
      arg3 =
663
        (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
664
      arg1->next = arg2;
665
      arg1->data.integer = skip_subroutines;
666
      arg2->next = arg3;
667
      arg2->data.integer = single_inst;
668
      arg3->next = NULL;
669
      arg3->data.integer = count;
670
      add_intermediate_continuation (step_1_continuation, arg1);
671
      proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
672
    }
673
}
674
 
675
 
676
/* Continue program at specified address.  */
677
 
678
static void
679
jump_command (char *arg, int from_tty)
680
{
681
  register CORE_ADDR addr;
682
  struct symtabs_and_lines sals;
683
  struct symtab_and_line sal;
684
  struct symbol *fn;
685
  struct symbol *sfn;
686
  int async_exec = 0;
687
 
688
  ERROR_NO_INFERIOR;
689
 
690
  /* Find out whether we must run in the background. */
691
  if (arg != NULL)
692
    async_exec = strip_bg_char (&arg);
693
 
694
  /* If we must run in the background, but the target can't do it,
695
     error out. */
696
  if (event_loop_p && async_exec && !target_can_async_p ())
697
    error ("Asynchronous execution not supported on this target.");
698
 
699
  /* If we are not asked to run in the bg, then prepare to run in the
700
     foreground, synchronously. */
701
  if (event_loop_p && !async_exec && target_can_async_p ())
702
    {
703
      /* Simulate synchronous execution */
704
      async_disable_stdin ();
705
    }
706
 
707
  if (!arg)
708
    error_no_arg ("starting address");
709
 
710
  sals = decode_line_spec_1 (arg, 1);
711
  if (sals.nelts != 1)
712
    {
713
      error ("Unreasonable jump request");
714
    }
715
 
716
  sal = sals.sals[0];
717
  xfree (sals.sals);
718
 
719
  if (sal.symtab == 0 && sal.pc == 0)
720
    error ("No source file has been specified.");
721
 
722
  resolve_sal_pc (&sal);        /* May error out */
723
 
724
  /* See if we are trying to jump to another function. */
725
  fn = get_frame_function (get_current_frame ());
726
  sfn = find_pc_function (sal.pc);
727
  if (fn != NULL && sfn != fn)
728
    {
729
      if (!query ("Line %d is not in `%s'.  Jump anyway? ", sal.line,
730
                  SYMBOL_SOURCE_NAME (fn)))
731
        {
732
          error ("Not confirmed.");
733
          /* NOTREACHED */
734
        }
735
    }
736
 
737
  if (sfn != NULL)
738
    {
739
      fixup_symbol_section (sfn, 0);
740
      if (section_is_overlay (SYMBOL_BFD_SECTION (sfn)) &&
741
          !section_is_mapped (SYMBOL_BFD_SECTION (sfn)))
742
        {
743
          if (!query ("WARNING!!!  Destination is in unmapped overlay!  Jump anyway? "))
744
            {
745
              error ("Not confirmed.");
746
              /* NOTREACHED */
747
            }
748
        }
749
    }
750
 
751
  addr = sal.pc;
752
 
753
  if (from_tty)
754
    {
755
      printf_filtered ("Continuing at ");
756
      print_address_numeric (addr, 1, gdb_stdout);
757
      printf_filtered (".\n");
758
    }
759
 
760
  clear_proceed_status ();
761
  proceed (addr, TARGET_SIGNAL_0, 0);
762
}
763
 
764
 
765
/* Go to line or address in current procedure */
766
static void
767
go_command (char *line_no, int from_tty)
768
{
769
  if (line_no == (char *) NULL || !*line_no)
770
    printf_filtered (GO_USAGE);
771
  else
772
    {
773
      tbreak_command (line_no, from_tty);
774
      jump_command (line_no, from_tty);
775
    }
776
}
777
 
778
 
779
/* Continue program giving it specified signal.  */
780
 
781
static void
782
signal_command (char *signum_exp, int from_tty)
783
{
784
  enum target_signal oursig;
785
 
786
  dont_repeat ();               /* Too dangerous.  */
787
  ERROR_NO_INFERIOR;
788
 
789
  if (!signum_exp)
790
    error_no_arg ("signal number");
791
 
792
  /* It would be even slicker to make signal names be valid expressions,
793
     (the type could be "enum $signal" or some such), then the user could
794
     assign them to convenience variables.  */
795
  oursig = target_signal_from_name (signum_exp);
796
 
797
  if (oursig == TARGET_SIGNAL_UNKNOWN)
798
    {
799
      /* No, try numeric.  */
800
      int num = parse_and_eval_long (signum_exp);
801
 
802
      if (num == 0)
803
        oursig = TARGET_SIGNAL_0;
804
      else
805
        oursig = target_signal_from_command (num);
806
    }
807
 
808
  if (from_tty)
809
    {
810
      if (oursig == TARGET_SIGNAL_0)
811
        printf_filtered ("Continuing with no signal.\n");
812
      else
813
        printf_filtered ("Continuing with signal %s.\n",
814
                         target_signal_to_name (oursig));
815
    }
816
 
817
  clear_proceed_status ();
818
  /* "signal 0" should not get stuck if we are stopped at a breakpoint.
819
     FIXME: Neither should "signal foo" but when I tried passing
820
     (CORE_ADDR)-1 unconditionally I got a testsuite failure which I haven't
821
     tried to track down yet.  */
822
  proceed (oursig == TARGET_SIGNAL_0 ? (CORE_ADDR) -1 : stop_pc, oursig, 0);
823
}
824
 
825
/* Call breakpoint_auto_delete on the current contents of the bpstat
826
   pointed to by arg (which is really a bpstat *).  */
827
 
828
static void
829
breakpoint_auto_delete_contents (PTR arg)
830
{
831
  breakpoint_auto_delete (*(bpstat *) arg);
832
}
833
 
834
 
835
/* Execute a "stack dummy", a piece of code stored in the stack
836
   by the debugger to be executed in the inferior.
837
 
838
   To call: first, do PUSH_DUMMY_FRAME.
839
   Then push the contents of the dummy.  It should end with a breakpoint insn.
840
   Then call here, passing address at which to start the dummy.
841
 
842
   The contents of all registers are saved before the dummy frame is popped
843
   and copied into the buffer BUFFER.
844
 
845
   The dummy's frame is automatically popped whenever that break is hit.
846
   If that is the first time the program stops, run_stack_dummy
847
   returns to its caller with that frame already gone and returns 0.
848
 
849
   Otherwise, run_stack-dummy returns a non-zero value.
850
   If the called function receives a random signal, we do not allow the user
851
   to continue executing it as this may not work.  The dummy frame is poped
852
   and we return 1.
853
   If we hit a breakpoint, we leave the frame in place and return 2 (the frame
854
   will eventually be popped when we do hit the dummy end breakpoint).  */
855
 
856
int
857
run_stack_dummy (CORE_ADDR addr, char *buffer)
858
{
859
  struct cleanup *old_cleanups = make_cleanup (null_cleanup, 0);
860
  int saved_async = 0;
861
 
862
  /* Now proceed, having reached the desired place.  */
863
  clear_proceed_status ();
864
 
865
  if (CALL_DUMMY_BREAKPOINT_OFFSET_P)
866
    {
867
      struct breakpoint *bpt;
868
      struct symtab_and_line sal;
869
 
870
      INIT_SAL (&sal);          /* initialize to zeroes */
871
      if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
872
        {
873
          sal.pc = CALL_DUMMY_ADDRESS ();
874
        }
875
      else
876
        {
877
          sal.pc = addr - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
878
        }
879
      sal.section = find_pc_overlay (sal.pc);
880
 
881
      /* Set up a FRAME for the dummy frame so we can pass it to
882
         set_momentary_breakpoint.  We need to give the breakpoint a
883
         frame in case there is only one copy of the dummy (e.g.
884
         CALL_DUMMY_LOCATION == AFTER_TEXT_END).  */
885
      flush_cached_frames ();
886
      set_current_frame (create_new_frame (read_fp (), sal.pc));
887
 
888
      /* If defined, CALL_DUMMY_BREAKPOINT_OFFSET is where we need to put
889
         a breakpoint instruction.  If not, the call dummy already has the
890
         breakpoint instruction in it.
891
 
892
         addr is the address of the call dummy plus the CALL_DUMMY_START_OFFSET,
893
         so we need to subtract the CALL_DUMMY_START_OFFSET.  */
894
      bpt = set_momentary_breakpoint (sal,
895
                                      get_current_frame (),
896
                                      bp_call_dummy);
897
      bpt->disposition = del;
898
 
899
      /* If all error()s out of proceed ended up calling normal_stop (and
900
         perhaps they should; it already does in the special case of error
901
         out of resume()), then we wouldn't need this.  */
902
      make_cleanup (breakpoint_auto_delete_contents, &stop_bpstat);
903
    }
904
 
905
  disable_watchpoints_before_interactive_call_start ();
906
  proceed_to_finish = 1;        /* We want stop_registers, please... */
907
 
908
  if (target_can_async_p ())
909
    saved_async = target_async_mask (0);
910
 
911
  proceed (addr, TARGET_SIGNAL_0, 0);
912
 
913
  if (saved_async)
914
    target_async_mask (saved_async);
915
 
916
  enable_watchpoints_after_interactive_call_stop ();
917
 
918
  discard_cleanups (old_cleanups);
919
 
920
  /* We can stop during an inferior call because a signal is received. */
921
  if (stopped_by_random_signal)
922
    return 1;
923
 
924
  /* We may also stop prematurely because we hit a breakpoint in the
925
     called routine. */
926
  if (!stop_stack_dummy)
927
    return 2;
928
 
929
  /* On normal return, the stack dummy has been popped already.  */
930
 
931
  memcpy (buffer, stop_registers, REGISTER_BYTES);
932
  return 0;
933
}
934
 
935
/* Proceed until we reach a different source line with pc greater than
936
   our current one or exit the function.  We skip calls in both cases.
937
 
938
   Note that eventually this command should probably be changed so
939
   that only source lines are printed out when we hit the breakpoint
940
   we set.  This may involve changes to wait_for_inferior and the
941
   proceed status code.  */
942
 
943
/* ARGSUSED */
944
static void
945
until_next_command (int from_tty)
946
{
947
  struct frame_info *frame;
948
  CORE_ADDR pc;
949
  struct symbol *func;
950
  struct symtab_and_line sal;
951
 
952
  clear_proceed_status ();
953
 
954
  frame = get_current_frame ();
955
 
956
  /* Step until either exited from this function or greater
957
     than the current line (if in symbolic section) or pc (if
958
     not). */
959
 
960
  pc = read_pc ();
961
  func = find_pc_function (pc);
962
 
963
  if (!func)
964
    {
965
      struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc);
966
 
967
      if (msymbol == NULL)
968
        error ("Execution is not within a known function.");
969
 
970
      step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
971
      step_range_end = pc;
972
    }
973
  else
974
    {
975
      sal = find_pc_line (pc, 0);
976
 
977
      step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
978
      step_range_end = sal.end;
979
    }
980
 
981
  step_over_calls = STEP_OVER_ALL;
982
  step_frame_address = FRAME_FP (frame);
983
  step_sp = read_sp ();
984
 
985
  step_multi = 0;                /* Only one call to proceed */
986
 
987
  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
988
}
989
 
990
static void
991
until_command (char *arg, int from_tty)
992
{
993
  int async_exec = 0;
994
 
995
  if (!target_has_execution)
996
    error ("The program is not running.");
997
 
998
  /* Find out whether we must run in the background. */
999
  if (arg != NULL)
1000
    async_exec = strip_bg_char (&arg);
1001
 
1002
  /* If we must run in the background, but the target can't do it,
1003
     error out. */
1004
  if (event_loop_p && async_exec && !target_can_async_p ())
1005
    error ("Asynchronous execution not supported on this target.");
1006
 
1007
  /* If we are not asked to run in the bg, then prepare to run in the
1008
     foreground, synchronously. */
1009
  if (event_loop_p && !async_exec && target_can_async_p ())
1010
    {
1011
      /* Simulate synchronous execution */
1012
      async_disable_stdin ();
1013
    }
1014
 
1015
  if (arg)
1016
    until_break_command (arg, from_tty);
1017
  else
1018
    until_next_command (from_tty);
1019
}
1020
 
1021
 
1022
/* Print the result of a function at the end of a 'finish' command. */
1023
static void
1024
print_return_value (int structure_return, struct type *value_type)
1025
{
1026
  register value_ptr value;
1027
#ifdef UI_OUT
1028
  static struct ui_stream *stb = NULL;
1029
#endif /* UI_OUT */
1030
 
1031
  if (!structure_return)
1032
    {
1033
      value = value_being_returned (value_type, stop_registers, structure_return);
1034
#ifdef UI_OUT
1035
      stb = ui_out_stream_new (uiout);
1036
      ui_out_text (uiout, "Value returned is ");
1037
      ui_out_field_fmt (uiout, "gdb-result-var", "$%d", record_latest_value (value));
1038
      ui_out_text (uiout, " = ");
1039
      value_print (value, stb->stream, 0, Val_no_prettyprint);
1040
      ui_out_field_stream (uiout, "return-value", stb);
1041
      ui_out_text (uiout, "\n");
1042
#else /* UI_OUT */
1043
      printf_filtered ("Value returned is $%d = ", record_latest_value (value));
1044
      value_print (value, gdb_stdout, 0, Val_no_prettyprint);
1045
      printf_filtered ("\n");
1046
#endif /* UI_OUT */
1047
    }
1048
  else
1049
    {
1050
      /* We cannot determine the contents of the structure because
1051
         it is on the stack, and we don't know where, since we did not
1052
         initiate the call, as opposed to the call_function_by_hand case */
1053
#ifdef VALUE_RETURNED_FROM_STACK
1054
      value = 0;
1055
#ifdef UI_OUT
1056
      ui_out_text (uiout, "Value returned has type: ");
1057
      ui_out_field_string (uiout, "return-type", TYPE_NAME (value_type));
1058
      ui_out_text (uiout, ".");
1059
      ui_out_text (uiout, " Cannot determine contents\n");
1060
#else /* UI_OUT */
1061
      printf_filtered ("Value returned has type: %s.", TYPE_NAME (value_type));
1062
      printf_filtered (" Cannot determine contents\n");
1063
#endif /* UI_OUT */
1064
#else
1065
      value = value_being_returned (value_type, stop_registers, structure_return);
1066
#ifdef UI_OUT
1067
      stb = ui_out_stream_new (uiout);
1068
      ui_out_text (uiout, "Value returned is ");
1069
      ui_out_field_fmt (uiout, "gdb-result-var", "$%d", record_latest_value (value));
1070
      ui_out_text (uiout, " = ");
1071
      value_print (value, stb->stream, 0, Val_no_prettyprint);
1072
      ui_out_field_stream (uiout, "return-value", stb);
1073
      ui_out_text (uiout, "\n");
1074
#else
1075
      printf_filtered ("Value returned is $%d = ", record_latest_value (value));
1076
      value_print (value, gdb_stdout, 0, Val_no_prettyprint);
1077
      printf_filtered ("\n");
1078
#endif
1079
#endif
1080
    }
1081
}
1082
 
1083
/* Stuff that needs to be done by the finish command after the target
1084
   has stopped.  In asynchronous mode, we wait for the target to stop in
1085
   the call to poll or select in the event loop, so it is impossible to
1086
   do all the stuff as part of the finish_command function itself. The
1087
   only chance we have to complete this command is in
1088
   fetch_inferior_event, which is called by the event loop as soon as it
1089
   detects that the target has stopped. This function is called via the
1090
   cmd_continuation pointer. */
1091
void
1092
finish_command_continuation (struct continuation_arg *arg)
1093
{
1094
  register struct symbol *function;
1095
  struct breakpoint *breakpoint;
1096
  struct cleanup *cleanups;
1097
 
1098
  breakpoint = (struct breakpoint *) arg->data.pointer;
1099
  function   = (struct symbol *)     arg->next->data.pointer;
1100
  cleanups   = (struct cleanup *)    arg->next->next->data.pointer;
1101
 
1102
  if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
1103
      && function != 0)
1104
    {
1105
      struct type *value_type;
1106
      CORE_ADDR funcaddr;
1107
      int struct_return;
1108
 
1109
      value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
1110
      if (!value_type)
1111
        internal_error (__FILE__, __LINE__,
1112
                        "finish_command: function has no target type");
1113
 
1114
      if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
1115
        {
1116
          do_exec_cleanups (cleanups);
1117
          return;
1118
        }
1119
 
1120
      funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
1121
 
1122
      struct_return = using_struct_return (value_of_variable (function, NULL),
1123
                                           funcaddr,
1124
                                           check_typedef (value_type),
1125
                                           BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function)));
1126
 
1127
      print_return_value (struct_return, value_type);
1128
    }
1129
  do_exec_cleanups (cleanups);
1130
}
1131
 
1132
/* "finish": Set a temporary breakpoint at the place
1133
   the selected frame will return to, then continue.  */
1134
 
1135
static void
1136
finish_command (char *arg, int from_tty)
1137
{
1138
  struct symtab_and_line sal;
1139
  register struct frame_info *frame;
1140
  register struct symbol *function;
1141
  struct breakpoint *breakpoint;
1142
  struct cleanup *old_chain;
1143
  struct continuation_arg *arg1, *arg2, *arg3;
1144
 
1145
  int async_exec = 0;
1146
 
1147
  /* Find out whether we must run in the background. */
1148
  if (arg != NULL)
1149
    async_exec = strip_bg_char (&arg);
1150
 
1151
  /* If we must run in the background, but the target can't do it,
1152
     error out. */
1153
  if (event_loop_p && async_exec && !target_can_async_p ())
1154
    error ("Asynchronous execution not supported on this target.");
1155
 
1156
  /* If we are not asked to run in the bg, then prepare to run in the
1157
     foreground, synchronously. */
1158
  if (event_loop_p && !async_exec && target_can_async_p ())
1159
    {
1160
      /* Simulate synchronous execution */
1161
      async_disable_stdin ();
1162
    }
1163
 
1164
  if (arg)
1165
    error ("The \"finish\" command does not take any arguments.");
1166
  if (!target_has_execution)
1167
    error ("The program is not running.");
1168
  if (selected_frame == NULL)
1169
    error ("No selected frame.");
1170
 
1171
  frame = get_prev_frame (selected_frame);
1172
  if (frame == 0)
1173
    error ("\"finish\" not meaningful in the outermost frame.");
1174
 
1175
  clear_proceed_status ();
1176
 
1177
  sal = find_pc_line (frame->pc, 0);
1178
  sal.pc = frame->pc;
1179
 
1180
  breakpoint = set_momentary_breakpoint (sal, frame, bp_finish);
1181
 
1182
  if (!event_loop_p || !target_can_async_p ())
1183
    old_chain = make_cleanup_delete_breakpoint (breakpoint);
1184
  else
1185
    old_chain = make_exec_cleanup_delete_breakpoint (breakpoint);
1186
 
1187
  /* Find the function we will return from.  */
1188
 
1189
  function = find_pc_function (selected_frame->pc);
1190
 
1191
  /* Print info on the selected frame, including level number
1192
     but not source.  */
1193
  if (from_tty)
1194
    {
1195
      printf_filtered ("Run till exit from ");
1196
      print_stack_frame (selected_frame, selected_frame_level, 0);
1197
    }
1198
 
1199
  /* If running asynchronously and the target support asynchronous
1200
     execution, set things up for the rest of the finish command to be
1201
     completed later on, when gdb has detected that the target has
1202
     stopped, in fetch_inferior_event. */
1203
  if (event_loop_p && target_can_async_p ())
1204
    {
1205
      arg1 =
1206
        (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1207
      arg2 =
1208
        (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1209
      arg3 =
1210
        (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1211
      arg1->next = arg2;
1212
      arg2->next = arg3;
1213
      arg3->next = NULL;
1214
      arg1->data.pointer = breakpoint;
1215
      arg2->data.pointer = function;
1216
      arg3->data.pointer = old_chain;
1217
      add_continuation (finish_command_continuation, arg1);
1218
    }
1219
 
1220
  proceed_to_finish = 1;        /* We want stop_registers, please... */
1221
  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
1222
 
1223
  /* Do this only if not running asynchronously or if the target
1224
     cannot do async execution. Otherwise, complete this command when
1225
     the target actually stops, in fetch_inferior_event. */
1226
  if (!event_loop_p || !target_can_async_p ())
1227
    {
1228
 
1229
      /* Did we stop at our breakpoint? */
1230
      if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
1231
          && function != 0)
1232
        {
1233
          struct type *value_type;
1234
          CORE_ADDR funcaddr;
1235
          int struct_return;
1236
 
1237
          value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
1238
          if (!value_type)
1239
            internal_error (__FILE__, __LINE__,
1240
                            "finish_command: function has no target type");
1241
 
1242
          /* FIXME: Shouldn't we do the cleanups before returning? */
1243
          if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
1244
            return;
1245
 
1246
          funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
1247
 
1248
          struct_return =
1249
            using_struct_return (value_of_variable (function, NULL),
1250
                                 funcaddr,
1251
                                 check_typedef (value_type),
1252
                        BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function)));
1253
 
1254
          print_return_value (struct_return, value_type);
1255
        }
1256
      do_cleanups (old_chain);
1257
    }
1258
}
1259
 
1260
/* ARGSUSED */
1261
static void
1262
program_info (char *args, int from_tty)
1263
{
1264
  bpstat bs = stop_bpstat;
1265
  int num = bpstat_num (&bs);
1266
 
1267
  if (!target_has_execution)
1268
    {
1269
      printf_filtered ("The program being debugged is not being run.\n");
1270
      return;
1271
    }
1272
 
1273
  target_files_info ();
1274
  printf_filtered ("Program stopped at %s.\n",
1275
                   local_hex_string ((unsigned long) stop_pc));
1276
  if (stop_step)
1277
    printf_filtered ("It stopped after being stepped.\n");
1278
  else if (num != 0)
1279
    {
1280
      /* There may be several breakpoints in the same place, so this
1281
         isn't as strange as it seems.  */
1282
      while (num != 0)
1283
        {
1284
          if (num < 0)
1285
            {
1286
              printf_filtered ("It stopped at a breakpoint that has ");
1287
              printf_filtered ("since been deleted.\n");
1288
            }
1289
          else
1290
            printf_filtered ("It stopped at breakpoint %d.\n", num);
1291
          num = bpstat_num (&bs);
1292
        }
1293
    }
1294
  else if (stop_signal != TARGET_SIGNAL_0)
1295
    {
1296
      printf_filtered ("It stopped with signal %s, %s.\n",
1297
                       target_signal_to_name (stop_signal),
1298
                       target_signal_to_string (stop_signal));
1299
    }
1300
 
1301
  if (!from_tty)
1302
    {
1303
      printf_filtered ("Type \"info stack\" or \"info registers\" ");
1304
      printf_filtered ("for more information.\n");
1305
    }
1306
}
1307
 
1308
static void
1309
environment_info (char *var, int from_tty)
1310
{
1311
  if (var)
1312
    {
1313
      register char *val = get_in_environ (inferior_environ, var);
1314
      if (val)
1315
        {
1316
          puts_filtered (var);
1317
          puts_filtered (" = ");
1318
          puts_filtered (val);
1319
          puts_filtered ("\n");
1320
        }
1321
      else
1322
        {
1323
          puts_filtered ("Environment variable \"");
1324
          puts_filtered (var);
1325
          puts_filtered ("\" not defined.\n");
1326
        }
1327
    }
1328
  else
1329
    {
1330
      register char **vector = environ_vector (inferior_environ);
1331
      while (*vector)
1332
        {
1333
          puts_filtered (*vector++);
1334
          puts_filtered ("\n");
1335
        }
1336
    }
1337
}
1338
 
1339
static void
1340
set_environment_command (char *arg, int from_tty)
1341
{
1342
  register char *p, *val, *var;
1343
  int nullset = 0;
1344
 
1345
  if (arg == 0)
1346
    error_no_arg ("environment variable and value");
1347
 
1348
  /* Find seperation between variable name and value */
1349
  p = (char *) strchr (arg, '=');
1350
  val = (char *) strchr (arg, ' ');
1351
 
1352
  if (p != 0 && val != 0)
1353
    {
1354
      /* We have both a space and an equals.  If the space is before the
1355
         equals, walk forward over the spaces til we see a nonspace
1356
         (possibly the equals). */
1357
      if (p > val)
1358
        while (*val == ' ')
1359
          val++;
1360
 
1361
      /* Now if the = is after the char following the spaces,
1362
         take the char following the spaces.  */
1363
      if (p > val)
1364
        p = val - 1;
1365
    }
1366
  else if (val != 0 && p == 0)
1367
    p = val;
1368
 
1369
  if (p == arg)
1370
    error_no_arg ("environment variable to set");
1371
 
1372
  if (p == 0 || p[1] == 0)
1373
    {
1374
      nullset = 1;
1375
      if (p == 0)
1376
        p = arg + strlen (arg); /* So that savestring below will work */
1377
    }
1378
  else
1379
    {
1380
      /* Not setting variable value to null */
1381
      val = p + 1;
1382
      while (*val == ' ' || *val == '\t')
1383
        val++;
1384
    }
1385
 
1386
  while (p != arg && (p[-1] == ' ' || p[-1] == '\t'))
1387
    p--;
1388
 
1389
  var = savestring (arg, p - arg);
1390
  if (nullset)
1391
    {
1392
      printf_filtered ("Setting environment variable ");
1393
      printf_filtered ("\"%s\" to null value.\n", var);
1394
      set_in_environ (inferior_environ, var, "");
1395
    }
1396
  else
1397
    set_in_environ (inferior_environ, var, val);
1398
  xfree (var);
1399
}
1400
 
1401
static void
1402
unset_environment_command (char *var, int from_tty)
1403
{
1404
  if (var == 0)
1405
    {
1406
      /* If there is no argument, delete all environment variables.
1407
         Ask for confirmation if reading from the terminal.  */
1408
      if (!from_tty || query ("Delete all environment variables? "))
1409
        {
1410
          free_environ (inferior_environ);
1411
          inferior_environ = make_environ ();
1412
        }
1413
    }
1414
  else
1415
    unset_in_environ (inferior_environ, var);
1416
}
1417
 
1418
/* Handle the execution path (PATH variable) */
1419
 
1420
static const char path_var_name[] = "PATH";
1421
 
1422
/* ARGSUSED */
1423
static void
1424
path_info (char *args, int from_tty)
1425
{
1426
  puts_filtered ("Executable and object file path: ");
1427
  puts_filtered (get_in_environ (inferior_environ, path_var_name));
1428
  puts_filtered ("\n");
1429
}
1430
 
1431
/* Add zero or more directories to the front of the execution path.  */
1432
 
1433
static void
1434
path_command (char *dirname, int from_tty)
1435
{
1436
  char *exec_path;
1437
  char *env;
1438
  dont_repeat ();
1439
  env = get_in_environ (inferior_environ, path_var_name);
1440
  /* Can be null if path is not set */
1441
  if (!env)
1442
    env = "";
1443
  exec_path = xstrdup (env);
1444
  mod_path (dirname, &exec_path);
1445
  set_in_environ (inferior_environ, path_var_name, exec_path);
1446
  xfree (exec_path);
1447
  if (from_tty)
1448
    path_info ((char *) NULL, from_tty);
1449
}
1450
 
1451
 
1452
#ifdef REGISTER_NAMES
1453
char *gdb_register_names[] = REGISTER_NAMES;
1454
#endif
1455
/* Print out the machine register regnum. If regnum is -1,
1456
   print all registers (fpregs == 1) or all non-float registers
1457
   (fpregs == 0).
1458
 
1459
   For most machines, having all_registers_info() print the
1460
   register(s) one per line is good enough. If a different format
1461
   is required, (eg, for MIPS or Pyramid 90x, which both have
1462
   lots of regs), or there is an existing convention for showing
1463
   all the registers, define the macro DO_REGISTERS_INFO(regnum, fp)
1464
   to provide that format.  */
1465
 
1466
void
1467
do_registers_info (int regnum, int fpregs)
1468
{
1469
  register int i;
1470
  int numregs = NUM_REGS + NUM_PSEUDO_REGS;
1471
  char *raw_buffer = (char*) alloca (MAX_REGISTER_RAW_SIZE);
1472
  char *virtual_buffer = (char*) alloca (MAX_REGISTER_VIRTUAL_SIZE);
1473
 
1474
  for (i = 0; i < numregs; i++)
1475
    {
1476
      /* Decide between printing all regs, nonfloat regs, or specific reg.  */
1477
      if (regnum == -1)
1478
        {
1479
          if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT && !fpregs)
1480
            continue;
1481
        }
1482
      else
1483
        {
1484
          if (i != regnum)
1485
            continue;
1486
        }
1487
 
1488
      /* If the register name is empty, it is undefined for this
1489
         processor, so don't display anything.  */
1490
      if (REGISTER_NAME (i) == NULL || *(REGISTER_NAME (i)) == '\0')
1491
        continue;
1492
 
1493
      fputs_filtered (REGISTER_NAME (i), gdb_stdout);
1494
      print_spaces_filtered (15 - strlen (REGISTER_NAME (i)), gdb_stdout);
1495
 
1496
      /* Get the data in raw format.  */
1497
      if (read_relative_register_raw_bytes (i, raw_buffer))
1498
        {
1499
          printf_filtered ("*value not available*\n");
1500
          continue;
1501
        }
1502
 
1503
      /* Convert raw data to virtual format if necessary.  */
1504
      if (REGISTER_CONVERTIBLE (i))
1505
        {
1506
          REGISTER_CONVERT_TO_VIRTUAL (i, REGISTER_VIRTUAL_TYPE (i),
1507
                                       raw_buffer, virtual_buffer);
1508
        }
1509
      else
1510
        {
1511
          memcpy (virtual_buffer, raw_buffer,
1512
                  REGISTER_VIRTUAL_SIZE (i));
1513
        }
1514
 
1515
      /* If virtual format is floating, print it that way, and in raw hex.  */
1516
      if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT)
1517
        {
1518
          register int j;
1519
 
1520
#ifdef INVALID_FLOAT
1521
          if (INVALID_FLOAT (virtual_buffer, REGISTER_VIRTUAL_SIZE (i)))
1522
            printf_filtered ("<invalid float>");
1523
          else
1524
#endif
1525
            val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1526
                       gdb_stdout, 0, 1, 0, Val_pretty_default);
1527
 
1528
          printf_filtered ("\t(raw 0x");
1529
          for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
1530
            {
1531
              register int idx = TARGET_BYTE_ORDER == BIG_ENDIAN ? j
1532
              : REGISTER_RAW_SIZE (i) - 1 - j;
1533
              printf_filtered ("%02x", (unsigned char) raw_buffer[idx]);
1534
            }
1535
          printf_filtered (")");
1536
        }
1537
 
1538
/* FIXME!  val_print probably can handle all of these cases now...  */
1539
 
1540
      /* Else if virtual format is too long for printf,
1541
         print in hex a byte at a time.  */
1542
      else if (REGISTER_VIRTUAL_SIZE (i) > (int) sizeof (long))
1543
        {
1544
          register int j;
1545
          printf_filtered ("0x");
1546
          for (j = 0; j < REGISTER_VIRTUAL_SIZE (i); j++)
1547
            printf_filtered ("%02x", (unsigned char) virtual_buffer[j]);
1548
        }
1549
      /* Else print as integer in hex and in decimal.  */
1550
      else
1551
        {
1552
          val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1553
                     gdb_stdout, 'x', 1, 0, Val_pretty_default);
1554
          printf_filtered ("\t");
1555
          val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
1556
                     gdb_stdout, 0, 1, 0, Val_pretty_default);
1557
        }
1558
 
1559
      /* The SPARC wants to print even-numbered float regs as doubles
1560
         in addition to printing them as floats.  */
1561
#ifdef PRINT_REGISTER_HOOK
1562
      PRINT_REGISTER_HOOK (i);
1563
#endif
1564
 
1565
      printf_filtered ("\n");
1566
    }
1567
}
1568
 
1569
void
1570
registers_info (char *addr_exp, int fpregs)
1571
{
1572
  int regnum, numregs;
1573
  register char *end;
1574
 
1575
  if (!target_has_registers)
1576
    error ("The program has no registers now.");
1577
  if (selected_frame == NULL)
1578
    error ("No selected frame.");
1579
 
1580
  if (!addr_exp)
1581
    {
1582
      DO_REGISTERS_INFO (-1, fpregs);
1583
      return;
1584
    }
1585
 
1586
  do
1587
    {
1588
      if (addr_exp[0] == '$')
1589
        addr_exp++;
1590
      end = addr_exp;
1591
      while (*end != '\0' && *end != ' ' && *end != '\t')
1592
        ++end;
1593
      numregs = NUM_REGS + NUM_PSEUDO_REGS;
1594
 
1595
      regnum = target_map_name_to_register (addr_exp, end - addr_exp);
1596
      if (regnum >= 0)
1597
        goto found;
1598
 
1599
      regnum = numregs;
1600
 
1601
      if (*addr_exp >= '0' && *addr_exp <= '9')
1602
        regnum = atoi (addr_exp);       /* Take a number */
1603
      if (regnum >= numregs)    /* Bad name, or bad number */
1604
        error ("%.*s: invalid register", end - addr_exp, addr_exp);
1605
 
1606
    found:
1607
      DO_REGISTERS_INFO (regnum, fpregs);
1608
 
1609
      addr_exp = end;
1610
      while (*addr_exp == ' ' || *addr_exp == '\t')
1611
        ++addr_exp;
1612
    }
1613
  while (*addr_exp != '\0');
1614
}
1615
 
1616
void
1617
all_registers_info (char *addr_exp, int from_tty)
1618
{
1619
  registers_info (addr_exp, 1);
1620
}
1621
 
1622
void
1623
nofp_registers_info (char *addr_exp, int from_tty)
1624
{
1625
  registers_info (addr_exp, 0);
1626
}
1627
 
1628
 
1629
/*
1630
 * TODO:
1631
 * Should save/restore the tty state since it might be that the
1632
 * program to be debugged was started on this tty and it wants
1633
 * the tty in some state other than what we want.  If it's running
1634
 * on another terminal or without a terminal, then saving and
1635
 * restoring the tty state is a harmless no-op.
1636
 * This only needs to be done if we are attaching to a process.
1637
 */
1638
 
1639
/*
1640
   attach_command --
1641
   takes a program started up outside of gdb and ``attaches'' to it.
1642
   This stops it cold in its tracks and allows us to start debugging it.
1643
   and wait for the trace-trap that results from attaching.  */
1644
 
1645
void
1646
attach_command (char *args, int from_tty)
1647
{
1648
#ifdef SOLIB_ADD
1649
  extern int auto_solib_add;
1650
#endif
1651
 
1652
  char *exec_file;
1653
  char *full_exec_path = NULL;
1654
 
1655
  dont_repeat ();               /* Not for the faint of heart */
1656
 
1657
  if (target_has_execution)
1658
    {
1659
      if (query ("A program is being debugged already.  Kill it? "))
1660
        target_kill ();
1661
      else
1662
        error ("Not killed.");
1663
    }
1664
 
1665
  target_attach (args, from_tty);
1666
 
1667
  /* Set up the "saved terminal modes" of the inferior
1668
     based on what modes we are starting it with.  */
1669
  target_terminal_init ();
1670
 
1671
  /* Install inferior's terminal modes.  */
1672
  target_terminal_inferior ();
1673
 
1674
  /* Set up execution context to know that we should return from
1675
     wait_for_inferior as soon as the target reports a stop.  */
1676
  init_wait_for_inferior ();
1677
  clear_proceed_status ();
1678
 
1679
  /* No traps are generated when attaching to inferior under Mach 3
1680
     or GNU hurd.  */
1681
#ifndef ATTACH_NO_WAIT
1682
  stop_soon_quietly = 1;
1683
  wait_for_inferior ();
1684
#endif
1685
 
1686
  /*
1687
   * If no exec file is yet known, try to determine it from the
1688
   * process itself.
1689
   */
1690
  exec_file = (char *) get_exec_file (0);
1691
  if (!exec_file)
1692
    {
1693
      exec_file = target_pid_to_exec_file (PIDGET (inferior_ptid));
1694
      if (exec_file)
1695
        {
1696
          /* It's possible we don't have a full path, but rather just a
1697
             filename.  Some targets, such as HP-UX, don't provide the
1698
             full path, sigh.
1699
 
1700
             Attempt to qualify the filename against the source path.
1701
             (If that fails, we'll just fall back on the original
1702
             filename.  Not much more we can do...)
1703
           */
1704
          if (!source_full_path_of (exec_file, &full_exec_path))
1705
            full_exec_path = savestring (exec_file, strlen (exec_file));
1706
 
1707
          exec_file_attach (full_exec_path, from_tty);
1708
          symbol_file_add_main (full_exec_path, from_tty);
1709
        }
1710
    }
1711
 
1712
#ifdef SOLIB_ADD
1713
  if (auto_solib_add)
1714
    {
1715
      /* Add shared library symbols from the newly attached process, if any.  */
1716
      SOLIB_ADD ((char *) 0, from_tty, &current_target);
1717
      re_enable_breakpoints_in_shlibs ();
1718
    }
1719
#endif
1720
 
1721
  /* Take any necessary post-attaching actions for this platform.
1722
   */
1723
  target_post_attach (PIDGET (inferior_ptid));
1724
 
1725
  normal_stop ();
1726
 
1727
  if (attach_hook)
1728
    attach_hook ();
1729
}
1730
 
1731
/*
1732
 * detach_command --
1733
 * takes a program previously attached to and detaches it.
1734
 * The program resumes execution and will no longer stop
1735
 * on signals, etc.  We better not have left any breakpoints
1736
 * in the program or it'll die when it hits one.  For this
1737
 * to work, it may be necessary for the process to have been
1738
 * previously attached.  It *might* work if the program was
1739
 * started via the normal ptrace (PTRACE_TRACEME).
1740
 */
1741
 
1742
static void
1743
detach_command (char *args, int from_tty)
1744
{
1745
  dont_repeat ();               /* Not for the faint of heart */
1746
  target_detach (args, from_tty);
1747
#if defined(SOLIB_RESTART)
1748
  SOLIB_RESTART ();
1749
#endif
1750
  if (detach_hook)
1751
    detach_hook ();
1752
}
1753
 
1754
/* Stop the execution of the target while running in async mode, in
1755
   the backgound. */
1756
#ifdef UI_OUT
1757
void
1758
interrupt_target_command_wrapper (char *args, int from_tty)
1759
{
1760
  interrupt_target_command (args, from_tty);
1761
}
1762
#endif
1763
static void
1764
interrupt_target_command (char *args, int from_tty)
1765
{
1766
  if (event_loop_p && target_can_async_p ())
1767
    {
1768
      dont_repeat ();           /* Not for the faint of heart */
1769
      target_stop ();
1770
    }
1771
}
1772
 
1773
/* ARGSUSED */
1774
static void
1775
float_info (char *addr_exp, int from_tty)
1776
{
1777
#ifdef FLOAT_INFO
1778
  FLOAT_INFO;
1779
#else
1780
  printf_filtered ("No floating point info available for this processor.\n");
1781
#endif
1782
}
1783
 
1784
/* ARGSUSED */
1785
static void
1786
unset_command (char *args, int from_tty)
1787
{
1788
  printf_filtered ("\"unset\" must be followed by the name of ");
1789
  printf_filtered ("an unset subcommand.\n");
1790
  help_list (unsetlist, "unset ", -1, gdb_stdout);
1791
}
1792
 
1793
void
1794
_initialize_infcmd (void)
1795
{
1796
  struct cmd_list_element *c;
1797
 
1798
  c = add_com ("tty", class_run, tty_command,
1799
               "Set terminal for future runs of program being debugged.");
1800
  c->completer = filename_completer;
1801
 
1802
  c = add_set_cmd ("args", class_run, var_string_noescape,
1803
                   (char *) &inferior_args,
1804
                   "Set argument list to give program being debugged when it is started.\n\
1805
Follow this command with any number of args, to be passed to the program.",
1806
                   &setlist);
1807
  add_show_from_set (c, &showlist);
1808
  c->completer = filename_completer;
1809
 
1810
  c = add_cmd
1811
    ("environment", no_class, environment_info,
1812
     "The environment to give the program, or one variable's value.\n\
1813
With an argument VAR, prints the value of environment variable VAR to\n\
1814
give the program being debugged.  With no arguments, prints the entire\n\
1815
environment to be given to the program.", &showlist);
1816
  c->completer = noop_completer;
1817
 
1818
  add_prefix_cmd ("unset", no_class, unset_command,
1819
                  "Complement to certain \"set\" commands",
1820
                  &unsetlist, "unset ", 0, &cmdlist);
1821
 
1822
  c = add_cmd ("environment", class_run, unset_environment_command,
1823
               "Cancel environment variable VAR for the program.\n\
1824
This does not affect the program until the next \"run\" command.",
1825
               &unsetlist);
1826
  c->completer = noop_completer;
1827
 
1828
  c = add_cmd ("environment", class_run, set_environment_command,
1829
               "Set environment variable value to give the program.\n\
1830
Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
1831
VALUES of environment variables are uninterpreted strings.\n\
1832
This does not affect the program until the next \"run\" command.",
1833
               &setlist);
1834
  c->completer = noop_completer;
1835
 
1836
  c = add_com ("path", class_files, path_command,
1837
               "Add directory DIR(s) to beginning of search path for object files.\n\
1838
$cwd in the path means the current working directory.\n\
1839
This path is equivalent to the $PATH shell variable.  It is a list of\n\
1840
directories, separated by colons.  These directories are searched to find\n\
1841
fully linked executable files and separately compiled object files as needed.");
1842
  c->completer = filename_completer;
1843
 
1844
  c = add_cmd ("paths", no_class, path_info,
1845
               "Current search path for finding object files.\n\
1846
$cwd in the path means the current working directory.\n\
1847
This path is equivalent to the $PATH shell variable.  It is a list of\n\
1848
directories, separated by colons.  These directories are searched to find\n\
1849
fully linked executable files and separately compiled object files as needed.",
1850
               &showlist);
1851
  c->completer = noop_completer;
1852
 
1853
  add_com ("attach", class_run, attach_command,
1854
           "Attach to a process or file outside of GDB.\n\
1855
This command attaches to another target, of the same type as your last\n\
1856
\"target\" command (\"info files\" will show your target stack).\n\
1857
The command may take as argument a process id or a device file.\n\
1858
For a process id, you must have permission to send the process a signal,\n\
1859
and it must have the same effective uid as the debugger.\n\
1860
When using \"attach\" with a process id, the debugger finds the\n\
1861
program running in the process, looking first in the current working\n\
1862
directory, or (if not found there) using the source file search path\n\
1863
(see the \"directory\" command).  You can also use the \"file\" command\n\
1864
to specify the program, and to load its symbol table.");
1865
 
1866
  add_com ("detach", class_run, detach_command,
1867
           "Detach a process or file previously attached.\n\
1868
If a process, it is no longer traced, and it continues its execution.  If\n\
1869
you were debugging a file, the file is closed and gdb no longer accesses it.");
1870
 
1871
  add_com ("signal", class_run, signal_command,
1872
           "Continue program giving it signal specified by the argument.\n\
1873
An argument of \"0\" means continue program without giving it a signal.");
1874
 
1875
  add_com ("stepi", class_run, stepi_command,
1876
           "Step one instruction exactly.\n\
1877
Argument N means do this N times (or till program stops for another reason).");
1878
  add_com_alias ("si", "stepi", class_alias, 0);
1879
 
1880
  add_com ("nexti", class_run, nexti_command,
1881
           "Step one instruction, but proceed through subroutine calls.\n\
1882
Argument N means do this N times (or till program stops for another reason).");
1883
  add_com_alias ("ni", "nexti", class_alias, 0);
1884
 
1885
  add_com ("finish", class_run, finish_command,
1886
           "Execute until selected stack frame returns.\n\
1887
Upon return, the value returned is printed and put in the value history.");
1888
 
1889
  add_com ("next", class_run, next_command,
1890
           "Step program, proceeding through subroutine calls.\n\
1891
Like the \"step\" command as long as subroutine calls do not happen;\n\
1892
when they do, the call is treated as one instruction.\n\
1893
Argument N means do this N times (or till program stops for another reason).");
1894
  add_com_alias ("n", "next", class_run, 1);
1895
  if (xdb_commands)
1896
    add_com_alias ("S", "next", class_run, 1);
1897
 
1898
  add_com ("step", class_run, step_command,
1899
           "Step program until it reaches a different source line.\n\
1900
Argument N means do this N times (or till program stops for another reason).");
1901
  add_com_alias ("s", "step", class_run, 1);
1902
 
1903
  c = add_com ("until", class_run, until_command,
1904
               "Execute until the program reaches a source line greater than the current\n\
1905
or a specified line or address or function (same args as break command).\n\
1906
Execution will also stop upon exit from the current stack frame.");
1907
  c->completer = location_completer;
1908
  add_com_alias ("u", "until", class_run, 1);
1909
 
1910
  c = add_com ("jump", class_run, jump_command,
1911
               "Continue program being debugged at specified line or address.\n\
1912
Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
1913
for an address to start at.");
1914
  c->completer = location_completer;
1915
 
1916
  if (xdb_commands)
1917
    {
1918
      c = add_com ("go", class_run, go_command,
1919
                   "Usage: go <location>\n\
1920
Continue program being debugged, stopping at specified line or \n\
1921
address.\n\
1922
Give as argument either LINENUM or *ADDR, where ADDR is an \n\
1923
expression for an address to start at.\n\
1924
This command is a combination of tbreak and jump.");
1925
      c->completer = location_completer;
1926
    }
1927
 
1928
  if (xdb_commands)
1929
    add_com_alias ("g", "go", class_run, 1);
1930
 
1931
  add_com ("continue", class_run, continue_command,
1932
           "Continue program being debugged, after signal or breakpoint.\n\
1933
If proceeding from breakpoint, a number N may be used as an argument,\n\
1934
which means to set the ignore count of that breakpoint to N - 1 (so that\n\
1935
the breakpoint won't break until the Nth time it is reached).");
1936
  add_com_alias ("c", "cont", class_run, 1);
1937
  add_com_alias ("fg", "cont", class_run, 1);
1938
 
1939
  c = add_com ("run", class_run, run_command,
1940
           "Start debugged program.  You may specify arguments to give it.\n\
1941
Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
1942
Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
1943
With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
1944
To cancel previous arguments and run with no arguments,\n\
1945
use \"set args\" without arguments.");
1946
  c->completer = filename_completer;
1947
  add_com_alias ("r", "run", class_run, 1);
1948
  if (xdb_commands)
1949
    add_com ("R", class_run, run_no_args_command,
1950
             "Start debugged program with no arguments.");
1951
 
1952
  add_com ("interrupt", class_run, interrupt_target_command,
1953
           "Interrupt the execution of the debugged program.");
1954
 
1955
  add_info ("registers", nofp_registers_info,
1956
            "List of integer registers and their contents, for selected stack frame.\n\
1957
Register name as argument means describe only that register.");
1958
  add_info_alias ("r", "registers", 1);
1959
 
1960
  if (xdb_commands)
1961
    add_com ("lr", class_info, nofp_registers_info,
1962
             "List of integer registers and their contents, for selected stack frame.\n\
1963
  Register name as argument means describe only that register.");
1964
  add_info ("all-registers", all_registers_info,
1965
            "List of all registers and their contents, for selected stack frame.\n\
1966
Register name as argument means describe only that register.");
1967
 
1968
  add_info ("program", program_info,
1969
            "Execution status of the program.");
1970
 
1971
  add_info ("float", float_info,
1972
            "Print the status of the floating point unit\n");
1973
 
1974
  set_inferior_args (xstrdup (""));     /* Initially no args */
1975
  inferior_environ = make_environ ();
1976
  init_environ (inferior_environ);
1977
}

powered by: WebSVN 2.1.0

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