gdb: add setter/getter for inferior arguments

Add args/set_args to the inferior class, remove the set_inferior_args
and get_inferior_args functions, that would just be wrappers around
them.

Change-Id: If87d52f3402ce08be26c32897ae8915d9f6d1ea3
This commit is contained in:
Simon Marchi 2021-05-18 22:02:47 -04:00
parent a69e37dc2b
commit e51695253e
6 changed files with 40 additions and 39 deletions

View File

@ -49,7 +49,7 @@ elf_none_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd,
fname = lbasename (exe); fname = lbasename (exe);
psargs = std::string (exe); psargs = std::string (exe);
const char *infargs = get_inferior_args (); const char *infargs = current_inferior ()->args ();
if (infargs != nullptr) if (infargs != nullptr)
psargs += " " + std::string (infargs); psargs += " " + std::string (infargs);

View File

@ -684,7 +684,7 @@ fbsd_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
const char *fname = lbasename (get_exec_file (0)); const char *fname = lbasename (get_exec_file (0));
std::string psargs = fname; std::string psargs = fname;
const char *infargs = get_inferior_args (); const char *infargs = current_inferior ()->args ();
if (infargs != NULL) if (infargs != NULL)
psargs = psargs + " " + infargs; psargs = psargs + " " + infargs;

View File

@ -124,33 +124,12 @@ show_inferior_tty_command (struct ui_file *file, int from_tty,
"is \"%s\".\n"), inferior_tty); "is \"%s\".\n"), inferior_tty);
} }
const char *
get_inferior_args (void)
{
if (current_inferior ()->args == nullptr)
return "";
return current_inferior ()->args.get ();
}
/* Set the arguments for the current inferior. Ownership of
NEWARGS is not transferred. */
void
set_inferior_args (const char *newargs)
{
if (newargs != nullptr)
current_inferior ()->args = make_unique_xstrdup (newargs);
else
current_inferior ()->args.reset ();
}
void void
set_inferior_args_vector (int argc, char **argv) set_inferior_args_vector (int argc, char **argv)
{ {
gdb::array_view<char * const> args (argv, argc); gdb::array_view<char * const> args (argv, argc);
std::string n = construct_inferior_arguments (args); std::string n = construct_inferior_arguments (args);
set_inferior_args (n.c_str ()); current_inferior ()->set_args (n.c_str ());
} }
/* Notice when `set args' is run. */ /* Notice when `set args' is run. */
@ -160,7 +139,7 @@ set_args_command (const char *args, int from_tty, struct cmd_list_element *c)
{ {
/* CLI has assigned the user-provided value to inferior_args_scratch. /* CLI has assigned the user-provided value to inferior_args_scratch.
Now route it to current inferior. */ Now route it to current inferior. */
set_inferior_args (inferior_args_scratch); current_inferior ()->set_args (inferior_args_scratch);
} }
/* Notice when `show args' is run. */ /* Notice when `show args' is run. */
@ -171,7 +150,8 @@ show_args_command (struct ui_file *file, int from_tty,
{ {
/* Note that we ignore the passed-in value in favor of computing it /* Note that we ignore the passed-in value in favor of computing it
directly. */ directly. */
deprecated_show_value_hack (file, from_tty, c, get_inferior_args ()); deprecated_show_value_hack (file, from_tty, c,
current_inferior ()->args ());
} }
/* Set the inferior current working directory. If CWD is NULL, unset /* Set the inferior current working directory. If CWD is NULL, unset
@ -471,7 +451,7 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how)
/* If there were other args, beside '&', process them. */ /* If there were other args, beside '&', process them. */
if (args != NULL) if (args != NULL)
set_inferior_args (args); current_inferior ()->set_args (args);
if (from_tty) if (from_tty)
{ {
@ -480,13 +460,13 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how)
if (exec_file) if (exec_file)
uiout->field_string ("execfile", exec_file); uiout->field_string ("execfile", exec_file);
uiout->spaces (1); uiout->spaces (1);
uiout->field_string ("infargs", get_inferior_args ()); uiout->field_string ("infargs", current_inferior ()->args ());
uiout->text ("\n"); uiout->text ("\n");
uiout->flush (); uiout->flush ();
} }
run_target->create_inferior (exec_file, run_target->create_inferior (exec_file,
std::string (get_inferior_args ()), current_inferior ()->args (),
current_inferior ()->environment.envp (), current_inferior ()->environment.envp (),
from_tty); from_tty);
/* to_create_inferior should push the target, so after this point we /* to_create_inferior should push the target, so after this point we

View File

@ -204,10 +204,6 @@ extern void post_create_inferior (int from_tty);
extern void attach_command (const char *, int); extern void attach_command (const char *, int);
extern const char *get_inferior_args (void);
extern void set_inferior_args (const char *);
extern void set_inferior_args_vector (int, char **); extern void set_inferior_args_vector (int, char **);
extern void registers_info (const char *, int); extern void registers_info (const char *, int);
@ -446,6 +442,30 @@ public:
void set_tty (const char *terminal_name); void set_tty (const char *terminal_name);
const char *tty (); const char *tty ();
/* Set the argument string to use when running this inferior.
Either nullptr or an empty string can be used to represent "no
arguments". */
void set_args (const char *args)
{
if (args != nullptr && args[0] != '\0')
m_args = make_unique_xstrdup (args);
else
m_args.reset ();
};
/* Get the argument string to use when running this inferior.
The return value is always non-nullptr. No arguments is represented by
an empty string. */
const char *args () const
{
if (m_args == nullptr)
return "";
return m_args.get ();
}
/* Convenient handle (GDB inferior id). Unique across all /* Convenient handle (GDB inferior id). Unique across all
inferiors. */ inferiors. */
int num = 0; int num = 0;
@ -475,9 +495,6 @@ public:
/* The program space bound to this inferior. */ /* The program space bound to this inferior. */
struct program_space *pspace = NULL; struct program_space *pspace = NULL;
/* The arguments string to use when running. */
gdb::unique_xmalloc_ptr<char> args;
/* The current working directory that will be used when starting /* The current working directory that will be used when starting
this inferior. */ this inferior. */
gdb::unique_xmalloc_ptr<char> cwd; gdb::unique_xmalloc_ptr<char> cwd;
@ -569,6 +586,11 @@ private:
/* The list of continuations. */ /* The list of continuations. */
std::list<std::function<void ()>> m_continuations; std::list<std::function<void ()>> m_continuations;
/* The arguments string to use when running.
This is nullptr when there are not args. */
gdb::unique_xmalloc_ptr<char> m_args;
}; };
/* Keep a registry of per-inferior data-pointers required by other GDB /* Keep a registry of per-inferior data-pointers required by other GDB

View File

@ -1804,7 +1804,6 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
char filename[100]; char filename[100];
/* The basename of the executable. */ /* The basename of the executable. */
const char *basename; const char *basename;
const char *infargs;
/* Temporary buffer. */ /* Temporary buffer. */
char *tmpstr; char *tmpstr;
/* The valid states of a process, according to the Linux kernel. */ /* The valid states of a process, according to the Linux kernel. */
@ -1848,7 +1847,7 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
strncpy (p->pr_fname, basename, sizeof (p->pr_fname) - 1); strncpy (p->pr_fname, basename, sizeof (p->pr_fname) - 1);
p->pr_fname[sizeof (p->pr_fname) - 1] = '\0'; p->pr_fname[sizeof (p->pr_fname) - 1] = '\0';
infargs = get_inferior_args (); const char *infargs = current_inferior ()->args ();
/* The arguments of the program. */ /* The arguments of the program. */
std::string psargs = fname.get (); std::string psargs = fname.get ();

View File

@ -3613,7 +3613,7 @@ procfs_target::make_corefile_notes (bfd *obfd, int *note_size)
strncpy (psargs, get_exec_file (0), sizeof (psargs)); strncpy (psargs, get_exec_file (0), sizeof (psargs));
psargs[sizeof (psargs) - 1] = 0; psargs[sizeof (psargs) - 1] = 0;
inf_args = get_inferior_args (); inf_args = current_inferior ()->args ();
if (inf_args && *inf_args if (inf_args && *inf_args
&& (strlen (inf_args) && (strlen (inf_args)
< ((int) sizeof (psargs) - (int) strlen (psargs)))) < ((int) sizeof (psargs) - (int) strlen (psargs))))