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,

Reply via email to