Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3551 → Rev 3552

/branches/dynload/uspace/lib/rtld/module.c
135,7 → 135,7
m->bias = 0x20000;
printf("filename:'%s'\n", name_buf);
 
rc = elf_load_file(name_buf, m->bias, &info);
rc = elf_load_file(name_buf, m->bias, ELDF_RW, &info);
if (rc < 0) {
printf("Failed to load '%s'\n", name_buf);
exit(1);
/branches/dynload/uspace/lib/rtld/rtld.c
52,7 → 52,7
void _rtld_main(void)
{
static module_t prog;
module_t *rtld;
// module_t *rtld;
 
printf("Hello, world! (from rtld)\n");
 
63,9 → 63,9
*/
 
/* rtld_dynamic and rtld->bias were filled out by the bootstrap code */
rtld = &runtime_env.rtld;
printf("Parse rtld .dynamic section at 0x%x\n", runtime_env.rtld_dynamic);
dynamic_parse(runtime_env.rtld_dynamic, rtld->bias, &rtld->dyn);
// rtld = &runtime_env.rtld;
// printf("Parse rtld .dynamic section at 0x%x\n", runtime_env.rtld_dynamic);
// dynamic_parse(runtime_env.rtld_dynamic, rtld->bias, &rtld->dyn);
 
printf("Parse program .dynamic section at 0x%x\n", __pcb->dynamic);
dynamic_parse(__pcb->dynamic, 0, &prog.dyn);
75,7 → 75,7
/* Initialize list of loaded modules */
list_initialize(&runtime_env.modules_head);
list_append(&prog.modules_link, &runtime_env.modules_head);
list_append(&rtld->modules_link, &runtime_env.modules_head);
// list_append(&rtld->modules_link, &runtime_env.modules_head);
 
/* Pointer to program module. Used as root of the dependency graph */
runtime_env.program = &prog;
/branches/dynload/uspace/lib/rtld/Makefile
37,8 → 37,10
include $(LIBC_PREFIX)/Makefile.toolchain
include arch/$(ARCH)/Makefile.inc
 
CFLAGS += -Iinclude -I../../srv/loader/include -fPIC -O0 -ggdb
LFLAGS += -shared --no-undefined -soname rtld.so
#CFLAGS += -Iinclude -I../../srv/loader/include -fPIC -O0 -ggdb
#LFLAGS += -shared --no-undefined -soname rtld.so
CFLAGS += -Iinclude -I../../srv/loader/include -O0 -ggdb
LFLAGS +=
 
LIBS = $(LIBC_PREFIX)/libc.pic.a $(SOFTINT_PREFIX)/libsoftint.pic.a
DEFS += -DRELEASE=\"$(RELEASE)\"
54,7 → 56,7
## Sources
#
 
OUTPUT = rtld.so
OUTPUT = rtld
GENERIC_SOURCES = \
rtld.c \
elf_load.c \
/branches/dynload/uspace/lib/rtld/arch/ia32/_link.ld.in
6,7 → 6,7
}
 
SECTIONS {
. = 0x1000;
. = 0x40001000;
 
.init ALIGN(0x1000) : SUBALIGN(0x1000) {
*(.init);
/branches/dynload/uspace/lib/rtld/arch/ia32/src/runtime.c
58,20 → 58,20
void __attribute__ ((__regparm__ (1)))
*___tls_get_addr(tls_index *ti);
 
void __attribute__ ((__regparm__ (1)))
*___tls_get_addr(tls_index *ti)
{
size_t tls_size;
uint8_t *tls;
//void __attribute__ ((__regparm__ (1)))
// *___tls_get_addr(tls_index *ti)
//{
// size_t tls_size;
// uint8_t *tls;
//
// /* Calculate size of TLS block */
// tls_size = ALIGN_UP(&_tbss_end - &_tdata_start, &_tls_alignment);
//
// /* The TLS block is just before TCB */
// tls = (uint8_t *)__tcb_get() - tls_size;
//
// return tls + ti->ti_offset;
//}
 
/* Calculate size of TLS block */
tls_size = ALIGN_UP(&_tbss_end - &_tdata_start, &_tls_alignment);
 
/* The TLS block is just before TCB */
tls = (uint8_t *)__tcb_get() - tls_size;
 
return tls + ti->ti_offset;
}
 
/** @}
*/
/branches/dynload/uspace/lib/rtld/arch/ia32/src/bootstrap.c
105,7 → 105,7
rel_entries = 0;
jmp_rel_table = 0;
jmp_rel_entries = 0;
 
/*
i = 0;
while (dynamic[i].d_tag != 0) {
dptr = (void *)(dynamic[i].d_un.d_val + bias);
114,9 → 114,9
switch (dynamic[i].d_tag) {
case DT_PLTRELSZ: jmp_rel_entries = dval/8; break;
case DT_JMPREL: jmp_rel_table = dptr; break;
case DT_PLTGOT:
case DT_PLTGOT:*/
/* GOT address */
got = dptr; break;
/*got = dptr; break;
case DT_SYMTAB: sym_table = dptr; break;
case DT_REL: rel_table = dptr; break;
case DT_RELSZ: rel_entries = dval / 8; break;
125,7 → 125,7
 
++i;
}
*/
// kputint(1);
// kputint((unsigned)sym_table);
// kputint((unsigned)rel_table);
133,7 → 133,7
 
/* Now relocate all our dynsyms */
// kputint(-1);
/*
for (i=0; i<rel_entries; i++) {
kputint(i);
r_offset = rel_table[i].r_offset;
174,9 → 174,9
break;
}
}
 
*/
kputint(-1);
/*
for (i=0; i<jmp_rel_entries; i++) {
kputint(i);
r_offset = jmp_rel_table[i].r_offset;
217,7 → 217,7
break;
}
}
 
*/
kputint(-1);
kputint(0x42);