sandbox: remove ram buffer file when U-Boot is loaded by SPL
authorPatrick Delaunay <patrick.delaunay@st.com>
Fri, 20 Nov 2020 08:48:33 +0000 (09:48 +0100)
committerSimon Glass <sjg@chromium.org>
Tue, 5 Jan 2021 19:24:41 +0000 (12:24 -0700)
Update management of "--rm_memory" sandbox's option and force
this option when U-Boot is loaded by SPL in os_spl_to_uboot()
and remove the ram file after reading in main() as described
in option help message: "Remove memory file after reading".

This patch avoids that the file "/tmp/u-boot.mem.XXXXXX" [created in
os_jump_to_file() when U-Boot is loaded by SPL] is never deleted
because state_uninit() is not called after U-Boot execution
(CtrlC or with running pytest for example).

This issue is reproduced by
> build-sandbox_spl/spl/u-boot-spl
  and CtrlC in U-Bot console

> make qcheck

One temp file is created after each SPL and U-Boot execution
(7 tims in qcheck after test_handoff.py, test_ofplatdata.py,
 test_spl.py execution).

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/os.c
arch/sandbox/cpu/start.c
arch/sandbox/cpu/state.c

index b56fa04..80996a9 100644 (file)
@@ -790,6 +790,11 @@ int os_find_u_boot(char *fname, int maxlen)
 
 int os_spl_to_uboot(const char *fname)
 {
+       struct sandbox_state *state = state_get_current();
+
+       printf("%s\n", __func__);
+       /* U-Boot will delete ram buffer after read: "--rm_memory"*/
+       state->ram_buf_rm = true;
        return os_jump_to_file(fname);
 }
 
index fe494ae..8322ed7 100644 (file)
@@ -457,6 +457,13 @@ int main(int argc, char *argv[])
        if (os_parse_args(state, argc, argv))
                return 1;
 
+       /* Remove old memory file if required */
+       if (state->ram_buf_rm && state->ram_buf_fname) {
+               os_unlink(state->ram_buf_fname);
+               state->write_ram_buf = false;
+               state->ram_buf_fname = NULL;
+       }
+
        ret = sandbox_read_state(state, state->state_fname);
        if (ret)
                goto err;
index 59f37fa..b2901b7 100644 (file)
@@ -415,10 +415,6 @@ int state_uninit(void)
                }
        }
 
-       /* Remove old memory file if required */
-       if (state->ram_buf_rm && state->ram_buf_fname)
-               os_unlink(state->ram_buf_fname);
-
        /* Delete this at the last moment so as not to upset gdb too much */
        if (state->jumped_fname)
                os_unlink(state->jumped_fname);