sim: split program path out of argv vector
We use the program argv to both find the program to run (argv[0]) and to hold the arguments to the program. Most of the time this is fine, but if we want to let programs specify argv[0] independently (which is possible in standard *NIX programs), this double duty doesn't work. So let's split the path to the program to run out into a separate field by itself. This simplifies the various sim_open funcs too. By itself, this code is more of a logical cleanup than something that is super useful. But it will open up customization of argv[0] in a follow up commit. Split the changes to make it easier to review.
This commit is contained in:
parent
7b2ec4e46f
commit
e8f20a28b1
31 changed files with 40 additions and 119 deletions
|
@ -339,10 +339,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
if (sim_cpu_alloc_all (sd, 1) != SIM_RC_OK
|
||||
|| sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK
|
||||
|| sim_parse_args (sd, argv) != SIM_RC_OK
|
||||
|| sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK
|
||||
|| sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK
|
||||
|| sim_config (sd) != SIM_RC_OK
|
||||
|| sim_post_argv_init (sd) != SIM_RC_OK)
|
||||
{
|
||||
|
|
|
@ -825,10 +825,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -1710,10 +1710,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -740,10 +740,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -147,10 +147,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
if (sim_parse_args (sd, argv) != SIM_RC_OK)
|
||||
goto error;
|
||||
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
goto error;
|
||||
|
||||
if (sim_config (sd) != SIM_RC_OK)
|
||||
|
|
|
@ -103,7 +103,7 @@ main (int argc, char **argv)
|
|||
if (prog_argv == NULL || *prog_argv == NULL)
|
||||
usage ();
|
||||
|
||||
name = *prog_argv;
|
||||
name = STATE_PROG_FILE (sd);
|
||||
|
||||
/* For simulators that don't open prog during sim_open() */
|
||||
if (prog_bfd == NULL)
|
||||
|
|
|
@ -151,6 +151,11 @@ struct sim_state {
|
|||
const char *model_name;
|
||||
#define STATE_MODEL_NAME(sd) ((sd)->model_name)
|
||||
|
||||
/* In standalone simulator, this is the program to run. Not to be confused
|
||||
with argv which are the strings passed to the program itself. */
|
||||
char *prog_file;
|
||||
#define STATE_PROG_FILE(sd) ((sd)->prog_file)
|
||||
|
||||
/* In standalone simulator, this is the program's arguments passed
|
||||
on the command line. */
|
||||
char **prog_argv;
|
||||
|
|
|
@ -604,7 +604,10 @@ sim_parse_args (SIM_DESC sd, char * const *argv)
|
|||
if (optc == -1)
|
||||
{
|
||||
if (STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE)
|
||||
STATE_PROG_ARGV (sd) = dupargv (argv + optind);
|
||||
{
|
||||
STATE_PROG_FILE (sd) = xstrdup (argv[optind]);
|
||||
STATE_PROG_ARGV (sd) = dupargv (argv + optind);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (optc == '?')
|
||||
|
|
|
@ -97,6 +97,7 @@ sim_state_free (SIM_DESC sd)
|
|||
SIM_STATE_FREE (sd);
|
||||
#endif
|
||||
|
||||
free (STATE_PROG_FILE (sd));
|
||||
free (sd);
|
||||
}
|
||||
|
||||
|
|
|
@ -423,10 +423,7 @@ sim_open (SIM_OPEN_KIND kind, struct host_callback_struct *cb,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -690,11 +690,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
|
|||
}
|
||||
|
||||
/* check for/establish the reference program image */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL),
|
||||
abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
/* When there's an error, sim_analyze_program has already output
|
||||
a message. Let's just clarify it, as "not an object file"
|
||||
|
@ -717,9 +713,9 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
|
|||
|
||||
if (abfd != NULL && bfd_get_arch (abfd) == bfd_arch_unknown)
|
||||
{
|
||||
if (STATE_PROG_ARGV (sd) != NULL)
|
||||
if (STATE_PROG_FILE (sd) != NULL)
|
||||
sim_io_eprintf (sd, "%s: `%s' is not a CRIS program\n",
|
||||
STATE_MY_NAME (sd), *STATE_PROG_ARGV (sd));
|
||||
STATE_MY_NAME (sd), STATE_PROG_FILE (sd));
|
||||
else
|
||||
sim_io_eprintf (sd, "%s: program to be run is not a CRIS program\n",
|
||||
STATE_MY_NAME (sd));
|
||||
|
|
|
@ -780,10 +780,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -111,10 +111,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -92,11 +92,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, bfd *abfd,
|
|||
sim_do_commandf (sd, "memory region 0,0x%x", FRV_DEFAULT_MEM_SIZE);
|
||||
|
||||
/* check for/establish the reference program image */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL),
|
||||
abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -842,10 +842,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
}
|
||||
|
||||
/* Check for/establish the reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -4755,10 +4755,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -93,11 +93,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
|
|||
sim_do_commandf (sd, "memory region 0x%x,0x%x", IQ2000_DATA_VALUE, IQ2000_DATA_MEM_SIZE);
|
||||
|
||||
/* check for/establish the reference program image */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL),
|
||||
abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -133,10 +133,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
|
|||
#endif
|
||||
|
||||
/* check for/establish the reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -98,11 +98,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
|
|||
sim_do_commandf (sd, "memory region 0,0x%x", M32R_DEFAULT_MEM_SIZE);
|
||||
|
||||
/* check for/establish the reference program image */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL),
|
||||
abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -436,10 +436,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -1371,10 +1371,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -429,10 +429,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -633,11 +633,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
}
|
||||
|
||||
/* check for/establish the a reference program image */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL),
|
||||
abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
sim_module_uninstall (sd);
|
||||
return 0;
|
||||
|
|
|
@ -268,11 +268,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
|
||||
|
||||
/* check for/establish the a reference program image */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL),
|
||||
abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
sim_module_uninstall (sd);
|
||||
return 0;
|
||||
|
|
|
@ -1226,10 +1226,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
sim_do_command(sd," memory region 0xE0000000,0x10000") ;
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -152,10 +152,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
sim_do_commandf (sd, "memory-region 0x90000,0x70000"); /* HIGH ROM. */
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
sim_state_free (sd);
|
||||
return 0;
|
||||
|
|
|
@ -201,10 +201,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
|
|||
}
|
||||
|
||||
/* Check for/establish the reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -772,10 +772,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
}
|
||||
|
||||
/* Check for/establish a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -94,10 +94,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -2367,10 +2367,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||
}
|
||||
|
||||
/* Check for/establish the a reference program image. */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL), abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
free_state (sd);
|
||||
return 0;
|
||||
|
|
|
@ -239,11 +239,7 @@ sim_open (SIM_OPEN_KIND kind,
|
|||
}
|
||||
|
||||
/* check for/establish the a reference program image */
|
||||
if (sim_analyze_program (sd,
|
||||
(STATE_PROG_ARGV (sd) != NULL
|
||||
? *STATE_PROG_ARGV (sd)
|
||||
: NULL),
|
||||
abfd) != SIM_RC_OK)
|
||||
if (sim_analyze_program (sd, STATE_PROG_FILE (sd), abfd) != SIM_RC_OK)
|
||||
{
|
||||
sim_module_uninstall (sd);
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue