78,7 → 78,6 |
size_t len; |
char *name_buf; |
|
printf("iloader_set_pathname\n"); |
if (!ipc_data_write_receive(&callid, &len)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
85,8 → 84,6 |
return; |
} |
|
printf("alloc %d bytes\n", len+1); |
|
name_buf = malloc(len + 1); |
if (!name_buf) { |
ipc_answer_0(callid, ENOMEM); |
94,9 → 91,7 |
return; |
} |
|
printf("write_finalize\n"); |
ipc_data_write_finalize(callid, name_buf, len); |
printf("answer\n"); |
ipc_answer_0(rid, EOK); |
|
if (pathname != NULL) { |
122,20 → 117,27 |
elf_info_t prog_info; |
elf_info_t interp_info; |
|
printf("Load program '%s'\n", pathname); |
// printf("Load program '%s'\n", pathname); |
|
rc = elf_load_file(pathname, 0, &prog_info); |
if (rc < 0) { |
printf("failed to load program\n"); |
ipc_answer_0(rid, EINVAL); |
return 1; |
} |
|
printf("Create PCB\n"); |
if (elf_create_pcb(&prog_info) < 0) return 1; |
// printf("Create PCB\n"); |
if (elf_create_pcb(&prog_info) < 0) { |
ipc_answer_0(rid, ENOMEM); |
return 1; |
} |
|
if (prog_info.interp == NULL) { |
/* Statically linked program */ |
printf("Run statically linked program\n"); |
// printf("Run statically linked program\n"); |
// printf("entry point: 0x%llx\n", prog_info.entry); |
ipc_answer_0(rid, EOK); |
close_console(); |
elf_run(&prog_info); |
return 0; |
} |
144,6 → 146,7 |
rc = elf_load_file("/rtld.so", RTLD_BIAS, &interp_info); |
if (rc < 0) { |
printf("failed to load dynamic linker\n"); |
ipc_answer_0(rid, EINVAL); |
return 1; |
} |
|
155,8 → 158,13 |
pcb->rtld_bias = RTLD_BIAS; |
|
printf("run dynamic linker\n"); |
printf("entry point: 0x%llx\n", interp_info.entry); |
close_console(); |
|
ipc_answer_0(rid, EOK); |
elf_run(&interp_info); |
|
/* Not reached(?) */ |
return 0; |
} |
|
176,8 → 184,8 |
|
while (1) { |
callid = async_get_call(&call); |
printf("received call from phone %d, method=%d\n", |
call.in_phone_hash, IPC_GET_METHOD(call)); |
// printf("received call from phone %d, method=%d\n", |
// call.in_phone_hash, IPC_GET_METHOD(call)); |
switch (IPC_GET_METHOD(call)) { |
case LOADER_SET_PATHNAME: |
iloader_set_pathname(callid, &call); |