Module Name: src Committed By: riastradh Date: Thu Jun 1 22:24:52 UTC 2023
Modified Files: src/tests/libexec/ld.elf_so: t_tls_extern.c Log Message: ld.elf_so: Factor out logic in TLS tests to make writing more easier. No functional change intended. XXX pullup-10 To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 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/tests/libexec/ld.elf_so/t_tls_extern.c diff -u src/tests/libexec/ld.elf_so/t_tls_extern.c:1.4 src/tests/libexec/ld.elf_so/t_tls_extern.c:1.5 --- src/tests/libexec/ld.elf_so/t_tls_extern.c:1.4 Thu Jun 1 20:50:18 2023 +++ src/tests/libexec/ld.elf_so/t_tls_extern.c Thu Jun 1 22:24:52 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: t_tls_extern.c,v 1.4 2023/06/01 20:50:18 riastradh Exp $ */ +/* $NetBSD: t_tls_extern.c,v 1.5 2023/06/01 22:24:52 riastradh Exp $ */ /*- * Copyright (c) 2023 The NetBSD Foundation, Inc. @@ -33,13 +33,15 @@ #define ATF_REQUIRE_DL(x) ATF_REQUIRE_MSG(x, "%s: %s", #x, dlerror()) -ATF_TC(tls_extern_dynamic_defuse); -ATF_TC_HEAD(tls_extern_dynamic_defuse, tc) -{ - atf_tc_set_md_var(tc, "descr", "extern __thread for dynamic TLS works," - " loading def then use"); -} -ATF_TC_BODY(tls_extern_dynamic_defuse, tc) +enum order { + DEF_USE, + USE_DEF, + USE_DEF_NOLOAD, +}; + +static void +tls_extern(const char *libdef, const char *libuse, enum order order, + bool xfail) { void *def, *use; int *(*fdef)(void), *(*fuse)(void); @@ -47,19 +49,47 @@ ATF_TC_BODY(tls_extern_dynamic_defuse, t (void)dlerror(); - ATF_REQUIRE_DL(def = dlopen("libh_def_dynamic.so", 0)); - ATF_REQUIRE_DL(use = dlopen("libh_use_dynamic.so", 0)); + switch (order) { + case DEF_USE: + ATF_REQUIRE_DL(def = dlopen(libdef, 0)); + ATF_REQUIRE_DL(use = dlopen(libuse, 0)); + break; + case USE_DEF: + ATF_REQUIRE_DL(use = dlopen(libuse, 0)); + ATF_REQUIRE_DL(def = dlopen(libdef, 0)); + break; + case USE_DEF_NOLOAD: + ATF_REQUIRE_DL(use = dlopen(libuse, 0)); + ATF_REQUIRE_DL(def = dlopen(libdef, RTLD_NOLOAD)); + break; + } ATF_REQUIRE_DL(fdef = dlsym(def, "fdef")); ATF_REQUIRE_DL(fuse = dlsym(use, "fuse")); pdef = (*fdef)(); puse = (*fuse)(); + if (xfail) { + atf_tc_expect_fail("PR toolchain/50277:" + " rtld relocation bug with thread local storage"); + } ATF_CHECK_EQ_MSG(pdef, puse, "%p in defining library != %p in using library", pdef, puse); } +ATF_TC(tls_extern_dynamic_defuse); +ATF_TC_HEAD(tls_extern_dynamic_defuse, tc) +{ + atf_tc_set_md_var(tc, "descr", "extern __thread for dynamic TLS works," + " loading def then use"); +} +ATF_TC_BODY(tls_extern_dynamic_defuse, tc) +{ + tls_extern("libh_def_dynamic.so", "libh_use_dynamic.so", + DEF_USE, /*xfail*/false); +} + ATF_TC(tls_extern_dynamic_usedef); ATF_TC_HEAD(tls_extern_dynamic_usedef, tc) { @@ -68,23 +98,8 @@ ATF_TC_HEAD(tls_extern_dynamic_usedef, t } ATF_TC_BODY(tls_extern_dynamic_usedef, tc) { - void *def, *use; - int *(*fdef)(void), *(*fuse)(void); - int *pdef, *puse; - - (void)dlerror(); - - ATF_REQUIRE_DL(use = dlopen("libh_use_dynamic.so", 0)); - ATF_REQUIRE_DL(def = dlopen("libh_def_dynamic.so", 0)); - - ATF_REQUIRE_DL(fdef = dlsym(def, "fdef")); - ATF_REQUIRE_DL(fuse = dlsym(use, "fuse")); - - pdef = (*fdef)(); - puse = (*fuse)(); - ATF_CHECK_EQ_MSG(pdef, puse, - "%p in defining library != %p in using library", - pdef, puse); + tls_extern("libh_def_dynamic.so", "libh_use_dynamic.so", + USE_DEF, /*xfail*/false); } ATF_TC(tls_extern_dynamic_usedefnoload); @@ -95,23 +110,8 @@ ATF_TC_HEAD(tls_extern_dynamic_usedefnol } ATF_TC_BODY(tls_extern_dynamic_usedefnoload, tc) { - void *def, *use; - int *(*fdef)(void), *(*fuse)(void); - int *pdef, *puse; - - (void)dlerror(); - - ATF_REQUIRE_DL(use = dlopen("libh_use_dynamic.so", 0)); - ATF_REQUIRE_DL(def = dlopen("libh_def_dynamic.so", RTLD_NOLOAD)); - - ATF_REQUIRE_DL(fdef = dlsym(def, "fdef")); - ATF_REQUIRE_DL(fuse = dlsym(use, "fuse")); - - pdef = (*fdef)(); - puse = (*fuse)(); - ATF_CHECK_EQ_MSG(pdef, puse, - "%p in defining library != %p in using library", - pdef, puse); + tls_extern("libh_def_dynamic.so", "libh_use_dynamic.so", + USE_DEF_NOLOAD, /*xfail*/false); } ATF_TC(tls_extern_static_defuse); @@ -122,23 +122,8 @@ ATF_TC_HEAD(tls_extern_static_defuse, tc } ATF_TC_BODY(tls_extern_static_defuse, tc) { - void *def, *use; - int *(*fdef)(void), *(*fuse)(void); - int *pdef, *puse; - - (void)dlerror(); - - ATF_REQUIRE_DL(def = dlopen("libh_def_static.so", 0)); - ATF_REQUIRE_DL(use = dlopen("libh_use_static.so", 0)); - - ATF_REQUIRE_DL(fdef = dlsym(def, "fdef")); - ATF_REQUIRE_DL(fuse = dlsym(use, "fuse")); - - pdef = (*fdef)(); - puse = (*fuse)(); - ATF_CHECK_EQ_MSG(pdef, puse, - "%p in defining library != %p in using library", - pdef, puse); + tls_extern("libh_def_static.so", "libh_use_static.so", + DEF_USE, /*xfail*/false); } ATF_TC(tls_extern_static_usedef); @@ -149,25 +134,8 @@ ATF_TC_HEAD(tls_extern_static_usedef, tc } ATF_TC_BODY(tls_extern_static_usedef, tc) { - void *def, *use; - int *(*fdef)(void), *(*fuse)(void); - int *pdef, *puse; - - (void)dlerror(); - - ATF_REQUIRE_DL(use = dlopen("libh_use_static.so", 0)); - ATF_REQUIRE_DL(def = dlopen("libh_def_static.so", 0)); - - ATF_REQUIRE_DL(fdef = dlsym(def, "fdef")); - ATF_REQUIRE_DL(fuse = dlsym(use, "fuse")); - - pdef = (*fdef)(); - puse = (*fuse)(); - atf_tc_expect_fail("PR toolchain/50277:" - " rtld relocation bug with thread local storage"); - ATF_CHECK_EQ_MSG(pdef, puse, - "%p in defining library != %p in using library", - pdef, puse); + tls_extern("libh_def_static.so", "libh_use_static.so", + USE_DEF, /*xfail*/true); } ATF_TC(tls_extern_static_usedefnoload); @@ -178,25 +146,8 @@ ATF_TC_HEAD(tls_extern_static_usedefnolo } ATF_TC_BODY(tls_extern_static_usedefnoload, tc) { - void *def, *use; - int *(*fdef)(void), *(*fuse)(void); - int *pdef, *puse; - - (void)dlerror(); - - ATF_REQUIRE_DL(use = dlopen("libh_use_static.so", 0)); - ATF_REQUIRE_DL(def = dlopen("libh_def_static.so", RTLD_NOLOAD)); - - ATF_REQUIRE_DL(fdef = dlsym(def, "fdef")); - ATF_REQUIRE_DL(fuse = dlsym(use, "fuse")); - - pdef = (*fdef)(); - puse = (*fuse)(); - atf_tc_expect_fail("PR toolchain/50277:" - " rtld relocation bug with thread local storage"); - ATF_CHECK_EQ_MSG(pdef, puse, - "%p in defining library != %p in using library", - pdef, puse); + tls_extern("libh_def_static.so", "libh_use_static.so", + USE_DEF_NOLOAD, /*xfail*/true); } ATF_TP_ADD_TCS(tp)