Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3552 → Rev 3551

/branches/dynload/uspace/srv/loader/main.c
231,7 → 231,7
 
// printf("Load program '%s'\n", pathname);
 
rc = elf_load_file(pathname, 0, 0, &prog_info);
rc = elf_load_file(pathname, 0, &prog_info);
if (rc < 0) {
printf("failed to load program\n");
ipc_answer_0(rid, EINVAL);
254,7 → 254,7
}
 
printf("Load dynamic linker '%s'\n", prog_info.interp);
rc = elf_load_file(prog_info.interp, RTLD_BIAS, 0, &interp_info);
rc = elf_load_file(prog_info.interp, RTLD_BIAS, &interp_info);
if (rc < 0) {
printf("failed to load dynamic linker\n");
ipc_answer_0(rid, EINVAL);
/branches/dynload/uspace/srv/loader/elf_load.c
99,8 → 99,7
*
* @return EOK on success or negative error code.
*/
int elf_load_file(char *file_name, size_t so_bias, eld_flags_t flags,
elf_info_t *info)
int elf_load_file(char *file_name, size_t so_bias, elf_info_t *info)
{
elf_ld_t elf;
 
117,7 → 116,6
 
elf.fd = fd;
elf.info = info;
elf.flags = flags;
 
rc = elf_load(&elf, so_bias);
 
309,8 → 307,8
return load_segment(elf, entry);
break;
case PT_INTERP:
/* Assume silently interp == "/lib/rtld" */
elf->info->interp = "/lib/rtld";
/* Assume silently interp == "/lib/rtld.so" */
elf->info->interp = "/lib/rtld.so";
break;
case PT_DYNAMIC:
case PT_SHLIB:
427,13 → 425,7
dp += now;
}
 
/*
* The caller wants to modify the segments first. He will then
* need to set the right access mode and ensure SMC coherence.
*/
if ((elf->flags & ELDF_RW) != 0) return EE_OK;
 
printf("set area flags to %d\n", flags);
// printf("set area flags to %d\n", flags);
rc = as_area_change_flags((uint8_t *)entry->p_vaddr + bias, flags);
if (rc != 0) {
printf("failed to set memory area flags\n");
/branches/dynload/uspace/srv/loader/include/elf_load.h
42,11 → 42,6
 
#include "elf.h"
 
typedef enum {
/** Leave all segments in RW access mode. */
ELDF_RW = 1
} eld_flags_t;
 
/**
* Some data extracted from the headers are stored here
*/
71,9 → 66,6
/** Difference between run-time addresses and link-time addresses */
uintptr_t bias;
 
/** Flags passed to the ELF loader. */
eld_flags_t flags;
 
/** A copy of the ELF file header */
elf_header_t *header;
 
81,8 → 73,7
elf_info_t *info;
} elf_ld_t;
 
int elf_load_file(char *file_name, size_t so_bias, eld_flags_t flags,
elf_info_t *info);
int elf_load_file(char *file_name, size_t so_bias, elf_info_t *info);
void elf_run(elf_info_t *info, pcb_t *pcb);
void elf_create_pcb(elf_info_t *info, pcb_t *pcb);