mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-05 21:50:21 +08:00
Per-inferior args and tty and environment.
* infcmd.c (inferior_args): Rename to ... (inferior_args_scratch): ... this. (inferior_io_terminal): Rename to ... (inferior_io_terminal_scratch): ... this. (inferior_argc, inferior_argv): Remove. (set_inferior_io_terminal, get_inferior_io_terminal): Store inside current_inferior(). (set_inferior_tty_command, show_inferior_tty_command): New. (get_inferior_args, set_inferior_args): Store inside current_inferior(). (notice_args_set): Likewise and rename to... (set_args_command): ... this. (set_inferior_args_vector): Likewise. (notice_args_read): Rename to... (show_args_command): ...new. (tty_command): Remove. (run_command_1): Don't free old args, as they are freed by set_inferior_arg now. (run_no_args_command): Likewise. (inferior_environ): Remove. (run_command_1): Use environment of the current inferior. (environment_info, set_environment_command) (unset_environment_command, path_info, path_command): Likewise. (_initialize_infcmd): Adjust for function and variable renames. Do not init inferior_environ. * inferior.h (set_inferior_arg): Adjust prototype. (struct inferior): New fields args, argc, argv, terminal, environment. (inferior_environ): Remove declaration. * inferior.c (free_inferior): Free new fields. (add_inferior_silent): Initialize 'environment' field. * main.c (captured_main): Set arguments only after the initial inferior has been created. Set set_inferior_io_terminal, not tty_command. * mi/mi-main.c (mi_cmd_env_path): Use environment of the current inferior. (_initialize_mi_cmd_env): Adjust for disappearance of global inferior_environ. * solib.c (solib_find): Use environment of the current inferior.
This commit is contained in:
101
gdb/main.c
101
gdb/main.c
@ -631,54 +631,6 @@ extern int gdbtk_test (char *);
|
||||
use_windows = 0;
|
||||
}
|
||||
|
||||
if (set_args)
|
||||
{
|
||||
/* The remaining options are the command-line options for the
|
||||
inferior. The first one is the sym/exec file, and the rest
|
||||
are arguments. */
|
||||
if (optind >= argc)
|
||||
{
|
||||
fprintf_unfiltered (gdb_stderr,
|
||||
_("%s: `--args' specified but no program specified\n"),
|
||||
argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
symarg = argv[optind];
|
||||
execarg = argv[optind];
|
||||
++optind;
|
||||
set_inferior_args_vector (argc - optind, &argv[optind]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* OK, that's all the options. */
|
||||
|
||||
/* The first argument, if specified, is the name of the
|
||||
executable. */
|
||||
if (optind < argc)
|
||||
{
|
||||
symarg = argv[optind];
|
||||
execarg = argv[optind];
|
||||
optind++;
|
||||
}
|
||||
|
||||
/* If the user hasn't already specified a PID or the name of a
|
||||
core file, then a second optional argument is allowed. If
|
||||
present, this argument should be interpreted as either a
|
||||
PID or a core file, whichever works. */
|
||||
if (pidarg == NULL && corearg == NULL && optind < argc)
|
||||
{
|
||||
pid_or_core_arg = argv[optind];
|
||||
optind++;
|
||||
}
|
||||
|
||||
/* Any argument left on the command line is unexpected and
|
||||
will be ignored. Inform the user. */
|
||||
if (optind < argc)
|
||||
fprintf_unfiltered (gdb_stderr, _("\
|
||||
Excess command line arguments ignored. (%s%s)\n"),
|
||||
argv[optind],
|
||||
(optind == argc - 1) ? "" : " ...");
|
||||
}
|
||||
if (batch)
|
||||
quiet = 1;
|
||||
}
|
||||
@ -687,6 +639,57 @@ Excess command line arguments ignored. (%s%s)\n"),
|
||||
control of the console via the deprecated_init_ui_hook (). */
|
||||
gdb_init (argv[0]);
|
||||
|
||||
/* Now that gdb_init has created the initial inferior, we're in position
|
||||
to set args for that inferior. */
|
||||
if (set_args)
|
||||
{
|
||||
/* The remaining options are the command-line options for the
|
||||
inferior. The first one is the sym/exec file, and the rest
|
||||
are arguments. */
|
||||
if (optind >= argc)
|
||||
{
|
||||
fprintf_unfiltered (gdb_stderr,
|
||||
_("%s: `--args' specified but no program specified\n"),
|
||||
argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
symarg = argv[optind];
|
||||
execarg = argv[optind];
|
||||
++optind;
|
||||
set_inferior_args_vector (argc - optind, &argv[optind]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* OK, that's all the options. */
|
||||
|
||||
/* The first argument, if specified, is the name of the
|
||||
executable. */
|
||||
if (optind < argc)
|
||||
{
|
||||
symarg = argv[optind];
|
||||
execarg = argv[optind];
|
||||
optind++;
|
||||
}
|
||||
|
||||
/* If the user hasn't already specified a PID or the name of a
|
||||
core file, then a second optional argument is allowed. If
|
||||
present, this argument should be interpreted as either a
|
||||
PID or a core file, whichever works. */
|
||||
if (pidarg == NULL && corearg == NULL && optind < argc)
|
||||
{
|
||||
pid_or_core_arg = argv[optind];
|
||||
optind++;
|
||||
}
|
||||
|
||||
/* Any argument left on the command line is unexpected and
|
||||
will be ignored. Inform the user. */
|
||||
if (optind < argc)
|
||||
fprintf_unfiltered (gdb_stderr, _("\
|
||||
Excess command line arguments ignored. (%s%s)\n"),
|
||||
argv[optind],
|
||||
(optind == argc - 1) ? "" : " ...");
|
||||
}
|
||||
|
||||
/* Lookup gdbinit files. Note that the gdbinit file name may be overriden
|
||||
during file initialization, so get_init_files should be called after
|
||||
gdb_init. */
|
||||
@ -840,7 +843,7 @@ Can't attach to process and specify a core file at the same time."));
|
||||
}
|
||||
|
||||
if (ttyarg != NULL)
|
||||
catch_command_errors (tty_command, ttyarg, !batch, RETURN_MASK_ALL);
|
||||
set_inferior_io_terminal (ttyarg);
|
||||
|
||||
/* Error messages should no longer be distinguished with extra output. */
|
||||
error_pre_print = NULL;
|
||||
|
Reference in New Issue
Block a user