]> git.sur5r.net Git - u-boot/commitdiff
sandbox: Add options to clean up temporary files
authorSimon Glass <sjg@chromium.org>
Thu, 27 Feb 2014 20:26:23 +0000 (13:26 -0700)
committerSimon Glass <sjg@chromium.org>
Tue, 18 Mar 2014 02:05:49 +0000 (20:05 -0600)
When jumping from one sandbox U-Boot to another in sandbox, the RAM buffer
is preserved in the jump by using a temporary file. Add an option to tell
the receiving U-Boot to remove this file when it is no longer needed.

Similarly the old U-Boot image is left behind in this case. We cannot delete
it immediately since gdb cannot then find its debug symbols. Delete it just
before exiting.

Together these changes ensure that temporary files are removed both for
memory and U-Boot.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/os.c
arch/sandbox/cpu/start.c
arch/sandbox/cpu/state.c
arch/sandbox/include/asm/state.h

index 9de71bb2b4ff21d210950f555b12d52121293866..57d04a45b22b7edf813629bbff4bb7c6e5bef255 100644 (file)
@@ -488,7 +488,7 @@ int os_jump_to_image(const void *dest, int size)
        struct sandbox_state *state = state_get_current();
        char fname[30], mem_fname[30];
        int fd, err;
-       const char *extra_args[4];
+       const char *extra_args[5];
        char **argv = state->argv;
 #ifdef DEBUG
        int argc, i;
@@ -513,6 +513,7 @@ int os_jump_to_image(const void *dest, int size)
        extra_args[1] = fname;
        extra_args[2] = "-m";
        extra_args[3] = mem_fname;
+       extra_args[4] = "--rm_memory";
        err = add_args(&argv, extra_args,
                       sizeof(extra_args) / sizeof(extra_args[0]));
        if (err)
index 36dfc0a408e960cc2dde7723f14cfc3c4a2a1e58..aad3b8b14758b1cd3926119dbf7157a0bbdd2d52 100644 (file)
@@ -110,14 +110,8 @@ SANDBOX_CMDLINE_OPT_SHORT(interactive, 'i', 0, "Enter interactive mode");
 static int sandbox_cmdline_cb_jump(struct sandbox_state *state,
                                   const char *arg)
 {
-       state->jumped = 1;
-
-       /*
-        * TODO(sjg@chromium.org): Note this causes problems for gdb which
-        * wants to read debug data from the image.
-        *
-        * os_unlink(arg);
-        */
+       /* Remember to delete this U-Boot image later */
+       state->jumped_fname = arg;
 
        return 0;
 }
@@ -142,6 +136,15 @@ static int sandbox_cmdline_cb_memory(struct sandbox_state *state,
 SANDBOX_CMDLINE_OPT_SHORT(memory, 'm', 1,
                          "Read/write ram_buf memory contents from file");
 
+static int sandbox_cmdline_cb_rm_memory(struct sandbox_state *state,
+                                       const char *arg)
+{
+       state->ram_buf_rm = true;
+
+       return 0;
+}
+SANDBOX_CMDLINE_OPT(rm_memory, 0, "Remove memory file after reading");
+
 static int sandbox_cmdline_cb_state(struct sandbox_state *state,
                                    const char *arg)
 {
@@ -229,6 +232,10 @@ int main(int argc, char *argv[])
        if (ret)
                goto err;
 
+       /* Remove old memory file if required */
+       if (state->ram_buf_rm && state->ram_buf_fname)
+               os_unlink(state->ram_buf_fname);
+
        /* Do pre- and post-relocation init */
        board_init_f(0);
 
index a145808a52d43c350b7b568d9678fe102bf4d662..59adad653c2a9f59741ec0276363ea73eee2a3b2 100644 (file)
@@ -365,7 +365,7 @@ int state_uninit(void)
 
        state = &main_state;
 
-       if (state->write_ram_buf) {
+       if (state->write_ram_buf && !state->ram_buf_rm) {
                err = os_write_ram_buf(state->ram_buf_fname);
                if (err) {
                        printf("Failed to write RAM buffer\n");
@@ -380,6 +380,10 @@ int state_uninit(void)
                }
        }
 
+       /* Delete this at the last moment so as not to upset gdb too much */
+       if (state->jumped_fname)
+               os_unlink(state->jumped_fname);
+
        if (state->state_fdt)
                os_free(state->state_fdt);
        memset(state, '\0', sizeof(*state));
index 56bd9a07b62c7e95292f5767d3c7f0e6bb79ab0b..d17a82e90fcaab037057531ffef881e41b85525b 100644 (file)
@@ -54,10 +54,11 @@ struct sandbox_state {
        const char *parse_err;          /* Error to report from parsing */
        int argc;                       /* Program arguments */
        char **argv;                    /* Command line arguments */
-       bool jumped;                    /* Jumped from previous U_Boot */
+       const char *jumped_fname;       /* Jumped from previous U_Boot */
        uint8_t *ram_buf;               /* Emulated RAM buffer */
        unsigned int ram_size;          /* Size of RAM buffer */
        const char *ram_buf_fname;      /* Filename to use for RAM buffer */
+       bool ram_buf_rm;                /* Remove RAM buffer file after read */
        bool write_ram_buf;             /* Write RAM buffer on exit */
        const char *state_fname;        /* File containing sandbox state */
        void *state_fdt;                /* Holds saved state for sandbox */