]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-143253: Add libabigail suppression file for internal types (#143254)
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Mon, 12 Jan 2026 15:37:43 +0000 (15:37 +0000)
committerGitHub <noreply@github.com>
Mon, 12 Jan 2026 15:37:43 +0000 (17:37 +0200)
Co-authored-by: Petr Viktorin <encukou@gmail.com>
.github/CODEOWNERS
Makefile.pre.in
Misc/libabigail.abignore [new file with mode: 0644]

index 4789cd2c59e6cbade000517f79916817241219b3..79091e2d4f2f4f4cec51620c1e9c9962d890310f 100644 (file)
@@ -143,6 +143,9 @@ Misc/externals.spdx.json      @sethmlarson
 Misc/sbom.spdx.json           @sethmlarson
 Tools/build/generate_sbom.py  @sethmlarson
 
+# ABI check
+Misc/libabigail.abignore      @encukou
+
 
 # ----------------------------------------------------------------------------
 # Platform Support
index a6beb96d12a3f27e9381199c060456a51a682697..0b5aef5ee7e67177483194d7e64ead30ef9d76b4 100644 (file)
@@ -1883,7 +1883,7 @@ regen-abidump: all
 
 .PHONY: check-abidump
 check-abidump: all
-       abidiff $(srcdir)/Doc/data/python$(LDVERSION).abi "libpython$(LDVERSION).so" --drop-private-types --no-architecture --no-added-syms
+       abidiff $(srcdir)/Doc/data/python$(LDVERSION).abi "libpython$(LDVERSION).so" --drop-private-types --no-architecture --no-added-syms --suppressions $(srcdir)/Misc/libabigail.abignore
 
 .PHONY: regen-limited-abi
 regen-limited-abi: all
diff --git a/Misc/libabigail.abignore b/Misc/libabigail.abignore
new file mode 100644 (file)
index 0000000..3698130
--- /dev/null
@@ -0,0 +1,25 @@
+# libabigail suppression file for CPython ABI checks
+#
+# Suppress types defined directly in internal headers (pycore_*.h)
+# Regex matches filenames NOT starting with "pycore_", so pycore_* types are suppressed.
+[suppress_type]
+  source_location_not_regexp = ^([^p]|p[^y]|py[^c]|pyc[^o]|pyco[^r]|pycor[^e]|pycore[^_])
+  accessed_through = pointer
+
+# Suppress public typedefs that alias internal structs.
+# These are public names but their underlying struct layout is internal.
+[suppress_type]
+  name = PyInterpreterState
+  accessed_through = pointer
+
+[suppress_type]
+  name = _PyRuntimeState
+  accessed_through = pointer
+
+[suppress_type]
+  name = PyThreadState
+  accessed_through = pointer
+
+[suppress_variable]
+  name = _PyRuntime
+  type_name = _PyRuntimeState