gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 19 Mar 2012 18:19:26 +0000 (18:19 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 19 Mar 2012 18:19:26 +0000 (18:19 +0000)
* NEWS: Describe new options --init-command=FILE, -ix and
--init-eval-command=COMMAND, -iex.
* main.c (struct cmdarg): New enum items CMDARG_INIT_FILE and
CMDARG_INIT_COMMAND.
(captured_main): New enum items OPT_IX and OPT_IEX.  Add
"init-command", "init-eval-command", "ix" and "iex" to the variable
long_options.  Handle OPT_IX and OPT_IEX.  Process them from CMDARG_VEC.
New comment for CMDARG_FILE and CMDARG_COMMAND processing.
(print_gdb_help): Describe --init-command=FILE, -ix and
--init-eval-command=COMMAND, -iex.

gdb/doc/
* gdb.texinfo (File Options): Describe --init-command=FILE, -ix and
--init-eval-command=COMMAND, -iex.
(Startup): Describe -iex and -ix.  Simplify the example
for "set auto-load-scripts off".

gdb/testsuite/
* gdb.gdb/selftest.exp (do_steps_and_nexts): New entry
for cmdarg_vec = NULL.  Remove entries for cmdsize = 1, cmdarg = and
ncmd = 0.  New entry for VEC_cleanup cmdarg_s.

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/main.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.gdb/selftest.exp

index 31ecb29c8868d6c3a52850f4fe109bcee5618cf6..d9b07b043fa8b1fcea33597d3e8f96a9d66a17d2 100644 (file)
@@ -1,3 +1,16 @@
+2012-03-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * NEWS: Describe new options --init-command=FILE, -ix and
+       --init-eval-command=COMMAND, -iex.
+       * main.c (struct cmdarg): New enum items CMDARG_INIT_FILE and
+       CMDARG_INIT_COMMAND.
+       (captured_main): New enum items OPT_IX and OPT_IEX.  Add
+       "init-command", "init-eval-command", "ix" and "iex" to the variable
+       long_options.  Handle OPT_IX and OPT_IEX.  Process them from CMDARG_VEC.
+       New comment for CMDARG_FILE and CMDARG_COMMAND processing.
+       (print_gdb_help): Describe --init-command=FILE, -ix and
+       --init-eval-command=COMMAND, -iex.
+
 2012-03-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Code cleanup.
index e6bf59c19961ba6193a9d3e289d29f1013752555..d23a773d1bc9c886c1921f7ca44c833224193fd2 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -118,6 +118,13 @@ QProgramSignals:
   Specify the signals which the remote stub may pass to the debugged
   program without GDB involvement.
 
+* New command line options
+
+--init-command=FILE, -ix          Like --command, -x but execute it
+                                  before loading inferior.
+--init-eval-command=COMMAND, -iex Like --eval-command=COMMAND, -ex but
+                                  execute it before loading inferior.
+
 *** Changes in GDB 7.4
 
 * GDB now handles ambiguous linespecs more consistently; the existing
index cb6d0e987eb807835bde3aed2becfd560a879d7b..92e3e1bfa662fec037437d0aec69e629f2b87ff7 100644 (file)
@@ -1,3 +1,10 @@
+2012-03-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.texinfo (File Options): Describe --init-command=FILE, -ix and
+       --init-eval-command=COMMAND, -iex.
+       (Startup): Describe -iex and -ix.  Simplify the example
+       for "set auto-load-scripts off".
+
 2012-03-16  Gary Benson  <gbenson@redhat.com>
 
        PR breakpoints/10738
index 56bf5d54bebd6025985e3286c9800805d3d6da58..677af3bc5f74b05fc030ad2066353248f43e94b2 100644 (file)
@@ -990,6 +990,22 @@ also be interleaved with @samp{-command} as required.
    -x setbreakpoints -ex 'run' a.out
 @end smallexample
 
+@item -init-command @var{file}
+@itemx -ix @var{file}
+@cindex @code{--init-command}
+@cindex @code{-ix}
+Execute commands from file @var{file} before loading gdbinit files or the
+inferior.
+@xref{Startup}.
+
+@item -init-eval-command @var{command}
+@itemx -iex @var{command}
+@cindex @code{--init-eval-command}
+@cindex @code{-iex}
+Execute a single @value{GDBN} command before loading gdbinit files or the
+inferior.
+@xref{Startup}.
+
 @item -directory @var{directory}
 @itemx -d @var{directory}
 @cindex @code{--directory}
@@ -1241,6 +1257,13 @@ Here's the description of what @value{GDBN} does during session startup:
 Sets up the command interpreter as specified by the command line
 (@pxref{Mode Options, interpreter}).
 
+@item
+Executes commands and command files specified by the @samp{-iex} and
+@samp{-ix} options in their specified order.  Usually you should use the
+@samp{-ex} and @samp{-x} options instead, but this way you can apply
+settings before @value{GDBN} init files get executed and before inferior
+gets loaded.
+
 @item
 @cindex init file
 Reads the system-wide @dfn{init file} (if @option{--with-system-gdbinit} was
@@ -1275,14 +1298,11 @@ If you wish to disable the auto-loading during startup,
 you must do something like the following:
 
 @smallexample
-$ gdb -ex "set auto-load-scripts off" -ex "file myprogram"
+$ gdb -iex "set auto-load-scripts off" myprogram
 @end smallexample
 
-The following does not work because the auto-loading is turned off too late:
-
-@smallexample
-$ gdb -ex "set auto-load-scripts off" myprogram
-@end smallexample
+Option @samp{-ex} does not work because the auto-loading is then turned
+off too late.
 
 @item
 Executes commands and command files specified by the @samp{-ex} and
index f564fec25a3f9a9b207afca051d557f856f39cdb..e528cd18adf6823483e800906f7d083177d7ac2b 100644 (file)
@@ -247,7 +247,13 @@ typedef struct cmdarg {
     CMDARG_FILE,
 
     /* Option type -ex.  */
-    CMDARG_COMMAND
+    CMDARG_COMMAND,
+
+    /* Option type -ix.  */
+    CMDARG_INIT_FILE,
+    
+    /* Option type -iex.  */
+    CMDARG_INIT_COMMAND
   } type;
 
   /* Value of this option - filename or the GDB command itself.  String memory
@@ -394,7 +400,9 @@ captured_main (void *data)
       OPT_STATISTICS,
       OPT_TUI,
       OPT_NOWINDOWS,
-      OPT_WINDOWS
+      OPT_WINDOWS,
+      OPT_IX,
+      OPT_IEX
     };
     static struct option long_options[] =
     {
@@ -434,6 +442,10 @@ captured_main (void *data)
       {"version", no_argument, &print_version, 1},
       {"x", required_argument, 0, 'x'},
       {"ex", required_argument, 0, 'X'},
+      {"init-command", required_argument, 0, OPT_IX},
+      {"init-eval-command", required_argument, 0, OPT_IEX},
+      {"ix", required_argument, 0, OPT_IX},
+      {"iex", required_argument, 0, OPT_IEX},
 #ifdef GDBTK
       {"tclcommand", required_argument, 0, 'z'},
       {"enable-external-editor", no_argument, 0, 'y'},
@@ -557,6 +569,19 @@ captured_main (void *data)
              VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
            }
            break;
+         case OPT_IX:
+           {
+             struct cmdarg cmdarg = { CMDARG_INIT_FILE, optarg };
+
+             VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+           }
+           break;
+         case OPT_IEX:
+           {
+             struct cmdarg cmdarg = { CMDARG_INIT_COMMAND, optarg };
+
+             VEC_safe_push (cmdarg_s, cmdarg_vec, &cmdarg);
+           }
            break;
          case 'B':
            batch_flag = batch_silent = 1;
@@ -809,6 +834,20 @@ captured_main (void *data)
   quit_pre_print = error_pre_print;
   warning_pre_print = _("\nwarning: ");
 
+  /* Process '-ix' and '-iex' options early.  */
+  for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
+    switch (cmdarg_p->type)
+    {
+      case CMDARG_INIT_FILE:
+        catch_command_errors (source_script, cmdarg_p->string,
+                             !batch_flag, RETURN_MASK_ALL);
+       break;
+      case CMDARG_INIT_COMMAND:
+        catch_command_errors (execute_command, cmdarg_p->string,
+                             !batch_flag, RETURN_MASK_ALL);
+       break;
+    }
+
   /* Read and execute the system-wide gdbinit file, if it exists.
      This is done *before* all the command line arguments are
      processed; it sets global parameters, which are independent of
@@ -911,6 +950,7 @@ captured_main (void *data)
   ALL_OBJFILES (objfile)
     load_auto_scripts_for_objfile (objfile);
 
+  /* Process '-x' and '-ex' options.  */
   for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
     switch (cmdarg_p->type)
     {
@@ -993,6 +1033,8 @@ Options:\n\n\
                      Execute a single GDB command.\n\
                      May be used multiple times and in conjunction\n\
                      with --command.\n\
+  --init-command=FILE, -ix Like -x but execute it before loading inferior.\n\
+  --init-eval-command=COMMAND, -iex Like -ex but before loading inferior.\n\
   --core=COREFILE    Analyze the core dump COREFILE.\n\
   --pid=PID          Attach to running process PID.\n\
 "), stream);
index f2ea686eb42b5919bc0164b6115fef158300c1af..2a8bf9d0919fa303d609279f2d48a6c27d50f218 100644 (file)
@@ -1,3 +1,9 @@
+2012-03-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.gdb/selftest.exp (do_steps_and_nexts): New entry
+       for cmdarg_vec = NULL.  Remove entries for cmdsize = 1, cmdarg = and
+       ncmd = 0.  New entry for VEC_cleanup cmdarg_s.
+
 2012-03-19  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
        * gdb.base/cond-eval-mode.exp: Fix the anticipated warning string.
index 1ffa94524e13174e5961b449f7d1d9f2abe6b862..7645caf9892acb1bf0b1ceea17f22e4b119de932 100644 (file)
@@ -88,6 +88,10 @@ proc do_steps_and_nexts {} {
                set description "step over ttyarg initialization"
                set command "step"
            }
+           -re ".*cmdarg_vec = NULL.*$gdb_prompt $" {
+               set description "step over cmdarg_vec initialization"
+               set command "step"
+           }
            -re ".*pre_stat_chain = make_command_stats_cleanup.*$gdb_prompt $" {
                set description "next over make_command_stats_cleanup and everything it calls"
                set command "next"
@@ -124,18 +128,6 @@ proc do_steps_and_nexts {} {
                set description "next over conditional stack alignment alloca"
                set command "next"
            }
-           -re ".*cmdsize = 1.*$gdb_prompt $" {
-               set description "step over cmdsize initialization"
-               set command "next"
-           }
-           -re ".*cmdarg = .* xmalloc.*$gdb_prompt $" {
-               set description "next over cmdarg initialization via xmalloc"
-               set command "next"
-           }
-           -re ".*ncmd = 0.*$gdb_prompt $" {
-               set description "next over ncmd initialization"
-               set command "next"
-           }
            -re ".*dirsize = 1.*$gdb_prompt $" {
                set description "next over dirsize initialization"
                set command "next"
@@ -159,6 +151,10 @@ proc do_steps_and_nexts {} {
                set description "next over textdomain PACKAGE"
                set command "next"
            }
+           -re ".*VEC_cleanup .cmdarg_s.*$gdb_prompt $" {
+               set description "next over cmdarg_s VEC_cleanup"
+               set command "next"
+           }
            -re "\[0-9\]+\[\t \]+\{\r\n$gdb_prompt $" {
                set description "step over initial brace"
                set command "step"