|
@@ -226,6 +226,8 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+#undef __RISCV_LAZY_RELOC_WORKS
|
|
|
+#ifdef __RISCV_LAZY_RELOC_WORKS
|
|
|
static int
|
|
|
_dl_do_lazy_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
|
|
|
ELF_RELOC *rpnt, ElfW(Sym) *symtab, char *strtab)
|
|
@@ -250,7 +252,6 @@ _dl_do_lazy_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
|
|
|
case R_RISCV_NONE:
|
|
|
break;
|
|
|
case R_RISCV_JUMP_SLOT:
|
|
|
- *reloc_addr += tpnt->loadaddr;
|
|
|
break;
|
|
|
default:
|
|
|
return -1;
|
|
@@ -265,11 +266,17 @@ _dl_do_lazy_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
|
|
|
unsigned long rel_addr, unsigned long rel_size)
|
|
|
{
|
|
|
+#ifdef __RISCV_LAZY_RELOC_WORKS
|
|
|
(void)_dl_parse(rpnt->dyn, NULL, rel_addr, rel_size, _dl_do_lazy_reloc);
|
|
|
+#else
|
|
|
+ _dl_parse_relocation_information(rpnt, &_dl_loaded_modules->symbol_scope,
|
|
|
+ rel_addr, rel_size);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
int _dl_parse_relocation_information(struct dyn_elf *rpnt,
|