Compiler *createCompiler(int argc, char** argv) { // not enough arguments just throw an error if (argc <= 1) { errorMessage("No input files"); return NULL; } Compiler *self = safeMalloc(sizeof(*self)); self->lexer = NULL; self->parser = NULL; self->generatorLLVM = NULL; self->semantic = NULL; char *ccEnv = getenv("CC"); if (ccEnv != NULL && strcmp(ccEnv, "")) COMPILER = ccEnv; self->sourceFiles = setup_arguments(argc, argv); if (self->sourceFiles->size == 0) { destroyCompiler(self); return NULL; } return self; }
int boxer_main(int argc, char *argv[]) { int ret; uintptr_t sp; struct elf_data data; if (argc < 2) return -EINVAL; /* XXX needed. Probably does some libc stuff */ printf(" \b"); // printf("%s\n", environ[0]); ret = dune_init(0); if (ret) { printf("sandbox: failed to initialize Dune\n"); return ret; } ret = dune_enter(); if (ret) { printf("sandbox: failed to enter Dune mode\n"); return ret; } ret = load_elf(argv[1], &data); if (ret) return ret; // printf("sandbox: entry addr is %lx\n", data.entry); dune_set_user_fs(0); // default starting fs ret = trap_init(); if (ret) { printf("failed to initialize trap handlers\n"); return ret; } ret = umm_alloc_stack(&sp); if (ret) { printf("failed to alloc stack\n"); return ret; } sp = setup_arguments(sp, argv[1], &argv[2], environ, data); if (!sp) { printf("failed to setup arguments\n"); return -EINVAL; } ret = run_app(sp, data.entry); return ret; }