sandbox: Add a way to specify the sandbox executable
At present the sandbox executable is assumed to be arg[0] but this only works for a single jump (e.g. from SPL to U-Boot). Add a new arg to solve this issue, along with a detailed comment. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
830690d2ed
commit
b2d93c6aaa
2 changed files with 32 additions and 1 deletions
|
@ -244,6 +244,36 @@ static int sandbox_cmdline_cb_jump(struct sandbox_state *state,
|
|||
}
|
||||
SANDBOX_CMDLINE_OPT_SHORT(jump, 'j', 1, "Jumped from previous U-Boot");
|
||||
|
||||
static int sandbox_cmdline_cb_program(struct sandbox_state *state,
|
||||
const char *arg)
|
||||
{
|
||||
/*
|
||||
* Record the program name to use when jumping to future phases. This
|
||||
* is the original executable which holds all the phases. We need to
|
||||
* use this instead of argv[0] since each phase is started by
|
||||
* extracting a particular binary from the full program, then running
|
||||
* it. Therefore in that binary, argv[0] contains only the
|
||||
* current-phase executable.
|
||||
*
|
||||
* For example, sandbox TPL may be started using image file:
|
||||
*
|
||||
* ./image.bin
|
||||
*
|
||||
* but then TPL needs to run VPL, which it does by extracting the VPL
|
||||
* image from the image.bin file.
|
||||
*
|
||||
* ./temp-vpl
|
||||
*
|
||||
* When VPL runs it needs access to the original image.bin so it can
|
||||
* extract the next phase (SPL). This works if we use '-f image.bin'
|
||||
* when starting the original image.bin file.
|
||||
*/
|
||||
state->prog_fname = arg;
|
||||
|
||||
return 0;
|
||||
}
|
||||
SANDBOX_CMDLINE_OPT_SHORT(program, 'p', 1, "U-Boot program name");
|
||||
|
||||
static int sandbox_cmdline_cb_memory(struct sandbox_state *state,
|
||||
const char *arg)
|
||||
{
|
||||
|
|
|
@ -71,7 +71,8 @@ struct sandbox_state {
|
|||
const char *parse_err; /* Error to report from parsing */
|
||||
int argc; /* Program arguments */
|
||||
char **argv; /* Command line arguments */
|
||||
const char *jumped_fname; /* Jumped from previous U_Boot */
|
||||
const char *jumped_fname; /* Jumped from previous U-Boot */
|
||||
const char *prog_fname; /* U-Boot executable filename */
|
||||
uint8_t *ram_buf; /* Emulated RAM buffer */
|
||||
unsigned long ram_size; /* Size of RAM buffer */
|
||||
const char *ram_buf_fname; /* Filename to use for RAM buffer */
|
||||
|
|
Loading…
Reference in a new issue