コード例 #1
0
ファイル: taskC.c プロジェクト: TonyLianLong/os
int run_program(char *filename,uint32_t limit4k){
	uint8_t *file_buffer;
	uint8_t file;
	uint32_t task_id;
	int loadelf_return;
	file_t fileinfo;
	entry_t entry;
	fileinfo = file_info(filename);
	uint8_t *task_base_address;
	if(fileinfo.status != 0){
		print_string("Read file failed.");
		return -1;
	}
	file_buffer = malloc(fileinfo.item.size);
	if(file_buffer == NULL){
		return -3;
	}
	file = read_file(filename,(uint8_t *)file_buffer,fileinfo.item.size);
	if(file != 0){
		print_string("Read file failed.");
		return -2;
	}
	entry = get_elf_entry((uint8_t *)file_buffer);
	free(file_buffer);
	if(limit4k > 0){
		task_base_address = (uint8_t *)malloc(limit4k*4096);
		if(task_base_address == NULL){
			return -3;
		}
		if(loadelf_return = loadelf((uint8_t *)file_buffer,(uint8_t *)task_base_address,fileinfo.item.size)){
			return -3-loadelf_return;
		}
		task_id = new_task((uint32_t)task_base_address,limit4k,entry,limit4k*4096);
	}else{
		task_base_address = (uint8_t *)malloc(DEFAULT_TASK_LIMIT_4K*4096);
		if(task_base_address == NULL){
			return -3;
		}
		print_hex((uint32_t)task_base_address);
		if(loadelf_return = loadelf((uint8_t *)file_buffer,(uint8_t *)task_base_address,fileinfo.item.size)){
			return -3-loadelf_return;
		}
		task_id = new_task((uint32_t)task_base_address,DEFAULT_TASK_LIMIT_4K,entry,DEFAULT_TASK_LIMIT_4K*4096);
	}
	return task_id;
}
コード例 #2
0
ファイル: loadelf.c プロジェクト: tommythorn/multisim
void loadelfs(memory_t *m, int n, char *name[], elf_info_t *last_info)
{
    for (int i = 0; i < n; ++i)
        if (loadelf(m, name[i], last_info)) {
            fprintf(stderr, "error: loading %s failed", name[i]);
            exit(1);
        }
}