https://github.com/python/cpython/commit/3a08e9373977788e7691ec0a973fbe1abe170c91
commit: 3a08e9373977788e7691ec0a973fbe1abe170c91
branch: main
author: stratakis <[email protected]>
committer: vstinner <[email protected]>
date: 2026-06-10T13:08:25+02:00
summary:
gh-98894: Fix DTrace test_check_probes for shared builds (#151122)
When building with --enable-shared, the SystemTap/DTrace notes
live in libpython. Add detection logic to be used by readelf.
Force the C locale on readelf output.
files:
M Lib/test/test_dtrace.py
diff --git a/Lib/test/test_dtrace.py b/Lib/test/test_dtrace.py
index 61320a472f3e02..6286b6d21b572e 100644
--- a/Lib/test/test_dtrace.py
+++ b/Lib/test/test_dtrace.py
@@ -378,11 +378,14 @@ def setUpClass(cls):
def get_readelf_version():
try:
cmd = ["readelf", "--version"]
+ # Force the C locale to disable localization.
+ env = dict(os.environ, LC_ALL="C")
proc = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
+ env=env,
)
with proc:
version, stderr = proc.communicate()
@@ -405,12 +408,36 @@ def get_readelf_version():
return int(match.group(1)), int(match.group(2))
def get_readelf_output(self):
- command = ["readelf", "-n", sys.executable]
+ binary = sys.executable
+ if sysconfig.get_config_var("Py_ENABLE_SHARED"):
+ lib_dir = sysconfig.get_config_var("LIBDIR")
+ if not lib_dir or sysconfig.is_python_build():
+ lib_dir = os.path.abspath(os.path.dirname(sys.executable))
+
+ lib_names = []
+ for name in (
+ sysconfig.get_config_var("INSTSONAME"),
+ sysconfig.get_config_var("LDLIBRARY"),
+ ):
+ if name and name not in lib_names:
+ lib_names.append(name)
+
+ if lib_dir:
+ for name in lib_names:
+ libpython_path = os.path.join(lib_dir, name)
+ if os.path.exists(libpython_path):
+ binary = libpython_path
+ break
+
+ command = ["readelf", "-n", binary]
+ # Force the C locale to disable localization.
+ env = dict(os.environ, LC_ALL="C")
stdout, _ = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True,
+ env=env,
).communicate()
return stdout
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]