diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
index 9de71bb2b4ff21d210950f555b12d52121293866..57d04a45b22b7edf813629bbff4bb7c6e5bef255 100644
--- a/arch/sandbox/cpu/os.c
+++ b/arch/sandbox/cpu/os.c
@@ -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)
diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c
index 36dfc0a408e960cc2dde7723f14cfc3c4a2a1e58..aad3b8b14758b1cd3926119dbf7157a0bbdd2d52 100644
--- a/arch/sandbox/cpu/start.c
+++ b/arch/sandbox/cpu/start.c
@@ -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);
 
diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c
index a145808a52d43c350b7b568d9678fe102bf4d662..59adad653c2a9f59741ec0276363ea73eee2a3b2 100644
--- a/arch/sandbox/cpu/state.c
+++ b/arch/sandbox/cpu/state.c
@@ -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));
diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h
index 56bd9a07b62c7e95292f5767d3c7f0e6bb79ab0b..d17a82e90fcaab037057531ffef881e41b85525b 100644
--- a/arch/sandbox/include/asm/state.h
+++ b/arch/sandbox/include/asm/state.h
@@ -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 */