示例#1
0
static int cmd_sym_load_add(int clear, char **arg)
{
	FILE *in;
	char * path;

	if (clear && prompt_abort(MODIFY_SYMS))
		return 0;

	path = expand_tilde(*arg);
	if (!path)
		return -1;

	in = fopen(path, "rb");
	free(path);
	if (!in) {
		printc_err("sym: %s: %s\n", *arg, last_error());
		return -1;
	}

	if (clear) {
		stab_clear();
		unmark_modified(MODIFY_SYMS);
	} else {
		mark_modified(MODIFY_SYMS);
	}

	if (binfile_syms(in) < 0) {
		fclose(in);
		return -1;
	}

	fclose(in);

	return 0;
}
示例#2
0
文件: devcmd.c 项目: poelzi/mspdebug
static int cmd_prog(cproc_t cp, char **arg)
{
    device_t dev = cproc_device(cp);
    stab_t stab = cproc_stab(cp);
    FILE *in;
    struct prog_data prog;

    if (cproc_prompt_abort(cp, CPROC_MODIFY_SYMS))
        return 0;

    in = fopen(*arg, "r");
    if (!in) {
        fprintf(stderr, "prog: %s: %s\n", *arg, strerror(errno));
        return -1;
    }

    if (dev->ctl(dev, DEVICE_CTL_HALT) < 0) {
        fclose(in);
        return -1;
    }

    prog_init(&prog, dev);

    if (binfile_extract(in, prog_feed, &prog) < 0) {
        fclose(in);
        return -1;
    }

    if (binfile_info(in) & BINFILE_HAS_SYMS) {
        stab_clear(stab);
        binfile_syms(in, stab);
    }

    fclose(in);

    if (prog_flush(&prog) < 0)
        return -1;

    if (dev->ctl(dev, DEVICE_CTL_RESET) < 0) {
        fprintf(stderr, "prog: failed to reset after programming\n");
        return -1;
    }

    cproc_unmodify(cp, CPROC_MODIFY_SYMS);
    return 0;
}
示例#3
0
文件: env.c 项目: berkus/moto
void
moto_clearEnv(MotoEnv *env) {
    Enumeration *e;
    int size;
    //hset_free(env->ptrs);
    //mpool_free(env->mpool);

    /* Clear out the globals */
    e = stab_getKeys(env->globals);
    while (enum_hasNext(e)) {
        char* n = (char*)enum_next(e);
        MotoVar* var = stab_get(env->globals,n);

        if(env->mode != COMPILER_MODE) {
            moto_freeVal(env,var->vs);
        } else {
            opool_release(env->valpool,var->vs);
        }
        free(var);
    }
    enum_free(e);
    stab_clear(env->globals);

    /* Clear out the frames */
    size = vec_size(env->frames);
    while (--size >= 0) {
        MotoFrame *frame = (MotoFrame *)vec_get(env->frames, size);
        stack_free(frame->opstack);
        stab_free(frame->symtab);
        buf_free(frame->out);
        free(frame);
    }
    vec_clear(env->frames);

    e = stack_elements(env->scope);
    while (enum_hasNext(e)) {
        free(enum_next(e));
    }
    enum_free(e);

    stack_clear(env->scope);
    buf_clear(env->out);
    buf_clear(env->err);

    // stab_free(env->types);
    // ftab_free(env->ftable);
    // stab_free(env->rxcache);
    // stack_clear(env->callstack);
    sset_clear(env->errs);
    // sset_clear(env->uses);

    if (env->mode == COMPILER_MODE) {
        sset_free(env->includes);
        htab_free(env->fdefs);
        htab_free(env->adefs);
        buf_free(env->constantPool);
        buf_free(env->fcodebuffer);
        istack_free(env->scopeIDStack);
    }
    env->frameindex = -1;

    /* error stuff */
    env->meta.filename = env->filename;
    env->meta.caller = NULL;
    env->meta.macroname = NULL;
    env->meta.lineno = 1;

    env->errflag = 0;
    //free(env);
}