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