*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / infcmd.c
index c0b2aea4b63ebb0ba0290dd5517c85ea10f07849..400ac552d2d789d2507e42ac4656d5a8a3ae7d72 100644 (file)
@@ -1,6 +1,6 @@
 /* Memory-access and commands for "inferior" process, for GDB.
    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001
+   1996, 1997, 1998, 1999, 2000, 2001, 2002
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -37,9 +37,7 @@
 #include "symfile.h"
 #include "objfiles.h"
 #include "completer.h"
-#ifdef UI_OUT
 #include "ui-out.h"
-#endif
 #include "event-top.h"
 #include "parser-defs.h"
 
@@ -250,7 +248,7 @@ notice_args_set (char *args, int from_tty, struct cmd_list_element *c)
 
 /* Notice when `show args' is run.  */
 static void
-notice_args_read (struct cmd_list_element *c)
+notice_args_read (char *args, int from_tty, struct cmd_list_element *c)
 {
   /* Might compute the value.  */
   get_inferior_args ();
@@ -391,17 +389,23 @@ Start it from the beginning? "))
 
   clear_breakpoint_hit_counts ();
 
-  exec_file = (char *) get_exec_file (0);
-
   /* Purge old solib objfiles. */
   objfile_purge_solibs ();
 
   do_run_cleanups (NULL);
 
-  /* The exec file is re-read every time we do a generic_mourn_inferior, so
-     we just have to worry about the symbol file.  */
+  /* The comment here used to read, "The exec file is re-read every
+     time we do a generic_mourn_inferior, so we just have to worry
+     about the symbol file."  The `generic_mourn_inferior' function
+     gets called whenever the program exits.  However, suppose the
+     program exits, and *then* the executable file changes?  We need
+     to check again here.  Since reopen_exec_file doesn't do anything
+     if the timestamp hasn't changed, I don't see the harm.  */
+  reopen_exec_file ();
   reread_symbols ();
 
+  exec_file = (char *) get_exec_file (0);
+
   /* We keep symbols from add-symbol-file, on the grounds that the
      user might want to add some symbols before running the program
      (right?).  But sometimes (dynamic loading where the user manually
@@ -442,7 +446,6 @@ Start it from the beginning? "))
 
   if (from_tty)
     {
-#ifdef UI_OUT
       ui_out_field_string (uiout, NULL, "Starting program");
       ui_out_text (uiout, ": ");
       if (exec_file)
@@ -453,17 +456,6 @@ Start it from the beginning? "))
       ui_out_field_string (uiout, "infargs", get_inferior_args ());
       ui_out_text (uiout, "\n");
       ui_out_flush (uiout);
-#else
-      puts_filtered ("Starting program: ");
-      if (exec_file)
-       puts_filtered (exec_file);
-      puts_filtered (" ");
-      /* We call get_inferior_args() because we might need to compute
-        the value now.  */
-      puts_filtered (get_inferior_args ());
-      puts_filtered ("\n");
-      gdb_flush (gdb_stdout);
-#endif
     }
 
   /* We call get_inferior_args() because we might need to compute
@@ -1147,14 +1139,11 @@ static void
 print_return_value (int structure_return, struct type *value_type)
 {
   struct value *value;
-#ifdef UI_OUT
   static struct ui_stream *stb = NULL;
-#endif /* UI_OUT */
 
   if (!structure_return)
     {
       value = value_being_returned (value_type, stop_registers, structure_return);
-#ifdef UI_OUT
       stb = ui_out_stream_new (uiout);
       ui_out_text (uiout, "Value returned is ");
       ui_out_field_fmt (uiout, "gdb-result-var", "$%d", record_latest_value (value));
@@ -1162,11 +1151,6 @@ print_return_value (int structure_return, struct type *value_type)
       value_print (value, stb->stream, 0, Val_no_prettyprint);
       ui_out_field_stream (uiout, "return-value", stb);
       ui_out_text (uiout, "\n");
-#else /* UI_OUT */
-      printf_filtered ("Value returned is $%d = ", record_latest_value (value));
-      value_print (value, gdb_stdout, 0, Val_no_prettyprint);
-      printf_filtered ("\n");
-#endif /* UI_OUT */
     }
   else
     {
@@ -1175,18 +1159,12 @@ print_return_value (int structure_return, struct type *value_type)
         initiate the call, as opposed to the call_function_by_hand case */
 #ifdef VALUE_RETURNED_FROM_STACK
       value = 0;
-#ifdef UI_OUT
       ui_out_text (uiout, "Value returned has type: ");
       ui_out_field_string (uiout, "return-type", TYPE_NAME (value_type));
       ui_out_text (uiout, ".");
       ui_out_text (uiout, " Cannot determine contents\n");
-#else /* UI_OUT */
-      printf_filtered ("Value returned has type: %s.", TYPE_NAME (value_type));
-      printf_filtered (" Cannot determine contents\n");
-#endif /* UI_OUT */
 #else
       value = value_being_returned (value_type, stop_registers, structure_return);
-#ifdef UI_OUT
       stb = ui_out_stream_new (uiout);
       ui_out_text (uiout, "Value returned is ");
       ui_out_field_fmt (uiout, "gdb-result-var", "$%d", record_latest_value (value));
@@ -1194,11 +1172,6 @@ print_return_value (int structure_return, struct type *value_type)
       value_print (value, stb->stream, 0, Val_no_prettyprint);
       ui_out_field_stream (uiout, "return-value", stb);
       ui_out_text (uiout, "\n");
-#else
-      printf_filtered ("Value returned is $%d = ", record_latest_value (value));
-      value_print (value, gdb_stdout, 0, Val_no_prettyprint);
-      printf_filtered ("\n");
-#endif
 #endif
     }
 }
@@ -1316,7 +1289,8 @@ finish_command (char *arg, int from_tty)
   if (from_tty)
     {
       printf_filtered ("Run till exit from ");
-      print_stack_frame (selected_frame, selected_frame_level, 0);
+      print_stack_frame (selected_frame,
+                        frame_relative_level (selected_frame), 0);
     }
 
   /* If running asynchronously and the target support asynchronous
@@ -1617,7 +1591,7 @@ do_registers_info (int regnum, int fpregs)
       print_spaces_filtered (15 - strlen (REGISTER_NAME (i)), gdb_stdout);
 
       /* Get the data in raw format.  */
-      if (read_relative_register_raw_bytes (i, raw_buffer))
+      if (! frame_register_read (selected_frame, i, raw_buffer))
        {
          printf_filtered ("*value not available*\n");
          continue;
@@ -1640,13 +1614,8 @@ do_registers_info (int regnum, int fpregs)
        {
          register int j;
 
-#ifdef INVALID_FLOAT
-         if (INVALID_FLOAT (virtual_buffer, REGISTER_VIRTUAL_SIZE (i)))
-           printf_filtered ("<invalid float>");
-         else
-#endif
-           val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
-                      gdb_stdout, 0, 1, 0, Val_pretty_default);
+         val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
+                    gdb_stdout, 0, 1, 0, Val_pretty_default);
 
          printf_filtered ("\t(raw 0x");
          for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
@@ -1712,7 +1681,7 @@ registers_info (char *addr_exp, int fpregs)
       if (*addr_exp >= '0' && *addr_exp <= '9')
        regnum = atoi (addr_exp);       /* Take a number */
       if (regnum >= numregs)   /* Bad name, or bad number */
-       error ("%.*s: invalid register", end - addr_exp, addr_exp);
+       error ("%.*s: invalid register", (int) (end - addr_exp), addr_exp);
 
     found:
       DO_REGISTERS_INFO (regnum, fpregs);
@@ -1857,13 +1826,13 @@ detach_command (char *args, int from_tty)
 
 /* Stop the execution of the target while running in async mode, in
    the backgound. */
-#ifdef UI_OUT
+
 void
 interrupt_target_command_wrapper (char *args, int from_tty)
 {
   interrupt_target_command (args, from_tty);
 }
-#endif
+
 static void
 interrupt_target_command (char *args, int from_tty)
 {
@@ -1878,11 +1847,7 @@ interrupt_target_command (char *args, int from_tty)
 static void
 float_info (char *addr_exp, int from_tty)
 {
-#ifdef FLOAT_INFO
-  FLOAT_INFO;
-#else
-  printf_filtered ("No floating point info available for this processor.\n");
-#endif
+  PRINT_FLOAT_INFO ();
 }
 \f
 /* ARGSUSED */
@@ -1901,17 +1866,17 @@ _initialize_infcmd (void)
 
   c = add_com ("tty", class_run, tty_command,
               "Set terminal for future runs of program being debugged.");
-  c->completer = filename_completer;
+  set_cmd_completer (c, filename_completer);
 
   c = add_set_cmd ("args", class_run, var_string_noescape,
                   (char *) &inferior_args,
                   "Set argument list to give program being debugged when it is started.\n\
 Follow this command with any number of args, to be passed to the program.",
                   &setlist);
-  c->completer = filename_completer;
-  c->function.sfunc = notice_args_set;
+  set_cmd_completer (c, filename_completer);
+  set_cmd_sfunc (c, notice_args_set);
   c = add_show_from_set (c, &showlist);
-  c->pre_show_hook = notice_args_read;
+  set_cmd_sfunc (c, notice_args_read);
 
   c = add_cmd
     ("environment", no_class, environment_info,
@@ -1919,17 +1884,17 @@ Follow this command with any number of args, to be passed to the program.",
 With an argument VAR, prints the value of environment variable VAR to\n\
 give the program being debugged.  With no arguments, prints the entire\n\
 environment to be given to the program.", &showlist);
-  c->completer = noop_completer;
+  set_cmd_completer (c, noop_completer);
 
   add_prefix_cmd ("unset", no_class, unset_command,
-                 "Complement to certain \"set\" commands",
+                 "Complement to certain \"set\" commands.",
                  &unsetlist, "unset ", 0, &cmdlist);
 
   c = add_cmd ("environment", class_run, unset_environment_command,
               "Cancel environment variable VAR for the program.\n\
 This does not affect the program until the next \"run\" command.",
               &unsetlist);
-  c->completer = noop_completer;
+  set_cmd_completer (c, noop_completer);
 
   c = add_cmd ("environment", class_run, set_environment_command,
               "Set environment variable value to give the program.\n\
@@ -1937,7 +1902,7 @@ Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
 VALUES of environment variables are uninterpreted strings.\n\
 This does not affect the program until the next \"run\" command.",
               &setlist);
-  c->completer = noop_completer;
+  set_cmd_completer (c, noop_completer);
 
   c = add_com ("path", class_files, path_command,
               "Add directory DIR(s) to beginning of search path for object files.\n\
@@ -1945,7 +1910,7 @@ $cwd in the path means the current working directory.\n\
 This path is equivalent to the $PATH shell variable.  It is a list of\n\
 directories, separated by colons.  These directories are searched to find\n\
 fully linked executable files and separately compiled object files as needed.");
-  c->completer = filename_completer;
+  set_cmd_completer (c, filename_completer);
 
   c = add_cmd ("paths", no_class, path_info,
               "Current search path for finding object files.\n\
@@ -1954,7 +1919,7 @@ This path is equivalent to the $PATH shell variable.  It is a list of\n\
 directories, separated by colons.  These directories are searched to find\n\
 fully linked executable files and separately compiled object files as needed.",
               &showlist);
-  c->completer = noop_completer;
+  set_cmd_completer (c, noop_completer);
 
   add_com ("attach", class_run, attach_command,
           "Attach to a process or file outside of GDB.\n\
@@ -2010,14 +1975,14 @@ Argument N means do this N times (or till program stops for another reason).");
               "Execute until the program reaches a source line greater than the current\n\
 or a specified line or address or function (same args as break command).\n\
 Execution will also stop upon exit from the current stack frame.");
-  c->completer = location_completer;
+  set_cmd_completer (c, location_completer);
   add_com_alias ("u", "until", class_run, 1);
 
   c = add_com ("jump", class_run, jump_command,
               "Continue program being debugged at specified line or address.\n\
 Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
 for an address to start at.");
-  c->completer = location_completer;
+  set_cmd_completer (c, location_completer);
 
   if (xdb_commands)
     {
@@ -2028,7 +1993,7 @@ address.\n\
 Give as argument either LINENUM or *ADDR, where ADDR is an \n\
 expression for an address to start at.\n\
 This command is a combination of tbreak and jump.");
-      c->completer = location_completer;
+      set_cmd_completer (c, location_completer);
     }
 
   if (xdb_commands)
@@ -2049,7 +2014,7 @@ Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
 With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
 To cancel previous arguments and run with no arguments,\n\
 use \"set args\" without arguments.");
-  c->completer = filename_completer;
+  set_cmd_completer (c, filename_completer);
   add_com_alias ("r", "run", class_run, 1);
   if (xdb_commands)
     add_com ("R", class_run, run_no_args_command,
This page took 0.027844 seconds and 4 git commands to generate.