From 133909a8e052d8bf6fe21d9e3dd5546d0198ac7e Mon Sep 17 00:00:00 2001
From: Waldemar Brodkorb <wbx@openadk.org>
Date: Sat, 23 Sep 2023 10:12:37 +0200
Subject: aarch64: disable lazy relocations

Fixes segfaults in curl with gnutls encryption.
---
 ldso/ldso/aarch64/elfinterp.c | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'ldso')

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,
-- 
cgit v1.2.3