diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/sandbox/cpu/os.c | 3 | ||||
| -rw-r--r-- | arch/sandbox/cpu/start.c | 23 | ||||
| -rw-r--r-- | arch/sandbox/cpu/state.c | 6 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/state.h | 3 | 
4 files changed, 24 insertions, 11 deletions
| diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c index 9de71bb2b..57d04a45b 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 36dfc0a40..aad3b8b14 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 a145808a5..59adad653 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 56bd9a07b..d17a82e90 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 */ |