示例#1
0
文件: state.c 项目: ehamine/u-boot
int state_uninit(void)
{
    int err;

    state = &main_state;

    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");
            return err;
        }
    }

    if (state->write_state) {
        if (sandbox_write_state(state, state->state_fname)) {
            printf("Failed to write sandbox state\n");
            return -1;
        }
    }

    /* 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));

    return 0;
}
示例#2
0
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[5];
	char **argv = state->argv;
#ifdef DEBUG
	int argc, i;
#endif

	err = make_exec(fname, dest, size);
	if (err)
		return err;

	strcpy(mem_fname, "/tmp/u-boot.mem.XXXXXX");
	fd = mkstemp(mem_fname);
	if (fd < 0)
		return -ENOENT;
	close(fd);
	err = os_write_ram_buf(mem_fname);
	if (err)
		return err;

	os_fd_restore();

	extra_args[0] = "-j";
	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)
		return err;

#ifdef DEBUG
	for (i = 0; argv[i]; i++)
		printf("%d %s\n", i, argv[i]);
#endif

	if (state_uninit())
		os_exit(2);

	err = execv(fname, argv);
	free(argv);
	if (err)
		return err;

	return unlink(fname);
}