[PATCH v3 25/43] sandbox: Add a way to specify the sandbox executable

Simon Glass sjg at chromium.org
Fri Oct 21 02:23:02 CEST 2022


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 at chromium.org>
---

(no changes since v1)

 arch/sandbox/cpu/start.c         | 30 ++++++++++++++++++++++++++++++
 arch/sandbox/include/asm/state.h |  3 ++-
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c
index 642be164a39..622df41f54c 100644
--- a/arch/sandbox/cpu/start.c
+++ b/arch/sandbox/cpu/start.c
@@ -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)
 {
diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h
index fd42daad51c..49ea483d332 100644
--- a/arch/sandbox/include/asm/state.h
+++ b/arch/sandbox/include/asm/state.h
@@ -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 */
-- 
2.38.0.135.g90850a2211-goog



More information about the U-Boot mailing list