/branches/dynload/uspace/lib/rtld/module.c |
---|
149,6 → 149,12 |
exit(1); |
} |
if (info.dynamic == NULL) { |
printf("Error: '%s' is not a dynamically-linked object.\n", |
name_buf); |
exit(1); |
} |
/* Pending relocation. */ |
m->relocated = false; |
/branches/dynload/uspace/lib/rtld/symbol.c |
---|
69,8 → 69,7 |
char *s_name; |
elf_word bucket; |
// module_name = m->dyn.soname; |
DPRINTF("def_find_in_module('%s', %s)\n", name, module_name); |
DPRINTF("def_find_in_module('%s', %s)\n", name, m->dyn.soname); |
sym_table = m->dyn.sym_tab; |
nbucket = m->dyn.hash[0]; |
/branches/dynload/uspace/lib/rtld/arch/ia32/src/reloc.c |
---|
124,7 → 124,7 |
break; |
case R_386_PC32: |
DPRINTF("fixup R_386_PC32 (b+v+a)\n"); |
DPRINTF("fixup R_386_PC32 (b+v+a-p)\n"); |
*r_ptr += sym_addr - (uint32_t) r_ptr; |
break; |
/branches/dynload/uspace/lib/libtest/_link.ld.in |
---|
2,13 → 2,15 |
PHDRS { |
text PT_LOAD FLAGS(5); |
interp PT_INTERP; |
data PT_LOAD FLAGS(6); |
dynamic PT_DYNAMIC; |
} |
SECTIONS { |
. = 0x1000; |
. = 0x1000 + SIZEOF_HEADERS; |
.init ALIGN(0x1000) : SUBALIGN(0x1000) { |
.init : { |
*(.init); |
} :text |
.text : { |
17,7 → 19,7 |
*(.rodata*); |
} :text |
.rel.plt ALIGN(0x1000) : { |
.rel.plt : { |
*(.rel.plt); |
} |
/* |
28,34 → 30,36 |
*(.rel.*); |
} :text |
.plt ALIGN(0x1000) : SUBALIGN(0x1000) { |
.plt : { |
*(.plt); |
} :text |
.dynamic ALIGN(0x1000) : { |
.dynamic : { |
*(.dynamic); |
} :text |
} :text :dynamic |
.dynsym ALIGN(0x1000) : { |
.dynsym : { |
*(.dynsym); |
} :text |
.dynstr ALIGN(0x1000) : { |
.dynstr : { |
*(.dynstr); |
} :text |
.data ALIGN(0x1000) : SUBALIGN(0x1000) { |
. = . + 0x1000; |
.data : { |
*(.data); |
} :data |
.data.rel ALIGN(0x1000) : { |
.data.rel : { |
*(.data.rel); |
} :data |
.got ALIGN(0x1000) : SUBALIGN(0x1000) { |
.got : { |
*(.got); |
} :data |
.got.plt ALIGN(0x1000) : SUBALIGN(0x1000) { |
.got.plt : { |
*(.got.plt); |
} :data |
63,7 → 67,7 |
*(COMMON); |
*(.bss); |
} :data |
/* |
.tdata : { |
_tdata_start = .; |
*(.tdata); |
75,7 → 79,7 |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
*/ |
. = ALIGN(0x1000); |
_heap = .; |
} |
/branches/dynload/uspace/lib/libc/shared/arch/ia32/_link.ld.in |
---|
5,6 → 5,7 |
text PT_LOAD FLAGS(5); |
interp PT_INTERP; |
data PT_LOAD FLAGS(6); |
dynamic PT_DYNAMIC; |
} |
SECTIONS { |
38,11 → 39,6 |
*(.plt); |
} :text |
.dynamic : { |
*(.dynamic); |
} :text |
.dynsym : { |
*(.dynsym); |
} :text |
53,6 → 49,10 |
. = . + 0x1000; |
.dynamic : { |
*(.dynamic); |
} :data :dynamic |
.data : { |
*(.data); |
} :data |
/branches/dynload/uspace/lib/libc/shared/arch/ia32/_lib.ld.in |
---|
2,7 → 2,9 |
PHDRS { |
text PT_LOAD FLAGS(5); |
interp PT_INTERP; |
data PT_LOAD FLAGS(6); |
dynamic PT_DYNAMIC; |
} |
SECTIONS { |
34,7 → 36,7 |
.dynamic : { |
*(.dynamic); |
} :text |
} :text :dynamic |
.dynsym : { |
*(.dynsym); |
/branches/dynload/uspace/srv/loader/main.c |
---|
255,6 → 255,7 |
printf("Run interpreter.\n"); |
printf("entry point: 0x%lx\n", interp_info.entry); |
printf("pcb address: 0x%lx\n", &pcb); |
printf("prog dynamic: 0x%lx\n", prog_info.dynamic); |
is_dyn_linked = true; |
ipc_answer_0(rid, EOK); |
/branches/dynload/uspace/srv/loader/elf_load.c |
---|
300,6 → 300,12 |
elf->info->interp = "/app/dload"; |
break; |
case PT_DYNAMIC: |
/* Record pointer to dynamic section into info structure */ |
elf->info->dynamic = |
(void *)((uint8_t *)entry->p_vaddr + elf->bias); |
printf("dynamic section found at 0x%x\n", |
(uintptr_t)elf->info->dynamic); |
break; |
case PT_SHLIB: |
case PT_NOTE: |
case PT_LOPROC: |
457,11 → 463,6 |
} |
break; |
case SHT_DYNAMIC: |
/* Record pointer to dynamic section into info structure */ |
elf->info->dynamic = |
(void *)((uint8_t *)entry->sh_addr + elf->bias); |
printf("dynamic section found at 0x%x\n", |
(uintptr_t)elf->info->dynamic); |
break; |
default: |
break; |
/branches/dynload/uspace/srv/pci/libpci/Makefile |
---|
5,6 → 5,7 |
LIBC_PREFIX=$(shell cd ../../../lib/libc; pwd) |
include ../../../Makefile.config |
include $(LIBC_PREFIX)/Makefile.toolchain |
LIBS = $(LIBC_PREFIX)/libc.a |