ld-linux had a dynamic relocation in argv parsing code: #0 elf_machine_rela (skip_ifunc=0, reloc_addr_arg=0x0, version=, sym=0x0, reloc=0x0, map=0x0) at ../sysdeps/aarch64/dl-machine.h:370 #1 elf_dynamic_do_Rela (skip_ifunc=0, lazy=0, nrelative=, relsize=, reladdr=, map=0x0) at do-rel.h:137 #2 _dl_start (arg=) at rtld.c:489 Backtrace stopped: Cannot access memory at address 0x8 https://bugs.gentoo.org/632604#c4 From e9177fba13549a8e2a6232f46080e5c6d3e467b1 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 21 Jun 2017 13:47:07 +0100 Subject: [PATCH] [AArch64] Use hidden __GI__dl_argv in rtld startup code We rely on the symbol being locally defined so using extern symbol is not correct and the linker may complain about the relocations. --- ChangeLog | 5 +++++ sysdeps/aarch64/dl-machine.h | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h index 02fab04f40..60472036f5 100644 --- a/sysdeps/aarch64/dl-machine.h +++ b/sysdeps/aarch64/dl-machine.h @@ -194,8 +194,8 @@ _dl_start_user: \n\ cmp " PTR "0, #0 \n\ bne 1b \n\ // Update _dl_argv \n\ - adrp x3, _dl_argv \n\ - str " PTR "2, [x3, #:lo12:_dl_argv] \n\ + adrp x3, __GI__dl_argv \n\ + str " PTR "2, [x3, #:lo12:__GI__dl_argv] \n\ .L_done_stack_adjust: \n\ // compute envp \n\ add " PTR "3, " PTR "2, " PTR "1, lsl #" PTR_SIZE_LOG " \n\ -- 2.14.2.822.g60be5d43e6-goog