sandbox: Add a way to specify the sandbox executable
[platform/kernel/u-boot.git] / arch / sandbox / cpu / start.c
index 642be16..622df41 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)
 {