]> git.baikalelectronics.ru Git - uboot.git/commitdiff
sandbox: Add a way to specify the sandbox executable
authorSimon Glass <sjg@chromium.org>
Fri, 21 Oct 2022 00:23:02 +0000 (18:23 -0600)
committerTom Rini <trini@konsulko.com>
Mon, 31 Oct 2022 15:02:44 +0000 (11:02 -0400)
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>
arch/sandbox/cpu/start.c
arch/sandbox/include/asm/state.h

index 642be164a39e640e67a5996726dbb1d22ec7dba4..622df41f54cfbbbdd9c8c1d22e440a1e3fc2a9b1 100644 (file)
@@ -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)
 {
index fd42daad51c2653e99da2ce4edfa4a84ec629481..49ea483d332bfc3a5a910d98e7b592f3b98ff1a6 100644 (file)
@@ -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 */