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,