Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3154 → Rev 3155

/branches/dynload/uspace/app/iloader/main.c
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);