Use configured thread libraries in MT runtime test

Context:
The direct ASan runtime regression linked with a hard-coded -pthread. Ubuntu 24.04 Clang also requires the configure-detected -latomic for std::atomic::is_lock_free(), so the new test failed to link in upstream CI.

Changes:
- Query CFG_LDLIBS_THREADS from the configured verilated.mk through Make.
- Use the configured flags for both the ASan capability probe and the runtime test link.

Evidence:
- Red: PR #7927 Ubuntu 24.04 Clang dist-vlt-1 failed with undefined reference to __atomic_is_lock_free.
- Green locally: t_verilated_mt_msg_lifetime passes all warn, finish, stop, and fatal modes; lint-py-pylint-tests, YAPF, py_compile, and git diff --check pass.
- Linux/Clang green remains to be confirmed by the PR CI rerun.
This commit is contained in:
Jeffrey Song 2026-07-13 08:03:53 -07:00
parent caa3c5b510
commit c5865d0395
1 changed files with 19 additions and 2 deletions

View File

@ -20,10 +20,27 @@ exe = test.obj_dir + "/t_verilated_mt_msg_lifetime"
probe_cpp = test.obj_dir + "/asan_probe.cpp" probe_cpp = test.obj_dir + "/asan_probe.cpp"
probe_exe = test.obj_dir + "/asan_probe" probe_exe = test.obj_dir + "/asan_probe"
run_log = test.obj_dir + "/run.log" run_log = test.obj_dir + "/run.log"
thread_ldlibs_make = test.obj_dir + "/thread_ldlibs.mk"
cxx_cmd = shlex.split(os.environ["CXX"]) cxx_cmd = shlex.split(os.environ["CXX"])
test.write_wholefile(
thread_ldlibs_make, "include " + os.environ["VERILATOR_ROOT"] +
"/include/verilated.mk\n\n.PHONY: print-thread-ldlibs\n"
"print-thread-ldlibs:\n\t@printf '%s\\n' '$(CFG_LDLIBS_THREADS)'\n")
thread_ldlibs_result = subprocess.run([
*shlex.split(os.environ.get("MAKE", "make")), "-s", "-f", thread_ldlibs_make,
"print-thread-ldlibs"
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
check=False)
if thread_ldlibs_result.returncode:
test.error("Unable to read configured thread linker flags: " + thread_ldlibs_result.stderr)
thread_ldlibs = shlex.split(thread_ldlibs_result.stdout)
test.write_wholefile(probe_cpp, "int main() { return 0; }\n") test.write_wholefile(probe_cpp, "int main() { return 0; }\n")
probe_cmd = cxx_cmd + ["-fsanitize=address", "-pthread", probe_cpp, "-o", probe_exe] probe_cmd = cxx_cmd + ["-fsanitize=address", probe_cpp, "-o", probe_exe, *thread_ldlibs]
if sys.platform == "darwin": if sys.platform == "darwin":
probe_cmd.append("-Wl,-U,__Z18vlFlushSolverStatsv") probe_cmd.append("-Wl,-U,__Z18vlFlushSolverStatsv")
probe = subprocess.run(probe_cmd, probe = subprocess.run(probe_cmd,
@ -49,9 +66,9 @@ cmd = [
"t/t_verilated_mt_msg_lifetime.cpp", "t/t_verilated_mt_msg_lifetime.cpp",
os.environ["VERILATOR_ROOT"] + "/include/verilated.cpp", os.environ["VERILATOR_ROOT"] + "/include/verilated.cpp",
os.environ["VERILATOR_ROOT"] + "/include/verilated_threads.cpp", os.environ["VERILATOR_ROOT"] + "/include/verilated_threads.cpp",
"-pthread",
"-o", "-o",
exe, exe,
*thread_ldlibs,
] ]
if sys.platform == "darwin": if sys.platform == "darwin":
cmd.append("-Wl,-U,__Z18vlFlushSolverStatsv") cmd.append("-Wl,-U,__Z18vlFlushSolverStatsv")