summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2023-09-23 10:12:37 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2023-09-23 10:12:37 +0200
commit133909a8e052d8bf6fe21d9e3dd5546d0198ac7e (patch)
tree5855cb79692be193c37432df1ef9505288bc24d6
parent1702904611b21aa7722d1f6a4fdeed3fc96bd127 (diff)
aarch64: disable lazy relocations
Fixes segfaults in curl with gnutls encryption.
-rw-r--r--ldso/ldso/aarch64/elfinterp.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/ldso/ldso/aarch64/elfinterp.c b/ldso/ldso/aarch64/elfinterp.c
index adabafaad..717a76980 100644
--- a/ldso/ldso/aarch64/elfinterp.c
+++ b/ldso/ldso/aarch64/elfinterp.c
@@ -253,6 +253,8 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
return 0;
}
+#undef __AARCH64_LAZY_RELOC_WORKS
+#ifdef __AARCH64_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)
@@ -303,11 +305,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 __AARCH64_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,