Module Name: src
Committed By: riastradh
Date: Tue Jul 23 18:11:53 UTC 2024
Modified Files:
src/libexec/ld.elf_so/arch/aarch64: rtld_start.S
src/tests/libexec/ld.elf_so: t_tls_extern.c
Log Message:
ld.elf_so aarch64/rtld_start.S: Fix dynamic TLS fast path branch.
Bug found and patch prepared by pho@.
PR lib/58154
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/libexec/ld.elf_so/arch/aarch64/rtld_start.S
cvs rdiff -u -r1.15 -r1.16 src/tests/libexec/ld.elf_so/t_tls_extern.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/libexec/ld.elf_so/arch/aarch64/rtld_start.S
diff -u src/libexec/ld.elf_so/arch/aarch64/rtld_start.S:1.6 src/libexec/ld.elf_so/arch/aarch64/rtld_start.S:1.7
--- src/libexec/ld.elf_so/arch/aarch64/rtld_start.S:1.6 Mon Jul 22 23:18:50 2024
+++ src/libexec/ld.elf_so/arch/aarch64/rtld_start.S Tue Jul 23 18:11:53 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: rtld_start.S,v 1.6 2024/07/22 23:18:50 riastradh Exp $ */
+/* $NetBSD: rtld_start.S,v 1.7 2024/07/23 18:11:53 riastradh Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
#include <machine/asm.h>
-RCSID("$NetBSD: rtld_start.S,v 1.6 2024/07/22 23:18:50 riastradh Exp $")
+RCSID("$NetBSD: rtld_start.S,v 1.7 2024/07/23 18:11:53 riastradh Exp $")
/*
* void _rtld_start(void (*cleanup)(void), const Obj_Entry *obj,
@@ -236,8 +236,7 @@ ENTRY(_rtld_tlsdesc_dynamic)
ldr x3, [x0, #-8] /* x3 := max = DTV_MAX_INDEX(dtv) */
ldr x2, [x1, #0] /* x2 := idx = tlsdesc->td_tlsindex */
cmp x2, x3
- b.lt 1f /* Slow path if idx < max */
- /* XXX PR lib/58154 */
+ b.gt 1f /* Slow path if idx > max */
ldr x3, [x0, x2, lsl #3] /* x3 := dtv[idx] */
cbz x3, 1f /* Slow path if dtv[idx] is null */
Index: src/tests/libexec/ld.elf_so/t_tls_extern.c
diff -u src/tests/libexec/ld.elf_so/t_tls_extern.c:1.15 src/tests/libexec/ld.elf_so/t_tls_extern.c:1.16
--- src/tests/libexec/ld.elf_so/t_tls_extern.c:1.15 Mon Jul 22 23:18:30 2024
+++ src/tests/libexec/ld.elf_so/t_tls_extern.c Tue Jul 23 18:11:53 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: t_tls_extern.c,v 1.15 2024/07/22 23:18:30 riastradh Exp $ */
+/* $NetBSD: t_tls_extern.c,v 1.16 2024/07/23 18:11:53 riastradh Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -30,7 +30,6 @@
#include <atf-c.h>
#include <dlfcn.h>
-#include <signal.h>
#define ATF_REQUIRE_DL(x) ATF_REQUIRE_MSG((x) != 0, "%s: %s", #x, dlerror())
@@ -424,10 +423,6 @@ ATF_TC_BODY(opencloseloop_use, tc)
*/
ATF_REQUIRE_DL(use = dlopen("libh_use_dynamic.so", 0));
ATF_REQUIRE_DL(fuse = dlsym(use, "fuse"));
-#ifdef __aarch64__
- atf_tc_expect_signal(SIGSEGV,
- "PR lib/58154: bad fast path test in aarch64 tls");
-#endif
pdef = (*fdef)();
puse = (*fuse)();
ATF_CHECK_EQ_MSG(pdef, puse,