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; }
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; }
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); }