* infrun.c: Include main.h.
(print_stop_reason): Set return_child_result_value on exit.
* main.c (return_child_result): New variable.
(return_child_result_value): Likewise.
(captured_main): Add option --return-child-result.
Replace call to target_detach and exit (in batch mode) with quit_force.
(print_gdb_help): Add option --return-child-result.
* top.c: Include main.h.
(quit_force): Return child result if appropriate.
* main.h (return_child_result, return_child_result_value): Declare.
* Makefile.in (top.o, infrun.o): Add main.h to dependencies.
doc/
* gdb.texinfo (Choosing modes): Add --return-child-result.
+2005-11-14 Andrew Stubbs <andrew.stubbs@st.com>
+
+ * infrun.c: Include main.h.
+ (print_stop_reason): Set return_child_result_value on exit.
+ * main.c (return_child_result): New variable.
+ (return_child_result_value): Likewise.
+ (captured_main): Add option --return-child-result.
+ Replace call to target_detach and exit (in batch mode) with quit_force.
+ (print_gdb_help): Add option --return-child-result.
+ * top.c: Include main.h.
+ (quit_force): Return child result if appropriate.
+ * main.h (return_child_result, return_child_result_value): Declare.
+ * Makefile.in (top.o, infrun.o): Add main.h to dependencies.
+
2005-11-13 Daniel Jacobowitz <dan@codesourcery.com>
Merge from mainline:
$(gdbcore_h) $(gdbcmd_h) $(cli_script_h) $(target_h) $(gdbthread_h) \
$(annotate_h) $(symfile_h) $(top_h) $(inf_loop_h) $(regcache_h) \
$(value_h) $(observer_h) $(language_h) $(solib_h) $(gdb_assert_h) \
- $(mi_common_h)
+ $(mi_common_h) $(main_h)
inftarg.o: inftarg.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \
$(gdbcore_h) $(command_h) $(gdb_stat_h) $(observer_h) $(gdb_wait_h) \
$(inflow_h)
$(annotate_h) $(completer_h) $(top_h) $(version_h) $(serial_h) \
$(doublest_h) $(gdb_assert_h) $(readline_h) $(readline_history_h) \
$(event_top_h) $(gdb_string_h) $(gdb_stat_h) $(ui_out_h) \
- $(cli_out_h)
+ $(cli_out_h) $(main_h)
tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(gdbtypes_h) \
$(expression_h) $(gdbcmd_h) $(value_h) $(target_h) $(language_h) \
$(gdb_string_h) $(inferior_h) $(tracepoint_h) $(remote_h) \
+2005-11-14 Andrew Stubbs <andrew.stubbs@st.com>
+
+ * gdb.texinfo (Choosing modes): Add --return-child-result.
+
2005-11-01 Andrew Stubbs <andrew.stubbs@st.com>
* gdb.texinfo (Choosing modes): Add --batch-silent.
Note that targets that give their output via @value{GDBN}, as opposed to
writing directly to @code{stdout}, will also be made silent.
+@item -return-child-result
+@cindex @code{--return-child-result}
+The return code from @value{GDBN} will be the return code from the child
+process (the process being debugged), with the following exceptions:
+
+@itemize @bullet
+@item
+@value{GDBN} exits abnormally. E.g., due to an incorrect argument or an
+internal error. In this case the exit code is the same as it would have been
+without @samp{-return-child-result}.
+@item
+The user quits with an explicit value. E.g., @samp{quit 1}.
+@item
+The child process never runs, or is not allowed to terminate, in which case
+the exit code will be -1.
+@end itemize
+
+This option is useful in conjunction with @samp{-batch} or @samp{-batch-silent},
+when @value{GDBN} is being used as a remote program loader or simulator
+interface.
+
@item -nowindows
@itemx -nw
@cindex @code{--nowindows}
#include "observer.h"
#include "language.h"
#include "solib.h"
+#include "main.h"
#include "gdb_assert.h"
#include "mi/mi-common.h"
async_reason_lookup (EXEC_ASYNC_EXITED_NORMALLY));
ui_out_text (uiout, "\nProgram exited normally.\n");
}
+ /* Support the --return-child-result option. */
+ return_child_result_value = stop_info;
break;
case SIGNAL_RECEIVED:
/* Signal received. The signal table tells us to print about
/* Support for the --batch-silent option. */
int batch_silent = 0;
+/* Support for --return-child-result option.
+ Set the default to -1 to return error in the case
+ that the program does not run or does not complete. */
+int return_child_result = 0;
+int return_child_result_value = -1;
+
/* Whether to enable writing into executable and core files */
extern int write_files;
{"write", no_argument, &write_files, 1},
{"args", no_argument, &set_args, 1},
{"l", required_argument, 0, 'l'},
+ {"return-child-result", no_argument, &return_child_result, 1},
{0, no_argument, 0, 0}
};
if (batch)
{
- if (attach_flag)
- /* Either there was a problem executing the command in the
- batch file aborted early, or the batch file forgot to do an
- explicit detach. Explicitly detach the inferior ensuring
- that there are no zombies. */
- target_detach (NULL, 0);
-
/* We have hit the end of the batch file. */
- exit (0);
+ quit_force (NULL, 0);
}
/* Do any host- or target-specific hacks. This is used for i960 targets
-b BAUDRATE Set serial port baud rate used for remote debugging.\n\
--batch Exit after processing options.\n\
--batch-silent As for --batch, but suppress all gdb stdout output.\n\
+ --return-child-result\n\
+ GDB exit code will be the child's exit code.\n\
--cd=DIR Change current directory to DIR.\n\
--command=FILE Execute GDB commands from FILE.\n\
--core=COREFILE Analyze the core dump COREFILE.\n\
extern int gdb_main (struct captured_main_args *);
+/* From main.c. */
+extern int return_child_result;
+extern int return_child_result_value;
+
#endif
#include "serial.h"
#include "doublest.h"
#include "gdb_assert.h"
+#include "main.h"
/* readline include files */
#include "readline/readline.h"
exit_code = (int) value_as_long (val);
}
+ else if (return_child_result)
+ exit_code = return_child_result_value;
qt.args = args;
qt.from_tty = from_tty;