Beispiel #1
0
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;
}
Beispiel #2
0
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;
}