summaryrefslogtreecommitdiffstats
path: root/Tools/build/smelly.py
diff options
context:
space:
mode:
authorDino Viehland <dinoviehland@fb.com>2023-10-30 15:43:11 (GMT)
committerGitHub <noreply@github.com>2023-10-30 15:43:11 (GMT)
commit05f2f0ac92afa560315eb66fd6576683c7f69e2d (patch)
treea6a4746103a67f06f04ff6df9f290f0305ff9dd5 /Tools/build/smelly.py
parent4ebf2fae9664a4042511059627f44d46dceb2e09 (diff)
downloadcpython-05f2f0ac92afa560315eb66fd6576683c7f69e2d.zip
cpython-05f2f0ac92afa560315eb66fd6576683c7f69e2d.tar.gz
cpython-05f2f0ac92afa560315eb66fd6576683c7f69e2d.tar.bz2
gh-90815: Add mimalloc memory allocator (#109914)
* Add mimalloc v2.12 Modified src/alloc.c to remove include of alloc-override.c and not compile new handler. Did not include the following files: - include/mimalloc-new-delete.h - include/mimalloc-override.h - src/alloc-override-osx.c - src/alloc-override.c - src/static.c - src/region.c mimalloc is thread safe and shares a single heap across all runtimes, therefore finalization and getting global allocated blocks across all runtimes is different. * mimalloc: minimal changes for use in Python: - remove debug spam for freeing large allocations - use same bytes (0xDD) for freed allocations in CPython and mimalloc This is important for the test_capi debug memory tests * Don't export mimalloc symbol in libpython. * Enable mimalloc as Python allocator option. * Add mimalloc MIT license. * Log mimalloc in Lib/test/pythoninfo.py. * Document new mimalloc support. * Use macro defs for exports as done in: https://github.com/python/cpython/pull/31164/ Co-authored-by: Sam Gross <colesbury@gmail.com> Co-authored-by: Christian Heimes <christian@python.org> Co-authored-by: Victor Stinner <vstinner@python.org>
Diffstat (limited to 'Tools/build/smelly.py')
-rwxr-xr-xTools/build/smelly.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/Tools/build/smelly.py b/Tools/build/smelly.py
index ab34530..7c53426 100755
--- a/Tools/build/smelly.py
+++ b/Tools/build/smelly.py
@@ -11,6 +11,11 @@ ALLOWED_PREFIXES = ('Py', '_Py')
if sys.platform == 'darwin':
ALLOWED_PREFIXES += ('__Py',)
+# mimalloc doesn't use static, but it's symbols are not exported
+# from the shared library. They do show up in the static library
+# before its linked into an executable.
+ALLOWED_STATIC_PREFIXES = ('mi_', '_mi_')
+
# "Legacy": some old symbols are prefixed by "PY_".
EXCEPTIONS = frozenset({
'PY_TIMEOUT_MAX',
@@ -59,7 +64,7 @@ def get_exported_symbols(library, dynamic=False):
return stdout
-def get_smelly_symbols(stdout):
+def get_smelly_symbols(stdout, dynamic=False):
smelly_symbols = []
python_symbols = []
local_symbols = []
@@ -77,7 +82,9 @@ def get_smelly_symbols(stdout):
symbol = parts[-1]
result = '%s (type: %s)' % (symbol, symtype)
- if symbol.startswith(ALLOWED_PREFIXES) or symbol in EXCEPTIONS:
+ if (symbol.startswith(ALLOWED_PREFIXES) or
+ symbol in EXCEPTIONS or
+ (not dynamic and symbol.startswith(ALLOWED_STATIC_PREFIXES))):
python_symbols.append(result)
continue
@@ -95,7 +102,7 @@ def get_smelly_symbols(stdout):
def check_library(library, dynamic=False):
nm_output = get_exported_symbols(library, dynamic)
- smelly_symbols, python_symbols = get_smelly_symbols(nm_output)
+ smelly_symbols, python_symbols = get_smelly_symbols(nm_output, dynamic)
if not smelly_symbols:
print(f"OK: no smelly symbol found ({len(python_symbols)} Python symbols)")