aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcmd.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-05-18 21:36:42 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2021-07-23 15:38:54 -0400
commita69e37dc2b1dbb84a1ba924532cbaede648b69e8 (patch)
tree45cc2a1627d12639d6377b2185a0a26844effb53 /gdb/infcmd.c
parent5b8bf2e75ed61ff5bc9bb2cb9d4b8ed581ee6f19 (diff)
downloadgdb-a69e37dc2b1dbb84a1ba924532cbaede648b69e8.zip
gdb-a69e37dc2b1dbb84a1ba924532cbaede648b69e8.tar.gz
gdb-a69e37dc2b1dbb84a1ba924532cbaede648b69e8.tar.bz2
gdb: remove inferior::{argc,argv}
There are currently two states that the inferior args can be stored. The main one is the `args` field, where they are stored as a single string. The other one is the `argc`/`argv` fields. This last one is only used for arguments passed in GDB's command line. And the only outcome is that when get_inferior_args is called, `argc`/`argv` are serialized into `args`. So really, `argc`/`argv` is just a staging area before moving the arguments in `args`. Simplify this by only keeping the `args` field. Change set_inferior_args_vector to immediately serialize the arguments into `args`, work that would be done in get_inferior_args later anyway. The only time where this work would be "wasted" is when the user passes some arguments on the command line, but does not end up running the program. But that just seems unlikely. And it's not that much work. Change-Id: Ica0b9859397c095f6530350c8fb3c36905f2044a
Diffstat (limited to 'gdb/infcmd.c')
-rw-r--r--gdb/infcmd.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index a7b520c..0511595 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -127,16 +127,8 @@ show_inferior_tty_command (struct ui_file *file, int from_tty,
const char *
get_inferior_args (void)
{
- if (current_inferior ()->argc != 0)
- {
- gdb::array_view<char * const> args (current_inferior ()->argv,
- current_inferior ()->argc);
- std::string n = construct_inferior_arguments (args);
- set_inferior_args (n.c_str ());
- }
-
- if (current_inferior ()->args == NULL)
- current_inferior ()->args = make_unique_xstrdup ("");
+ if (current_inferior ()->args == nullptr)
+ return "";
return current_inferior ()->args.get ();
}
@@ -151,16 +143,14 @@ set_inferior_args (const char *newargs)
current_inferior ()->args = make_unique_xstrdup (newargs);
else
current_inferior ()->args.reset ();
-
- current_inferior ()->argc = 0;
- current_inferior ()->argv = 0;
}
void
set_inferior_args_vector (int argc, char **argv)
{
- current_inferior ()->argc = argc;
- current_inferior ()->argv = argv;
+ gdb::array_view<char * const> args (argv, argc);
+ std::string n = construct_inferior_arguments (args);
+ set_inferior_args (n.c_str ());
}
/* Notice when `set args' is run. */
@@ -490,15 +480,11 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how)
if (exec_file)
uiout->field_string ("execfile", exec_file);
uiout->spaces (1);
- /* We call get_inferior_args() because we might need to compute
- the value now. */
uiout->field_string ("infargs", get_inferior_args ());
uiout->text ("\n");
uiout->flush ();
}
- /* We call get_inferior_args() because we might need to compute
- the value now. */
run_target->create_inferior (exec_file,
std::string (get_inferior_args ()),
current_inferior ()->environment.envp (),