]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-103650: Fix perf maps address format (#103651)
authorArthur Pastel <arthur.pastel@gmail.com>
Sun, 7 May 2023 19:42:26 +0000 (21:42 +0200)
committerGitHub <noreply@github.com>
Sun, 7 May 2023 19:42:26 +0000 (20:42 +0100)
Lib/test/test_perf_profiler.py
Misc/NEWS.d/next/Core and Builtins/2023-04-20-16-17-51.gh-issue-103650.K1MFXR.rst [new file with mode: 0644]
Python/perf_trampoline.c

index 2b977d78d3932484c3242b03792ea44c304235ba..5418f9f35485f8f275fccb31f64cd07b7483a8fb 100644 (file)
@@ -1,4 +1,5 @@
 import unittest
+import string
 import subprocess
 import sys
 import sysconfig
@@ -70,9 +71,14 @@ class TestPerfTrampoline(unittest.TestCase):
         perf_file = pathlib.Path(f"/tmp/perf-{process.pid}.map")
         self.assertTrue(perf_file.exists())
         perf_file_contents = perf_file.read_text()
-        self.assertIn(f"py::foo:{script}", perf_file_contents)
-        self.assertIn(f"py::bar:{script}", perf_file_contents)
-        self.assertIn(f"py::baz:{script}", perf_file_contents)
+        perf_lines = perf_file_contents.splitlines();
+        expected_symbols = [f"py::foo:{script}", f"py::bar:{script}", f"py::baz:{script}"]
+        for expected_symbol in expected_symbols:
+            perf_line = next((line for line in perf_lines if expected_symbol in line), None)
+            self.assertIsNotNone(perf_line, f"Could not find {expected_symbol} in perf file")
+            perf_addr = perf_line.split(" ")[0]
+            self.assertFalse(perf_addr.startswith("0x"), "Address should not be prefixed with 0x")
+            self.assertTrue(set(perf_addr).issubset(string.hexdigits), "Address should contain only hex characters")
 
     def test_trampoline_works_with_forks(self):
         code = """if 1:
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-04-20-16-17-51.gh-issue-103650.K1MFXR.rst b/Misc/NEWS.d/next/Core and Builtins/2023-04-20-16-17-51.gh-issue-103650.K1MFXR.rst
new file mode 100644 (file)
index 0000000..5434660
--- /dev/null
@@ -0,0 +1 @@
+Change the perf map format to remove the '0x' prefix from the addresses
index 1957ab82c3395127ec312d2f166cdc10176eb424..3b183280e1f24c13bdaa0d0bd1153eccf11a1fd7 100644 (file)
@@ -253,7 +253,7 @@ perf_map_write_entry(void *state, const void *code_addr,
                                   NULL);
         return;
     }
-    fprintf(method_file, "%p %x py::%s:%s\n", code_addr, code_size, entry,
+    fprintf(method_file, "%" PRIxPTR " %x py::%s:%s\n", (uintptr_t) code_addr, code_size, entry,
             filename);
     fflush(method_file);
 }