mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:49:54 +08:00
sim: run: fix crash in argc==0 error situation
The new argv processing code assumed that we were always passed a command line. If we weren't, make sure we don't crash before we get a chance to output an error message about incorrect usage.
This commit is contained in:
@ -615,16 +615,26 @@ sim_parse_args (SIM_DESC sd, char * const *argv)
|
|||||||
{
|
{
|
||||||
if (STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE)
|
if (STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE)
|
||||||
{
|
{
|
||||||
char **new_argv = dupargv (argv + optind);
|
char **new_argv;
|
||||||
|
|
||||||
STATE_PROG_FILE (sd) = xstrdup (argv[optind]);
|
free (STATE_PROG_FILE (sd));
|
||||||
if (STATE_PROG_ARGV0 (sd) != NULL)
|
STATE_PROG_FILE (sd) = NULL;
|
||||||
{
|
|
||||||
free (new_argv[0]);
|
new_argv = dupargv (argv + optind);
|
||||||
new_argv[0] = xstrdup (STATE_PROG_ARGV0 (sd));
|
|
||||||
}
|
|
||||||
freeargv (STATE_PROG_ARGV (sd));
|
freeargv (STATE_PROG_ARGV (sd));
|
||||||
STATE_PROG_ARGV (sd) = new_argv;
|
STATE_PROG_ARGV (sd) = new_argv;
|
||||||
|
|
||||||
|
/* Skip steps when argc == 0. */
|
||||||
|
if (argv[optind] != NULL)
|
||||||
|
{
|
||||||
|
STATE_PROG_FILE (sd) = xstrdup (argv[optind]);
|
||||||
|
|
||||||
|
if (STATE_PROG_ARGV0 (sd) != NULL)
|
||||||
|
{
|
||||||
|
free (new_argv[0]);
|
||||||
|
new_argv[0] = xstrdup (STATE_PROG_ARGV0 (sd));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user