]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-91048: Fix external inspection multi-threaded performance (GH-136005) ...
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Sat, 28 Jun 2025 18:12:54 +0000 (19:12 +0100)
committerGitHub <noreply@github.com>
Sat, 28 Jun 2025 18:12:54 +0000 (19:12 +0100)
(cherry picked from commit 5334732f9c8a44722e4b339f4bb837b5b0226991)

Doc/data/python3.14.abi
Include/internal/pycore_global_objects_fini_generated.h
Include/internal/pycore_global_strings.h
Include/internal/pycore_runtime_init_generated.h
Include/internal/pycore_unicodeobject_generated.h
Lib/test/test_external_inspection.py
Modules/_remote_debugging_module.c
Modules/clinic/_remote_debugging_module.c.h
Python/remote_debug.h

index f5b33960457a4db3cd79be40483f5986014e58da..478d23a2a58125a9d07d6edc84026ae5c6a32c73 100644 (file)
     <elf-symbol name='_PyNotImplemented_Type' size='416' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyOS_ReadlineTState' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyParser_TokenNames' size='560' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
-    <elf-symbol name='_PyRuntime' size='316472' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+    <elf-symbol name='_PyRuntime' size='316536' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PySet_Dummy' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyUnion_Type' size='416' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
     <elf-symbol name='_PyWeakref_CallableProxyType' size='416' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
   </abi-instr>
   <abi-instr address-size='64' path='Objects/funcobject.c' comp-dir-path='/home/runner/work/cpython/cpython' language='LANG_C11'>
     <var-decl name='PyFunction_Type' type-id='type-id-271' mangled-name='PyFunction_Type' visibility='default' filepath='./Include/cpython/funcobject.h' line='66' column='1' elf-symbol-id='PyFunction_Type'/>
-    <var-decl name='PyClassMethod_Type' type-id='type-id-271' mangled-name='PyClassMethod_Type' visibility='default' filepath='./Include/cpython/funcobject.h' line='131' column='1' elf-symbol-id='PyClassMethod_Type'/>
-    <var-decl name='PyStaticMethod_Type' type-id='type-id-271' mangled-name='PyStaticMethod_Type' visibility='default' filepath='./Include/cpython/funcobject.h' line='132' column='1' elf-symbol-id='PyStaticMethod_Type'/>
+    <var-decl name='PyClassMethod_Type' type-id='type-id-271' mangled-name='PyClassMethod_Type' visibility='default' filepath='./Include/cpython/funcobject.h' line='126' column='1' elf-symbol-id='PyClassMethod_Type'/>
+    <var-decl name='PyStaticMethod_Type' type-id='type-id-271' mangled-name='PyStaticMethod_Type' visibility='default' filepath='./Include/cpython/funcobject.h' line='127' column='1' elf-symbol-id='PyStaticMethod_Type'/>
     <function-decl name='_PyFunction_Vectorcall' filepath='./Include/internal/pycore_function.h' line='11' column='1' visibility='default' binding='global' size-in-bits='64'>
       <parameter type-id='type-id-6'/>
       <parameter type-id='type-id-265'/>
       <parameter type-id='type-id-1' name='self' filepath='Objects/typeobject.c' line='8940' column='1'/>
       <return type-id='type-id-5'/>
     </function-decl>
-    <function-decl name='_PyType_GetSlotWrapperNames' mangled-name='_PyType_GetSlotWrapperNames' filepath='Objects/typeobject.c' line='11357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyType_GetSlotWrapperNames'>
+    <function-decl name='_PyType_GetSlotWrapperNames' mangled-name='_PyType_GetSlotWrapperNames' filepath='Objects/typeobject.c' line='11362' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PyType_GetSlotWrapperNames'>
       <return type-id='type-id-6'/>
     </function-decl>
-    <function-decl name='PyType_Freeze' mangled-name='PyType_Freeze' filepath='Objects/typeobject.c' line='11607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyType_Freeze'>
-      <parameter type-id='type-id-1' name='type' filepath='Objects/typeobject.c' line='11607' column='1'/>
+    <function-decl name='PyType_Freeze' mangled-name='PyType_Freeze' filepath='Objects/typeobject.c' line='11612' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PyType_Freeze'>
+      <parameter type-id='type-id-1' name='type' filepath='Objects/typeobject.c' line='11612' column='1'/>
       <return type-id='type-id-5'/>
     </function-decl>
-    <function-decl name='_PySuper_Lookup' mangled-name='_PySuper_Lookup' filepath='Objects/typeobject.c' line='11869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySuper_Lookup'>
-      <parameter type-id='type-id-1' name='su_type' filepath='Objects/typeobject.c' line='11869' column='1'/>
-      <parameter type-id='type-id-6' name='su_obj' filepath='Objects/typeobject.c' line='11869' column='1'/>
-      <parameter type-id='type-id-6' name='name' filepath='Objects/typeobject.c' line='11869' column='1'/>
-      <parameter type-id='type-id-177' name='method' filepath='Objects/typeobject.c' line='11869' column='1'/>
+    <function-decl name='_PySuper_Lookup' mangled-name='_PySuper_Lookup' filepath='Objects/typeobject.c' line='11874' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_PySuper_Lookup'>
+      <parameter type-id='type-id-1' name='su_type' filepath='Objects/typeobject.c' line='11874' column='1'/>
+      <parameter type-id='type-id-6' name='su_obj' filepath='Objects/typeobject.c' line='11874' column='1'/>
+      <parameter type-id='type-id-6' name='name' filepath='Objects/typeobject.c' line='11874' column='1'/>
+      <parameter type-id='type-id-177' name='method' filepath='Objects/typeobject.c' line='11874' column='1'/>
       <return type-id='type-id-6'/>
     </function-decl>
   </abi-instr>
     <array-type-def dimensions='1' type-id='type-id-823' size-in-bits='2560' id='type-id-824'>
       <subrange length='20' type-id='type-id-2' id='type-id-825'/>
     </array-type-def>
-    <array-type-def dimensions='1' type-id='type-id-826' size-in-bits='65536' id='type-id-827'>
+    <array-type-def dimensions='1' type-id='type-id-826' size-in-bits='49152' id='type-id-827'>
       <subrange length='128' type-id='type-id-2' id='type-id-604'/>
     </array-type-def>
-    <array-type-def dimensions='1' type-id='type-id-828' size-in-bits='49152' id='type-id-829'>
+    <array-type-def dimensions='1' type-id='type-id-828' size-in-bits='65536' id='type-id-829'>
       <subrange length='128' type-id='type-id-2' id='type-id-604'/>
     </array-type-def>
     <array-type-def dimensions='1' type-id='type-id-830' size-in-bits='26880' id='type-id-831'>
       </data-member>
     </class-decl>
     <typedef-decl name='PyFunctionObject' type-id='type-id-973' filepath='./Include/cpython/funcobject.h' line='62' column='1' id='type-id-972'/>
-    <enum-decl name='PyFunction_WatchEvent' naming-typedef-id='type-id-974' filepath='./Include/cpython/funcobject.h' line='144' column='1' id='type-id-975'>
+    <enum-decl name='PyFunction_WatchEvent' naming-typedef-id='type-id-974' filepath='./Include/cpython/funcobject.h' line='139' column='1' id='type-id-975'>
       <underlying-type type-id='type-id-37'/>
       <enumerator name='PyFunction_EVENT_CREATE' value='0'/>
       <enumerator name='PyFunction_EVENT_DESTROY' value='1'/>
       <enumerator name='PyFunction_EVENT_MODIFY_DEFAULTS' value='3'/>
       <enumerator name='PyFunction_EVENT_MODIFY_KWDEFAULTS' value='4'/>
     </enum-decl>
-    <typedef-decl name='PyFunction_WatchEvent' type-id='type-id-975' filepath='./Include/cpython/funcobject.h' line='148' column='1' id='type-id-974'/>
-    <typedef-decl name='PyFunction_WatchCallback' type-id='type-id-976' filepath='./Include/cpython/funcobject.h' line='165' column='1' id='type-id-414'/>
+    <typedef-decl name='PyFunction_WatchEvent' type-id='type-id-975' filepath='./Include/cpython/funcobject.h' line='143' column='1' id='type-id-974'/>
+    <typedef-decl name='PyFunction_WatchCallback' type-id='type-id-976' filepath='./Include/cpython/funcobject.h' line='160' column='1' id='type-id-414'/>
     <class-decl name='_inittab' size-in-bits='128' is-struct='yes' visibility='default' filepath='./Include/cpython/import.h' line='5' column='1' id='type-id-977'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='name' type-id='type-id-4' visibility='default' filepath='./Include/cpython/import.h' line='6' column='1'/>
         <var-decl name='switch_mutex' type-id='type-id-1178' visibility='default' filepath='./Include/internal/pycore_gil.h' line='59' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='_Py_global_strings' size-in-bits='446272' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='31' column='1' id='type-id-1179'>
+    <class-decl name='_Py_global_strings' size-in-bits='446784' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='31' column='1' id='type-id-1179'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='literals' type-id='type-id-1180' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='56' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='9856'>
-        <var-decl name='identifiers' type-id='type-id-1181' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='813' column='1'/>
+        <var-decl name='identifiers' type-id='type-id-1181' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='814' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='331584'>
-        <var-decl name='ascii' type-id='type-id-829' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='817' column='1'/>
+      <data-member access='public' layout-offset-in-bits='332096'>
+        <var-decl name='ascii' type-id='type-id-827' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='818' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='380736'>
-        <var-decl name='latin1' type-id='type-id-827' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='821' column='1'/>
+      <data-member access='public' layout-offset-in-bits='381248'>
+        <var-decl name='latin1' type-id='type-id-829' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='822' column='1'/>
       </data-member>
     </class-decl>
     <class-decl name='__anonymous_struct__58' size-in-bits='9856' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='32' column='1' id='type-id-1180'>
         <var-decl name='_data' type-id='type-id-947' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='53' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__83' size-in-bits='321728' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='58' column='1' id='type-id-1181'>
+    <class-decl name='__anonymous_struct__83' size-in-bits='322240' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='58' column='1' id='type-id-1181'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='_py_CANCELLED' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='59' column='1'/>
       </data-member>
         <var-decl name='_py_onceregistry' type-id='type-id-1190' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='633' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='247424'>
-        <var-decl name='_py_only_keys' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='634' column='1'/>
+        <var-decl name='_py_only_active_thread' type-id='type-id-1204' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='634' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='247872'>
-        <var-decl name='_py_oparg' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='635' column='1'/>
+      <data-member access='public' layout-offset-in-bits='247936'>
+        <var-decl name='_py_only_keys' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='635' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='248256'>
-        <var-decl name='_py_opcode' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='636' column='1'/>
+      <data-member access='public' layout-offset-in-bits='248384'>
+        <var-decl name='_py_oparg' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='636' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='248640'>
-        <var-decl name='_py_open' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='637' column='1'/>
+      <data-member access='public' layout-offset-in-bits='248768'>
+        <var-decl name='_py_opcode' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='637' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='249024'>
-        <var-decl name='_py_opener' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='638' column='1'/>
+      <data-member access='public' layout-offset-in-bits='249152'>
+        <var-decl name='_py_open' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='638' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='249408'>
-        <var-decl name='_py_operation' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='639' column='1'/>
+      <data-member access='public' layout-offset-in-bits='249536'>
+        <var-decl name='_py_opener' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='639' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='249856'>
-        <var-decl name='_py_optimize' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='640' column='1'/>
+      <data-member access='public' layout-offset-in-bits='249920'>
+        <var-decl name='_py_operation' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='640' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='250304'>
-        <var-decl name='_py_options' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='641' column='1'/>
+      <data-member access='public' layout-offset-in-bits='250368'>
+        <var-decl name='_py_optimize' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='641' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='250688'>
-        <var-decl name='_py_order' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='642' column='1'/>
+      <data-member access='public' layout-offset-in-bits='250816'>
+        <var-decl name='_py_options' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='642' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='251072'>
-        <var-decl name='_py_origin' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='643' column='1'/>
+      <data-member access='public' layout-offset-in-bits='251200'>
+        <var-decl name='_py_order' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='643' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='251456'>
-        <var-decl name='_py_out_fd' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='644' column='1'/>
+      <data-member access='public' layout-offset-in-bits='251584'>
+        <var-decl name='_py_origin' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='644' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='251840'>
-        <var-decl name='_py_outgoing' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='645' column='1'/>
+      <data-member access='public' layout-offset-in-bits='251968'>
+        <var-decl name='_py_out_fd' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='645' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='252288'>
-        <var-decl name='_py_outpath' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='646' column='1'/>
+      <data-member access='public' layout-offset-in-bits='252352'>
+        <var-decl name='_py_outgoing' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='646' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='252672'>
-        <var-decl name='_py_overlapped' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='647' column='1'/>
+      <data-member access='public' layout-offset-in-bits='252800'>
+        <var-decl name='_py_outpath' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='647' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='253120'>
-        <var-decl name='_py_owner' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='648' column='1'/>
+      <data-member access='public' layout-offset-in-bits='253184'>
+        <var-decl name='_py_overlapped' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='648' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='253504'>
-        <var-decl name='_py_pages' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='649' column='1'/>
+      <data-member access='public' layout-offset-in-bits='253632'>
+        <var-decl name='_py_owner' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='649' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='253888'>
-        <var-decl name='_py_parameter' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='650' column='1'/>
+      <data-member access='public' layout-offset-in-bits='254016'>
+        <var-decl name='_py_pages' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='650' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='254336'>
-        <var-decl name='_py_parent' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='651' column='1'/>
+      <data-member access='public' layout-offset-in-bits='254400'>
+        <var-decl name='_py_parameter' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='651' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='254720'>
-        <var-decl name='_py_password' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='652' column='1'/>
+      <data-member access='public' layout-offset-in-bits='254848'>
+        <var-decl name='_py_parent' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='652' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='255168'>
-        <var-decl name='_py_path' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='653' column='1'/>
+      <data-member access='public' layout-offset-in-bits='255232'>
+        <var-decl name='_py_password' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='653' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='255552'>
-        <var-decl name='_py_pattern' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='654' column='1'/>
+      <data-member access='public' layout-offset-in-bits='255680'>
+        <var-decl name='_py_path' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='654' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='255936'>
-        <var-decl name='_py_peek' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='655' column='1'/>
+      <data-member access='public' layout-offset-in-bits='256064'>
+        <var-decl name='_py_pattern' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='655' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='256320'>
-        <var-decl name='_py_persistent_id' type-id='type-id-1189' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='656' column='1'/>
+      <data-member access='public' layout-offset-in-bits='256448'>
+        <var-decl name='_py_peek' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='656' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='256768'>
-        <var-decl name='_py_persistent_load' type-id='type-id-1194' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='657' column='1'/>
+      <data-member access='public' layout-offset-in-bits='256832'>
+        <var-decl name='_py_persistent_id' type-id='type-id-1189' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='657' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='257216'>
-        <var-decl name='_py_person' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='658' column='1'/>
+      <data-member access='public' layout-offset-in-bits='257280'>
+        <var-decl name='_py_persistent_load' type-id='type-id-1194' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='658' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='257600'>
-        <var-decl name='_py_pi_factory' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='659' column='1'/>
+      <data-member access='public' layout-offset-in-bits='257728'>
+        <var-decl name='_py_person' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='659' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='258048'>
-        <var-decl name='_py_pid' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='660' column='1'/>
+      <data-member access='public' layout-offset-in-bits='258112'>
+        <var-decl name='_py_pi_factory' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='660' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='258432'>
-        <var-decl name='_py_policy' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='661' column='1'/>
+      <data-member access='public' layout-offset-in-bits='258560'>
+        <var-decl name='_py_pid' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='661' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='258816'>
-        <var-decl name='_py_pos' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='662' column='1'/>
+      <data-member access='public' layout-offset-in-bits='258944'>
+        <var-decl name='_py_policy' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='662' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='259200'>
-        <var-decl name='_py_pos1' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='663' column='1'/>
+      <data-member access='public' layout-offset-in-bits='259328'>
+        <var-decl name='_py_pos' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='663' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='259584'>
-        <var-decl name='_py_pos2' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='664' column='1'/>
+      <data-member access='public' layout-offset-in-bits='259712'>
+        <var-decl name='_py_pos1' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='664' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='259968'>
-        <var-decl name='_py_posix' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='665' column='1'/>
+      <data-member access='public' layout-offset-in-bits='260096'>
+        <var-decl name='_py_pos2' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='665' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='260352'>
-        <var-decl name='_py_print_file_and_line' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='666' column='1'/>
+      <data-member access='public' layout-offset-in-bits='260480'>
+        <var-decl name='_py_posix' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='666' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='260864'>
-        <var-decl name='_py_priority' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='667' column='1'/>
+        <var-decl name='_py_print_file_and_line' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='667' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='261312'>
-        <var-decl name='_py_progress' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='668' column='1'/>
+      <data-member access='public' layout-offset-in-bits='261376'>
+        <var-decl name='_py_priority' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='668' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='261760'>
-        <var-decl name='_py_progress_handler' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='669' column='1'/>
+      <data-member access='public' layout-offset-in-bits='261824'>
+        <var-decl name='_py_progress' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='669' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='262272'>
-        <var-decl name='_py_progress_routine' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='670' column='1'/>
+        <var-decl name='_py_progress_handler' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='670' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='262784'>
-        <var-decl name='_py_proto' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='671' column='1'/>
+        <var-decl name='_py_progress_routine' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='671' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='263168'>
-        <var-decl name='_py_protocol' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='672' column='1'/>
+      <data-member access='public' layout-offset-in-bits='263296'>
+        <var-decl name='_py_proto' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='672' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='263616'>
-        <var-decl name='_py_ps1' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='673' column='1'/>
+      <data-member access='public' layout-offset-in-bits='263680'>
+        <var-decl name='_py_protocol' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='673' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='264000'>
-        <var-decl name='_py_ps2' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='674' column='1'/>
+      <data-member access='public' layout-offset-in-bits='264128'>
+        <var-decl name='_py_ps1' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='674' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='264384'>
-        <var-decl name='_py_query' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='675' column='1'/>
+      <data-member access='public' layout-offset-in-bits='264512'>
+        <var-decl name='_py_ps2' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='675' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='264768'>
-        <var-decl name='_py_quotetabs' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='676' column='1'/>
+      <data-member access='public' layout-offset-in-bits='264896'>
+        <var-decl name='_py_query' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='676' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='265216'>
-        <var-decl name='_py_raw' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='677' column='1'/>
+      <data-member access='public' layout-offset-in-bits='265280'>
+        <var-decl name='_py_quotetabs' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='677' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='265600'>
-        <var-decl name='_py_read' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='678' column='1'/>
+      <data-member access='public' layout-offset-in-bits='265728'>
+        <var-decl name='_py_raw' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='678' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='265984'>
-        <var-decl name='_py_read1' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='679' column='1'/>
+      <data-member access='public' layout-offset-in-bits='266112'>
+        <var-decl name='_py_read' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='679' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='266368'>
-        <var-decl name='_py_readable' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='680' column='1'/>
+      <data-member access='public' layout-offset-in-bits='266496'>
+        <var-decl name='_py_read1' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='680' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='266816'>
-        <var-decl name='_py_readall' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='681' column='1'/>
+      <data-member access='public' layout-offset-in-bits='266880'>
+        <var-decl name='_py_readable' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='681' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='267200'>
-        <var-decl name='_py_readinto' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='682' column='1'/>
+      <data-member access='public' layout-offset-in-bits='267328'>
+        <var-decl name='_py_readall' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='682' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='267648'>
-        <var-decl name='_py_readinto1' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='683' column='1'/>
+      <data-member access='public' layout-offset-in-bits='267712'>
+        <var-decl name='_py_readinto' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='683' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='268096'>
-        <var-decl name='_py_readline' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='684' column='1'/>
+      <data-member access='public' layout-offset-in-bits='268160'>
+        <var-decl name='_py_readinto1' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='684' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='268544'>
-        <var-decl name='_py_readonly' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='685' column='1'/>
+      <data-member access='public' layout-offset-in-bits='268608'>
+        <var-decl name='_py_readline' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='685' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='268992'>
-        <var-decl name='_py_real' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='686' column='1'/>
+      <data-member access='public' layout-offset-in-bits='269056'>
+        <var-decl name='_py_readonly' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='686' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='269376'>
-        <var-decl name='_py_reducer_override' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='687' column='1'/>
+      <data-member access='public' layout-offset-in-bits='269504'>
+        <var-decl name='_py_real' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='687' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='269888'>
-        <var-decl name='_py_registry' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='688' column='1'/>
+        <var-decl name='_py_reducer_override' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='688' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='270336'>
-        <var-decl name='_py_rel_tol' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='689' column='1'/>
+      <data-member access='public' layout-offset-in-bits='270400'>
+        <var-decl name='_py_registry' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='689' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='270720'>
-        <var-decl name='_py_release' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='690' column='1'/>
+      <data-member access='public' layout-offset-in-bits='270848'>
+        <var-decl name='_py_rel_tol' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='690' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='271104'>
-        <var-decl name='_py_reload' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='691' column='1'/>
+      <data-member access='public' layout-offset-in-bits='271232'>
+        <var-decl name='_py_release' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='691' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='271488'>
-        <var-decl name='_py_repl' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='692' column='1'/>
+      <data-member access='public' layout-offset-in-bits='271616'>
+        <var-decl name='_py_reload' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='692' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='271872'>
-        <var-decl name='_py_replace' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='693' column='1'/>
+      <data-member access='public' layout-offset-in-bits='272000'>
+        <var-decl name='_py_repl' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='693' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='272256'>
-        <var-decl name='_py_reserved' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='694' column='1'/>
+      <data-member access='public' layout-offset-in-bits='272384'>
+        <var-decl name='_py_replace' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='694' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='272704'>
-        <var-decl name='_py_reset' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='695' column='1'/>
+      <data-member access='public' layout-offset-in-bits='272768'>
+        <var-decl name='_py_reserved' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='695' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='273088'>
-        <var-decl name='_py_resetids' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='696' column='1'/>
+      <data-member access='public' layout-offset-in-bits='273216'>
+        <var-decl name='_py_reset' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='696' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='273536'>
-        <var-decl name='_py_return' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='697' column='1'/>
+      <data-member access='public' layout-offset-in-bits='273600'>
+        <var-decl name='_py_resetids' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='697' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='273920'>
-        <var-decl name='_py_reverse' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='698' column='1'/>
+      <data-member access='public' layout-offset-in-bits='274048'>
+        <var-decl name='_py_return' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='698' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='274304'>
-        <var-decl name='_py_reversed' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='699' column='1'/>
+      <data-member access='public' layout-offset-in-bits='274432'>
+        <var-decl name='_py_reverse' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='699' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='274752'>
-        <var-decl name='_py_salt' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='700' column='1'/>
+      <data-member access='public' layout-offset-in-bits='274816'>
+        <var-decl name='_py_reversed' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='700' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='275136'>
-        <var-decl name='_py_sched_priority' type-id='type-id-1196' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='701' column='1'/>
+      <data-member access='public' layout-offset-in-bits='275264'>
+        <var-decl name='_py_salt' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='701' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='275584'>
-        <var-decl name='_py_scheduler' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='702' column='1'/>
+      <data-member access='public' layout-offset-in-bits='275648'>
+        <var-decl name='_py_sched_priority' type-id='type-id-1196' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='702' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='276032'>
-        <var-decl name='_py_script' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='703' column='1'/>
+      <data-member access='public' layout-offset-in-bits='276096'>
+        <var-decl name='_py_scheduler' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='703' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='276416'>
-        <var-decl name='_py_second' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='704' column='1'/>
+      <data-member access='public' layout-offset-in-bits='276544'>
+        <var-decl name='_py_script' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='704' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='276800'>
-        <var-decl name='_py_security_attributes' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='705' column='1'/>
+      <data-member access='public' layout-offset-in-bits='276928'>
+        <var-decl name='_py_second' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='705' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='277312'>
-        <var-decl name='_py_seek' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='706' column='1'/>
+        <var-decl name='_py_security_attributes' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='706' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='277696'>
-        <var-decl name='_py_seekable' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='707' column='1'/>
+      <data-member access='public' layout-offset-in-bits='277824'>
+        <var-decl name='_py_seek' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='707' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='278144'>
-        <var-decl name='_py_selectors' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='708' column='1'/>
+      <data-member access='public' layout-offset-in-bits='278208'>
+        <var-decl name='_py_seekable' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='708' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='278592'>
-        <var-decl name='_py_self' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='709' column='1'/>
+      <data-member access='public' layout-offset-in-bits='278656'>
+        <var-decl name='_py_selectors' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='709' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='278976'>
-        <var-decl name='_py_send' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='710' column='1'/>
+      <data-member access='public' layout-offset-in-bits='279104'>
+        <var-decl name='_py_self' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='710' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='279360'>
-        <var-decl name='_py_sep' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='711' column='1'/>
+      <data-member access='public' layout-offset-in-bits='279488'>
+        <var-decl name='_py_send' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='711' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='279744'>
-        <var-decl name='_py_sequence' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='712' column='1'/>
+      <data-member access='public' layout-offset-in-bits='279872'>
+        <var-decl name='_py_sep' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='712' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='280192'>
-        <var-decl name='_py_server_hostname' type-id='type-id-1194' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='713' column='1'/>
+      <data-member access='public' layout-offset-in-bits='280256'>
+        <var-decl name='_py_sequence' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='713' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='280640'>
-        <var-decl name='_py_server_side' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='714' column='1'/>
+      <data-member access='public' layout-offset-in-bits='280704'>
+        <var-decl name='_py_server_hostname' type-id='type-id-1194' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='714' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='281088'>
-        <var-decl name='_py_session' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='715' column='1'/>
+      <data-member access='public' layout-offset-in-bits='281152'>
+        <var-decl name='_py_server_side' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='715' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='281472'>
-        <var-decl name='_py_setcomp' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='716' column='1'/>
+      <data-member access='public' layout-offset-in-bits='281600'>
+        <var-decl name='_py_session' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='716' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='281856'>
-        <var-decl name='_py_setpgroup' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='717' column='1'/>
+      <data-member access='public' layout-offset-in-bits='281984'>
+        <var-decl name='_py_setcomp' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='717' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='282304'>
-        <var-decl name='_py_setsid' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='718' column='1'/>
+      <data-member access='public' layout-offset-in-bits='282368'>
+        <var-decl name='_py_setpgroup' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='718' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='282688'>
-        <var-decl name='_py_setsigdef' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='719' column='1'/>
+      <data-member access='public' layout-offset-in-bits='282816'>
+        <var-decl name='_py_setsid' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='719' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='283136'>
-        <var-decl name='_py_setsigmask' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='720' column='1'/>
+      <data-member access='public' layout-offset-in-bits='283200'>
+        <var-decl name='_py_setsigdef' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='720' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='283584'>
-        <var-decl name='_py_setstate' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='721' column='1'/>
+      <data-member access='public' layout-offset-in-bits='283648'>
+        <var-decl name='_py_setsigmask' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='721' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='284032'>
-        <var-decl name='_py_shape' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='722' column='1'/>
+      <data-member access='public' layout-offset-in-bits='284096'>
+        <var-decl name='_py_setstate' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='722' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='284416'>
-        <var-decl name='_py_show_cmd' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='723' column='1'/>
+      <data-member access='public' layout-offset-in-bits='284544'>
+        <var-decl name='_py_shape' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='723' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='284864'>
-        <var-decl name='_py_signed' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='724' column='1'/>
+      <data-member access='public' layout-offset-in-bits='284928'>
+        <var-decl name='_py_show_cmd' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='724' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='285248'>
-        <var-decl name='_py_size' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='725' column='1'/>
+      <data-member access='public' layout-offset-in-bits='285376'>
+        <var-decl name='_py_signed' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='725' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='285632'>
-        <var-decl name='_py_sizehint' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='726' column='1'/>
+      <data-member access='public' layout-offset-in-bits='285760'>
+        <var-decl name='_py_size' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='726' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='286080'>
-        <var-decl name='_py_skip_file_prefixes' type-id='type-id-1204' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='727' column='1'/>
+      <data-member access='public' layout-offset-in-bits='286144'>
+        <var-decl name='_py_sizehint' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='727' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='286592'>
-        <var-decl name='_py_sleep' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='728' column='1'/>
+        <var-decl name='_py_skip_file_prefixes' type-id='type-id-1204' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='728' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='286976'>
-        <var-decl name='_py_sock' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='729' column='1'/>
+      <data-member access='public' layout-offset-in-bits='287104'>
+        <var-decl name='_py_sleep' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='729' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='287360'>
-        <var-decl name='_py_sort' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='730' column='1'/>
+      <data-member access='public' layout-offset-in-bits='287488'>
+        <var-decl name='_py_sock' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='730' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='287744'>
-        <var-decl name='_py_source' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='731' column='1'/>
+      <data-member access='public' layout-offset-in-bits='287872'>
+        <var-decl name='_py_sort' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='731' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='288128'>
-        <var-decl name='_py_source_traceback' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='732' column='1'/>
+      <data-member access='public' layout-offset-in-bits='288256'>
+        <var-decl name='_py_source' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='732' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='288640'>
-        <var-decl name='_py_spam' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='733' column='1'/>
+        <var-decl name='_py_source_traceback' type-id='type-id-1202' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='733' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='289024'>
-        <var-decl name='_py_src' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='734' column='1'/>
+      <data-member access='public' layout-offset-in-bits='289152'>
+        <var-decl name='_py_spam' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='734' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='289408'>
-        <var-decl name='_py_src_dir_fd' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='735' column='1'/>
+      <data-member access='public' layout-offset-in-bits='289536'>
+        <var-decl name='_py_src' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='735' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='289856'>
-        <var-decl name='_py_stacklevel' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='736' column='1'/>
+      <data-member access='public' layout-offset-in-bits='289920'>
+        <var-decl name='_py_src_dir_fd' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='736' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='290304'>
-        <var-decl name='_py_start' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='737' column='1'/>
+      <data-member access='public' layout-offset-in-bits='290368'>
+        <var-decl name='_py_stacklevel' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='737' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='290688'>
-        <var-decl name='_py_statement' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='738' column='1'/>
+      <data-member access='public' layout-offset-in-bits='290816'>
+        <var-decl name='_py_start' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='738' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='291136'>
-        <var-decl name='_py_status' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='739' column='1'/>
+      <data-member access='public' layout-offset-in-bits='291200'>
+        <var-decl name='_py_statement' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='739' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='291520'>
-        <var-decl name='_py_stderr' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='740' column='1'/>
+      <data-member access='public' layout-offset-in-bits='291648'>
+        <var-decl name='_py_status' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='740' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='291904'>
-        <var-decl name='_py_stdin' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='741' column='1'/>
+      <data-member access='public' layout-offset-in-bits='292032'>
+        <var-decl name='_py_stderr' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='741' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='292288'>
-        <var-decl name='_py_stdout' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='742' column='1'/>
+      <data-member access='public' layout-offset-in-bits='292416'>
+        <var-decl name='_py_stdin' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='742' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='292672'>
-        <var-decl name='_py_step' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='743' column='1'/>
+      <data-member access='public' layout-offset-in-bits='292800'>
+        <var-decl name='_py_stdout' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='743' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='293056'>
-        <var-decl name='_py_steps' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='744' column='1'/>
+      <data-member access='public' layout-offset-in-bits='293184'>
+        <var-decl name='_py_step' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='744' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='293440'>
-        <var-decl name='_py_store_name' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='745' column='1'/>
+      <data-member access='public' layout-offset-in-bits='293568'>
+        <var-decl name='_py_steps' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='745' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='293888'>
-        <var-decl name='_py_strategy' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='746' column='1'/>
+      <data-member access='public' layout-offset-in-bits='293952'>
+        <var-decl name='_py_store_name' type-id='type-id-1182' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='746' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='294336'>
-        <var-decl name='_py_strftime' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='747' column='1'/>
+      <data-member access='public' layout-offset-in-bits='294400'>
+        <var-decl name='_py_strategy' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='747' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='294784'>
-        <var-decl name='_py_strict' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='748' column='1'/>
+      <data-member access='public' layout-offset-in-bits='294848'>
+        <var-decl name='_py_strftime' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='748' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='295168'>
-        <var-decl name='_py_strict_mode' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='749' column='1'/>
+      <data-member access='public' layout-offset-in-bits='295296'>
+        <var-decl name='_py_strict' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='749' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='295616'>
-        <var-decl name='_py_string' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='750' column='1'/>
+      <data-member access='public' layout-offset-in-bits='295680'>
+        <var-decl name='_py_strict_mode' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='750' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='296000'>
-        <var-decl name='_py_sub_key' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='751' column='1'/>
+      <data-member access='public' layout-offset-in-bits='296128'>
+        <var-decl name='_py_string' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='751' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='296384'>
-        <var-decl name='_py_subcalls' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='752' column='1'/>
+      <data-member access='public' layout-offset-in-bits='296512'>
+        <var-decl name='_py_sub_key' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='752' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='296832'>
-        <var-decl name='_py_symmetric_difference_update' type-id='type-id-1200' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='753' column='1'/>
+      <data-member access='public' layout-offset-in-bits='296896'>
+        <var-decl name='_py_subcalls' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='753' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='297408'>
-        <var-decl name='_py_tabsize' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='754' column='1'/>
+      <data-member access='public' layout-offset-in-bits='297344'>
+        <var-decl name='_py_symmetric_difference_update' type-id='type-id-1200' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='754' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='297792'>
-        <var-decl name='_py_tag' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='755' column='1'/>
+      <data-member access='public' layout-offset-in-bits='297920'>
+        <var-decl name='_py_tabsize' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='755' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='298176'>
-        <var-decl name='_py_target' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='756' column='1'/>
+      <data-member access='public' layout-offset-in-bits='298304'>
+        <var-decl name='_py_tag' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='756' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='298560'>
-        <var-decl name='_py_target_is_directory' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='757' column='1'/>
+      <data-member access='public' layout-offset-in-bits='298688'>
+        <var-decl name='_py_target' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='757' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='299072'>
-        <var-decl name='_py_task' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='758' column='1'/>
+        <var-decl name='_py_target_is_directory' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='758' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='299456'>
-        <var-decl name='_py_tb_frame' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='759' column='1'/>
+      <data-member access='public' layout-offset-in-bits='299584'>
+        <var-decl name='_py_task' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='759' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='299904'>
-        <var-decl name='_py_tb_lasti' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='760' column='1'/>
+      <data-member access='public' layout-offset-in-bits='299968'>
+        <var-decl name='_py_tb_frame' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='760' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='300352'>
-        <var-decl name='_py_tb_lineno' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='761' column='1'/>
+      <data-member access='public' layout-offset-in-bits='300416'>
+        <var-decl name='_py_tb_lasti' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='761' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='300800'>
-        <var-decl name='_py_tb_next' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='762' column='1'/>
+      <data-member access='public' layout-offset-in-bits='300864'>
+        <var-decl name='_py_tb_lineno' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='762' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='301184'>
-        <var-decl name='_py_tell' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='763' column='1'/>
+      <data-member access='public' layout-offset-in-bits='301312'>
+        <var-decl name='_py_tb_next' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='763' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='301568'>
-        <var-decl name='_py_template' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='764' column='1'/>
+      <data-member access='public' layout-offset-in-bits='301696'>
+        <var-decl name='_py_tell' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='764' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='302016'>
-        <var-decl name='_py_term' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='765' column='1'/>
+      <data-member access='public' layout-offset-in-bits='302080'>
+        <var-decl name='_py_template' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='765' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='302400'>
-        <var-decl name='_py_text' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='766' column='1'/>
+      <data-member access='public' layout-offset-in-bits='302528'>
+        <var-decl name='_py_term' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='766' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='302784'>
-        <var-decl name='_py_threading' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='767' column='1'/>
+      <data-member access='public' layout-offset-in-bits='302912'>
+        <var-decl name='_py_text' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='767' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='303232'>
-        <var-decl name='_py_throw' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='768' column='1'/>
+      <data-member access='public' layout-offset-in-bits='303296'>
+        <var-decl name='_py_threading' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='768' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='303616'>
-        <var-decl name='_py_timeout' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='769' column='1'/>
+      <data-member access='public' layout-offset-in-bits='303744'>
+        <var-decl name='_py_throw' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='769' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='304000'>
-        <var-decl name='_py_timer' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='770' column='1'/>
+      <data-member access='public' layout-offset-in-bits='304128'>
+        <var-decl name='_py_timeout' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='770' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='304384'>
-        <var-decl name='_py_times' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='771' column='1'/>
+      <data-member access='public' layout-offset-in-bits='304512'>
+        <var-decl name='_py_timer' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='771' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='304768'>
-        <var-decl name='_py_timetuple' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='772' column='1'/>
+      <data-member access='public' layout-offset-in-bits='304896'>
+        <var-decl name='_py_times' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='772' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='305216'>
-        <var-decl name='_py_timeunit' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='773' column='1'/>
+      <data-member access='public' layout-offset-in-bits='305280'>
+        <var-decl name='_py_timetuple' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='773' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='305664'>
-        <var-decl name='_py_top' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='774' column='1'/>
+      <data-member access='public' layout-offset-in-bits='305728'>
+        <var-decl name='_py_timeunit' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='774' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='306048'>
-        <var-decl name='_py_trace_callback' type-id='type-id-1196' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='775' column='1'/>
+      <data-member access='public' layout-offset-in-bits='306176'>
+        <var-decl name='_py_top' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='775' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='306496'>
-        <var-decl name='_py_traceback' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='776' column='1'/>
+      <data-member access='public' layout-offset-in-bits='306560'>
+        <var-decl name='_py_trace_callback' type-id='type-id-1196' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='776' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='306944'>
-        <var-decl name='_py_trailers' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='777' column='1'/>
+      <data-member access='public' layout-offset-in-bits='307008'>
+        <var-decl name='_py_traceback' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='777' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='307392'>
-        <var-decl name='_py_translate' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='778' column='1'/>
+      <data-member access='public' layout-offset-in-bits='307456'>
+        <var-decl name='_py_trailers' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='778' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='307840'>
-        <var-decl name='_py_true' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='779' column='1'/>
+      <data-member access='public' layout-offset-in-bits='307904'>
+        <var-decl name='_py_translate' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='779' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='308224'>
-        <var-decl name='_py_truncate' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='780' column='1'/>
+      <data-member access='public' layout-offset-in-bits='308352'>
+        <var-decl name='_py_true' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='780' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='308672'>
-        <var-decl name='_py_twice' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='781' column='1'/>
+      <data-member access='public' layout-offset-in-bits='308736'>
+        <var-decl name='_py_truncate' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='781' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='309056'>
-        <var-decl name='_py_txt' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='782' column='1'/>
+      <data-member access='public' layout-offset-in-bits='309184'>
+        <var-decl name='_py_twice' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='782' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='309440'>
-        <var-decl name='_py_type' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='783' column='1'/>
+      <data-member access='public' layout-offset-in-bits='309568'>
+        <var-decl name='_py_txt' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='783' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='309824'>
-        <var-decl name='_py_type_params' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='784' column='1'/>
+      <data-member access='public' layout-offset-in-bits='309952'>
+        <var-decl name='_py_type' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='784' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='310272'>
-        <var-decl name='_py_tz' type-id='type-id-1186' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='785' column='1'/>
+      <data-member access='public' layout-offset-in-bits='310336'>
+        <var-decl name='_py_type_params' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='785' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='310656'>
-        <var-decl name='_py_tzinfo' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='786' column='1'/>
+      <data-member access='public' layout-offset-in-bits='310784'>
+        <var-decl name='_py_tz' type-id='type-id-1186' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='786' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='311040'>
-        <var-decl name='_py_tzname' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='787' column='1'/>
+      <data-member access='public' layout-offset-in-bits='311168'>
+        <var-decl name='_py_tzinfo' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='787' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='311424'>
-        <var-decl name='_py_uid' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='788' column='1'/>
+      <data-member access='public' layout-offset-in-bits='311552'>
+        <var-decl name='_py_tzname' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='788' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='311808'>
-        <var-decl name='_py_unlink' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='789' column='1'/>
+      <data-member access='public' layout-offset-in-bits='311936'>
+        <var-decl name='_py_uid' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='789' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='312192'>
-        <var-decl name='_py_unraisablehook' type-id='type-id-1196' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='790' column='1'/>
+      <data-member access='public' layout-offset-in-bits='312320'>
+        <var-decl name='_py_unlink' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='790' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='312640'>
-        <var-decl name='_py_uri' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='791' column='1'/>
+      <data-member access='public' layout-offset-in-bits='312704'>
+        <var-decl name='_py_unraisablehook' type-id='type-id-1196' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='791' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='313024'>
-        <var-decl name='_py_usedforsecurity' type-id='type-id-1194' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='792' column='1'/>
+      <data-member access='public' layout-offset-in-bits='313152'>
+        <var-decl name='_py_uri' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='792' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='313472'>
-        <var-decl name='_py_value' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='793' column='1'/>
+      <data-member access='public' layout-offset-in-bits='313536'>
+        <var-decl name='_py_usedforsecurity' type-id='type-id-1194' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='793' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='313856'>
-        <var-decl name='_py_values' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='794' column='1'/>
+      <data-member access='public' layout-offset-in-bits='313984'>
+        <var-decl name='_py_value' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='794' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='314240'>
-        <var-decl name='_py_version' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='795' column='1'/>
+      <data-member access='public' layout-offset-in-bits='314368'>
+        <var-decl name='_py_values' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='795' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='314624'>
-        <var-decl name='_py_volume' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='796' column='1'/>
+      <data-member access='public' layout-offset-in-bits='314752'>
+        <var-decl name='_py_version' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='796' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='315008'>
-        <var-decl name='_py_wait_all' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='797' column='1'/>
+      <data-member access='public' layout-offset-in-bits='315136'>
+        <var-decl name='_py_volume' type-id='type-id-1185' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='797' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='315456'>
-        <var-decl name='_py_warn_on_full_buffer' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='798' column='1'/>
+      <data-member access='public' layout-offset-in-bits='315520'>
+        <var-decl name='_py_wait_all' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='798' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='315968'>
-        <var-decl name='_py_warnings' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='799' column='1'/>
+        <var-decl name='_py_warn_on_full_buffer' type-id='type-id-1198' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='799' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='316416'>
-        <var-decl name='_py_warnoptions' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='800' column='1'/>
+      <data-member access='public' layout-offset-in-bits='316480'>
+        <var-decl name='_py_warnings' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='800' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='316864'>
-        <var-decl name='_py_wbits' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='801' column='1'/>
+      <data-member access='public' layout-offset-in-bits='316928'>
+        <var-decl name='_py_warnoptions' type-id='type-id-1191' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='801' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='317248'>
-        <var-decl name='_py_week' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='802' column='1'/>
+      <data-member access='public' layout-offset-in-bits='317376'>
+        <var-decl name='_py_wbits' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='802' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='317632'>
-        <var-decl name='_py_weekday' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='803' column='1'/>
+      <data-member access='public' layout-offset-in-bits='317760'>
+        <var-decl name='_py_week' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='803' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='318016'>
-        <var-decl name='_py_which' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='804' column='1'/>
+      <data-member access='public' layout-offset-in-bits='318144'>
+        <var-decl name='_py_weekday' type-id='type-id-1188' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='804' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='318400'>
-        <var-decl name='_py_who' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='805' column='1'/>
+      <data-member access='public' layout-offset-in-bits='318528'>
+        <var-decl name='_py_which' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='805' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='318784'>
-        <var-decl name='_py_withdata' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='806' column='1'/>
+      <data-member access='public' layout-offset-in-bits='318912'>
+        <var-decl name='_py_who' type-id='type-id-1207' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='806' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='319232'>
-        <var-decl name='_py_writable' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='807' column='1'/>
+      <data-member access='public' layout-offset-in-bits='319296'>
+        <var-decl name='_py_withdata' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='807' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='319680'>
-        <var-decl name='_py_write' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='808' column='1'/>
+      <data-member access='public' layout-offset-in-bits='319744'>
+        <var-decl name='_py_writable' type-id='type-id-1184' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='808' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='320064'>
-        <var-decl name='_py_write_through' type-id='type-id-1189' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='809' column='1'/>
+      <data-member access='public' layout-offset-in-bits='320192'>
+        <var-decl name='_py_write' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='809' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='320512'>
-        <var-decl name='_py_year' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='810' column='1'/>
+      <data-member access='public' layout-offset-in-bits='320576'>
+        <var-decl name='_py_write_through' type-id='type-id-1189' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='810' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='320896'>
-        <var-decl name='_py_zdict' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='811' column='1'/>
+      <data-member access='public' layout-offset-in-bits='321024'>
+        <var-decl name='_py_year' type-id='type-id-1195' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='811' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='321280'>
-        <var-decl name='_py_zstd_dict' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='812' column='1'/>
+      <data-member access='public' layout-offset-in-bits='321408'>
+        <var-decl name='_py_zdict' type-id='type-id-1193' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='812' column='1'/>
+      </data-member>
+      <data-member access='public' layout-offset-in-bits='321792'>
+        <var-decl name='_py_zstd_dict' type-id='type-id-1183' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='813' column='1'/>
       </data-member>
     </class-decl>
     <class-decl name='__anonymous_struct__87' size-in-bits='448' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='62' column='1' id='type-id-1194'>
         <var-decl name='_data' type-id='type-id-932' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='331' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__838' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='814' column='1' id='type-id-828'>
+    <class-decl name='__anonymous_struct__839' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='815' column='1' id='type-id-826'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='_ascii' type-id='type-id-1058' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='815' column='1'/>
+        <var-decl name='_ascii' type-id='type-id-1058' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='816' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='320'>
-        <var-decl name='_data' type-id='type-id-940' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='816' column='1'/>
+        <var-decl name='_data' type-id='type-id-940' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='817' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__839' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='818' column='1' id='type-id-826'>
+    <class-decl name='__anonymous_struct__840' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='819' column='1' id='type-id-828'>
       <data-member access='public' layout-offset-in-bits='0'>
-        <var-decl name='_latin1' type-id='type-id-1061' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='819' column='1'/>
+        <var-decl name='_latin1' type-id='type-id-1061' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='820' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='448'>
-        <var-decl name='_data' type-id='type-id-940' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='820' column='1'/>
+        <var-decl name='_data' type-id='type-id-940' visibility='default' filepath='./Include/internal/pycore_global_strings.h' line='821' column='1'/>
       </data-member>
     </class-decl>
     <class-decl name='_Py_slist_item_s' size-in-bits='64' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_hashtable.h' line='13' column='1' id='type-id-1210'>
         <var-decl name='find_and_load' type-id='type-id-1261' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='328' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__840' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='324' column='1' id='type-id-1261'>
+    <class-decl name='__anonymous_struct__841' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='324' column='1' id='type-id-1261'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='import_level' type-id='type-id-5' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='325' column='1'/>
       </data-member>
         <var-decl name='type_version_cache' type-id='type-id-820' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='584' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__841' size-in-bits='76864' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='568' column='1' id='type-id-1277'>
+    <class-decl name='__anonymous_struct__842' size-in-bits='76864' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='568' column='1' id='type-id-1277'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='num_initialized' type-id='type-id-21' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='569' column='1'/>
       </data-member>
         <var-decl name='initialized' type-id='type-id-895' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='570' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__842' size-in-bits='3968' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='573' column='1' id='type-id-1278'>
+    <class-decl name='__anonymous_struct__843' size-in-bits='3968' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='573' column='1' id='type-id-1278'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='num_initialized' type-id='type-id-21' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='574' column='1'/>
       </data-member>
         <var-decl name='singletons' type-id='type-id-1293' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='700' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__843' size-in-bits='1088' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='694' column='1' id='type-id-1293'>
+    <class-decl name='__anonymous_struct__844' size-in-bits='1088' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='694' column='1' id='type-id-1293'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='_not_used' type-id='type-id-5' visibility='default' filepath='./Include/internal/pycore_interp_structs.h' line='695' column='1'/>
       </data-member>
         <var-decl name='interned_strings' type-id='type-id-618' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='105' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='_Py_static_objects' size-in-bits='612992' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='114' column='1' id='type-id-1350'>
+    <class-decl name='_Py_static_objects' size-in-bits='613504' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='114' column='1' id='type-id-1350'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='singletons' type-id='type-id-1351' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='137' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='__anonymous_struct__56' size-in-bits='612992' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='115' column='1' id='type-id-1351'>
+    <class-decl name='__anonymous_struct__56' size-in-bits='613504' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='115' column='1' id='type-id-1351'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='small_ints' type-id='type-id-813' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='121' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='165696'>
         <var-decl name='strings' type-id='type-id-1179' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='129' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='611968'>
+      <data-member access='public' layout-offset-in-bits='612480'>
         <var-decl name='_tuple_empty_gc_not_used' type-id='type-id-1253' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='131' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='612096'>
+      <data-member access='public' layout-offset-in-bits='612608'>
         <var-decl name='tuple_empty' type-id='type-id-1056' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='132' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='612416'>
+      <data-member access='public' layout-offset-in-bits='612928'>
         <var-decl name='_hamt_bitmap_node_empty_gc_not_used' type-id='type-id-1253' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='134' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='612544'>
+      <data-member access='public' layout-offset-in-bits='613056'>
         <var-decl name='hamt_bitmap_node_empty' type-id='type-id-1352' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='135' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='612864'>
+      <data-member access='public' layout-offset-in-bits='613376'>
         <var-decl name='context_token_missing' type-id='type-id-1117' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='136' column='1'/>
       </data-member>
     </class-decl>
         <var-decl name='eos' type-id='type-id-58' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='126' column='1'/>
       </data-member>
     </class-decl>
-    <class-decl name='pyruntimestate' size-in-bits='2531776' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='146' column='1' id='type-id-1353'>
+    <class-decl name='pyruntimestate' size-in-bits='2532288' is-struct='yes' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='146' column='1' id='type-id-1353'>
       <data-member access='public' layout-offset-in-bits='0'>
         <var-decl name='debug_offsets' type-id='type-id-1164' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='159' column='1'/>
       </data-member>
       <data-member access='public' layout-offset-in-bits='112320'>
         <var-decl name='static_objects' type-id='type-id-1350' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='290' column='1'/>
       </data-member>
-      <data-member access='public' layout-offset-in-bits='725312'>
+      <data-member access='public' layout-offset-in-bits='725824'>
         <var-decl name='_main_interpreter' type-id='type-id-1361' visibility='default' filepath='./Include/internal/pycore_runtime_structs.h' line='307' column='1'/>
       </data-member>
     </class-decl>
index ad70772fc334dea20b0ec93bd4ca20148cb94e7f..5997858378cfe0acec3503a0d57734a318cee5a6 100644 (file)
@@ -1140,6 +1140,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(offset_src));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(on_type_read));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(onceregistry));
+    _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(only_active_thread));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(only_keys));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(oparg));
     _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(opcode));
index c26715f6f6e23edf025db10afb6c4b72e8a51e1e..bab5da70f3400c19d2e1bfd3cfde63bbae637373 100644 (file)
@@ -631,6 +631,7 @@ struct _Py_global_strings {
         STRUCT_FOR_ID(offset_src)
         STRUCT_FOR_ID(on_type_read)
         STRUCT_FOR_ID(onceregistry)
+        STRUCT_FOR_ID(only_active_thread)
         STRUCT_FOR_ID(only_keys)
         STRUCT_FOR_ID(oparg)
         STRUCT_FOR_ID(opcode)
index baf528fd2f641fdea35b6cfddec77ffce29657f6..e642a42bbfc3e417245a3d00c6842c64c03b7293 100644 (file)
@@ -1138,6 +1138,7 @@ extern "C" {
     INIT_ID(offset_src), \
     INIT_ID(on_type_read), \
     INIT_ID(onceregistry), \
+    INIT_ID(only_active_thread), \
     INIT_ID(only_keys), \
     INIT_ID(oparg), \
     INIT_ID(opcode), \
index 08404ee5bbb6fb2332c82012fae3edfda310995e..c3ecdf64c6ee0063276314c7c81183f14c3398a6 100644 (file)
@@ -2312,6 +2312,10 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
     _PyUnicode_InternStatic(interp, &string);
     assert(_PyUnicode_CheckConsistency(string, 1));
     assert(PyUnicode_GET_LENGTH(string) != 1);
+    string = &_Py_ID(only_active_thread);
+    _PyUnicode_InternStatic(interp, &string);
+    assert(_PyUnicode_CheckConsistency(string, 1));
+    assert(PyUnicode_GET_LENGTH(string) != 1);
     string = &_Py_ID(only_keys);
     _PyUnicode_InternStatic(interp, &string);
     assert(_PyUnicode_CheckConsistency(string, 1));
index 90214e814f2b35efd0301b5f2f685b3c461159d9..0f31c225e68de37e837d853b06886b0cd0479c9e 100644 (file)
@@ -7,7 +7,7 @@ import socket
 import threading
 from asyncio import staggered, taskgroups, base_events, tasks
 from unittest.mock import ANY
-from test.support import os_helper, SHORT_TIMEOUT, busy_retry
+from test.support import os_helper, SHORT_TIMEOUT, busy_retry, requires_gil_enabled
 from test.support.script_helper import make_script
 from test.support.socket_helper import find_unused_port
 
@@ -876,6 +876,126 @@ class TestGetStackTrace(unittest.TestCase):
             ],
         )
 
+    @skip_if_not_supported
+    @unittest.skipIf(
+        sys.platform == "linux" and not PROCESS_VM_READV_SUPPORTED,
+        "Test only runs on Linux with process_vm_readv support",
+    )
+    @requires_gil_enabled("Free threaded builds don't have an 'active thread'")
+    def test_only_active_thread(self):
+        # Test that only_active_thread parameter works correctly
+        port = find_unused_port()
+        script = textwrap.dedent(
+            f"""\
+            import time, sys, socket, threading
+
+            # Connect to the test process
+            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            sock.connect(('localhost', {port}))
+
+            def worker_thread(name, barrier, ready_event):
+                barrier.wait()  # Synchronize thread start
+                ready_event.wait()  # Wait for main thread signal
+                # Sleep to keep thread alive
+                time.sleep(10_000)
+
+            def main_work():
+                # Do busy work to hold the GIL
+                sock.sendall(b"working\\n")
+                count = 0
+                while count < 100000000:
+                    count += 1
+                    if count % 10000000 == 0:
+                        pass  # Keep main thread busy
+                sock.sendall(b"done\\n")
+
+            # Create synchronization primitives
+            num_threads = 3
+            barrier = threading.Barrier(num_threads + 1)  # +1 for main thread
+            ready_event = threading.Event()
+
+            # Start worker threads
+            threads = []
+            for i in range(num_threads):
+                t = threading.Thread(target=worker_thread, args=(f"Worker-{{i}}", barrier, ready_event))
+                t.start()
+                threads.append(t)
+
+            # Wait for all threads to be ready
+            barrier.wait()
+
+            # Signal ready to parent process
+            sock.sendall(b"ready\\n")
+
+            # Signal threads to start waiting
+            ready_event.set()
+
+            # Give threads time to start sleeping
+            time.sleep(0.1)
+
+            # Now do busy work to hold the GIL
+            main_work()
+            """
+        )
+
+        with os_helper.temp_dir() as work_dir:
+            script_dir = os.path.join(work_dir, "script_pkg")
+            os.mkdir(script_dir)
+
+            # Create a socket server to communicate with the target process
+            server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+            server_socket.bind(("localhost", port))
+            server_socket.settimeout(SHORT_TIMEOUT)
+            server_socket.listen(1)
+
+            script_name = _make_test_script(script_dir, "script", script)
+            client_socket = None
+            try:
+                p = subprocess.Popen([sys.executable, script_name])
+                client_socket, _ = server_socket.accept()
+                server_socket.close()
+
+                # Wait for ready signal
+                response = b""
+                while b"ready" not in response:
+                    response += client_socket.recv(1024)
+
+                # Wait for the main thread to start its busy work
+                while b"working" not in response:
+                    response += client_socket.recv(1024)
+
+                # Get stack trace with all threads
+                unwinder_all = RemoteUnwinder(p.pid, all_threads=True)
+                all_traces = unwinder_all.get_stack_trace()
+
+                # Get stack trace with only GIL holder
+                unwinder_gil = RemoteUnwinder(p.pid, only_active_thread=True)
+                gil_traces = unwinder_gil.get_stack_trace()
+
+            except PermissionError:
+                self.skipTest(
+                    "Insufficient permissions to read the stack trace"
+                )
+            finally:
+                if client_socket is not None:
+                    client_socket.close()
+                p.kill()
+                p.terminate()
+                p.wait(timeout=SHORT_TIMEOUT)
+
+            # Verify we got multiple threads in all_traces
+            self.assertGreater(len(all_traces), 1, "Should have multiple threads")
+
+            # Verify we got exactly one thread in gil_traces
+            self.assertEqual(len(gil_traces), 1, "Should have exactly one GIL holder")
+
+            # The GIL holder should be in the all_traces list
+            gil_thread_id = gil_traces[0][0]
+            all_thread_ids = [trace[0] for trace in all_traces]
+            self.assertIn(gil_thread_id, all_thread_ids,
+                         "GIL holder should be among all threads")
+
 
 if __name__ == "__main__":
     unittest.main()
index 416298d7479df36b15354a6a176265aa4d24ac45..e744fe6581598520fa48c2b5b6d24ad84e465d2a 100644 (file)
 #endif
 
 #ifdef Py_GIL_DISABLED
-#define INTERP_STATE_MIN_SIZE MAX(MAX(offsetof(PyInterpreterState, _code_object_generation) + sizeof(uint64_t), \
-                                      offsetof(PyInterpreterState, tlbc_indices.tlbc_generation) + sizeof(uint32_t)), \
-                                  offsetof(PyInterpreterState, threads.head) + sizeof(void*))
+#define INTERP_STATE_MIN_SIZE MAX(MAX(MAX(offsetof(PyInterpreterState, _code_object_generation) + sizeof(uint64_t), \
+                                          offsetof(PyInterpreterState, tlbc_indices.tlbc_generation) + sizeof(uint32_t)), \
+                                      offsetof(PyInterpreterState, threads.head) + sizeof(void*)), \
+                                  offsetof(PyInterpreterState, _gil.last_holder) + sizeof(PyThreadState*))
 #else
-#define INTERP_STATE_MIN_SIZE MAX(offsetof(PyInterpreterState, _code_object_generation) + sizeof(uint64_t), \
-                                  offsetof(PyInterpreterState, threads.head) + sizeof(void*))
+#define INTERP_STATE_MIN_SIZE MAX(MAX(offsetof(PyInterpreterState, _code_object_generation) + sizeof(uint64_t), \
+                                      offsetof(PyInterpreterState, threads.head) + sizeof(void*)), \
+                                  offsetof(PyInterpreterState, _gil.last_holder) + sizeof(PyThreadState*))
 #endif
 #define INTERP_STATE_BUFFER_SIZE MAX(INTERP_STATE_MIN_SIZE, 256)
 
@@ -206,6 +208,7 @@ typedef struct {
     uint64_t code_object_generation;
     _Py_hashtable_t *code_object_cache;
     int debug;
+    int only_active_thread;
     RemoteDebuggingState *cached_state;  // Cached module state
 #ifdef Py_GIL_DISABLED
     // TLBC cache invalidation tracking
@@ -2496,6 +2499,7 @@ _remote_debugging.RemoteUnwinder.__init__
     pid: int
     *
     all_threads: bool = False
+    only_active_thread: bool = False
     debug: bool = False
 
 Initialize a new RemoteUnwinder object for debugging a remote Python process.
@@ -2504,6 +2508,8 @@ Args:
     pid: Process ID of the target Python process to debug
     all_threads: If True, initialize state for all threads in the process.
                 If False, only initialize for the main thread.
+    only_active_thread: If True, only sample the thread holding the GIL.
+                       Cannot be used together with all_threads=True.
     debug: If True, chain exceptions to explain the sequence of events that
            lead to the exception.
 
@@ -2514,15 +2520,33 @@ Raises:
     PermissionError: If access to the target process is denied
     OSError: If unable to attach to the target process or access its memory
     RuntimeError: If unable to read debug information from the target process
+    ValueError: If both all_threads and only_active_thread are True
 [clinic start generated code]*/
 
 static int
 _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self,
                                                int pid, int all_threads,
+                                               int only_active_thread,
                                                int debug)
-/*[clinic end generated code: output=3982f2a7eba49334 input=48a762566b828e91]*/
+/*[clinic end generated code: output=13ba77598ecdcbe1 input=8f8f12504e17da04]*/
 {
+    // Validate that all_threads and only_active_thread are not both True
+    if (all_threads && only_active_thread) {
+        PyErr_SetString(PyExc_ValueError,
+                       "all_threads and only_active_thread cannot both be True");
+        return -1;
+    }
+
+#ifdef Py_GIL_DISABLED
+    if (only_active_thread) {
+        PyErr_SetString(PyExc_ValueError,
+                       "only_active_thread is not supported when Py_GIL_DISABLED is not defined");
+        return -1;
+    }
+#endif
+
     self->debug = debug;
+    self->only_active_thread = only_active_thread;
     self->cached_state = NULL;
     if (_Py_RemoteDebug_InitProcHandle(&self->handle, pid) < 0) {
         set_exception_cause(self, PyExc_RuntimeError, "Failed to initialize process handle");
@@ -2602,13 +2626,18 @@ _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self,
 @critical_section
 _remote_debugging.RemoteUnwinder.get_stack_trace
 
-Returns a list of stack traces for all threads in the target process.
+Returns a list of stack traces for threads in the target process.
 
 Each element in the returned list is a tuple of (thread_id, frame_list), where:
 - thread_id is the OS thread identifier
 - frame_list is a list of tuples (function_name, filename, line_number) representing
   the Python stack frames for that thread, ordered from most recent to oldest
 
+The threads returned depend on the initialization parameters:
+- If only_active_thread was True: returns only the thread holding the GIL
+- If all_threads was True: returns all threads
+- Otherwise: returns only the main thread
+
 Example:
     [
         (1234, [
@@ -2632,7 +2661,7 @@ Raises:
 
 static PyObject *
 _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self)
-/*[clinic end generated code: output=666192b90c69d567 input=331dbe370578badf]*/
+/*[clinic end generated code: output=666192b90c69d567 input=f756f341206f9116]*/
 {
     PyObject* result = NULL;
     // Read interpreter state into opaque buffer
@@ -2655,6 +2684,28 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self
         _Py_hashtable_clear(self->code_object_cache);
     }
 
+    // If only_active_thread is true, we need to determine which thread holds the GIL
+    PyThreadState* gil_holder = NULL;
+    if (self->only_active_thread) {
+        // The GIL state is already in interp_state_buffer, just read from there
+        // Check if GIL is locked
+        int gil_locked = GET_MEMBER(int, interp_state_buffer,
+            self->debug_offsets.interpreter_state.gil_runtime_state_locked);
+
+        if (gil_locked) {
+            // Get the last holder (current holder when GIL is locked)
+            gil_holder = GET_MEMBER(PyThreadState*, interp_state_buffer,
+                self->debug_offsets.interpreter_state.gil_runtime_state_holder);
+        } else {
+            // GIL is not locked, return empty list
+            result = PyList_New(0);
+            if (!result) {
+                set_exception_cause(self, PyExc_MemoryError, "Failed to create empty result list");
+            }
+            goto exit;
+        }
+    }
+
 #ifdef Py_GIL_DISABLED
     // Check TLBC generation and invalidate cache if needed
     uint32_t current_tlbc_generation = GET_MEMBER(uint32_t, interp_state_buffer,
@@ -2666,7 +2717,10 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self
 #endif
 
     uintptr_t current_tstate;
-    if (self->tstate_addr == 0) {
+    if (self->only_active_thread && gil_holder != NULL) {
+        // We have the GIL holder, process only that thread
+        current_tstate = (uintptr_t)gil_holder;
+    } else if (self->tstate_addr == 0) {
         // Get threads head from buffer
         current_tstate = GET_MEMBER(uintptr_t, interp_state_buffer,
                 self->debug_offsets.interpreter_state.threads_head);
@@ -2700,10 +2754,14 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self
         if (self->tstate_addr) {
             break;
         }
+
+        // If we're only processing the GIL holder, we're done after one iteration
+        if (self->only_active_thread && gil_holder != NULL) {
+            break;
+        }
     }
 
 exit:
-   _Py_RemoteDebug_ClearCache(&self->handle);
     return result;
 }
 
@@ -2827,11 +2885,9 @@ _remote_debugging_RemoteUnwinder_get_all_awaited_by_impl(RemoteUnwinderObject *s
         goto result_err;
     }
 
-    _Py_RemoteDebug_ClearCache(&self->handle);
     return result;
 
 result_err:
-    _Py_RemoteDebug_ClearCache(&self->handle);
     Py_XDECREF(result);
     return NULL;
 }
@@ -2898,11 +2954,9 @@ _remote_debugging_RemoteUnwinder_get_async_stack_trace_impl(RemoteUnwinderObject
         goto cleanup;
     }
 
-    _Py_RemoteDebug_ClearCache(&self->handle);
     return result;
 
 cleanup:
-    _Py_RemoteDebug_ClearCache(&self->handle);
     Py_XDECREF(result);
     return NULL;
 }
@@ -2928,7 +2982,6 @@ RemoteUnwinder_dealloc(PyObject *op)
     }
 #endif
     if (self->handle.pid != 0) {
-        _Py_RemoteDebug_ClearCache(&self->handle);
         _Py_RemoteDebug_CleanupProcHandle(&self->handle);
     }
     PyObject_Del(self);
index 5c313a2d66404aff91af45a6093c960b3205f5c8..e80b24b54c0ffacde0ce116f534b57b0c38ee6b9 100644 (file)
@@ -10,7 +10,8 @@ preserve
 #include "pycore_modsupport.h"    // _PyArg_UnpackKeywords()
 
 PyDoc_STRVAR(_remote_debugging_RemoteUnwinder___init____doc__,
-"RemoteUnwinder(pid, *, all_threads=False, debug=False)\n"
+"RemoteUnwinder(pid, *, all_threads=False, only_active_thread=False,\n"
+"               debug=False)\n"
 "--\n"
 "\n"
 "Initialize a new RemoteUnwinder object for debugging a remote Python process.\n"
@@ -19,6 +20,8 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder___init____doc__,
 "    pid: Process ID of the target Python process to debug\n"
 "    all_threads: If True, initialize state for all threads in the process.\n"
 "                If False, only initialize for the main thread.\n"
+"    only_active_thread: If True, only sample the thread holding the GIL.\n"
+"                       Cannot be used together with all_threads=True.\n"
 "    debug: If True, chain exceptions to explain the sequence of events that\n"
 "           lead to the exception.\n"
 "\n"
@@ -28,11 +31,13 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder___init____doc__,
 "Raises:\n"
 "    PermissionError: If access to the target process is denied\n"
 "    OSError: If unable to attach to the target process or access its memory\n"
-"    RuntimeError: If unable to read debug information from the target process");
+"    RuntimeError: If unable to read debug information from the target process\n"
+"    ValueError: If both all_threads and only_active_thread are True");
 
 static int
 _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self,
                                                int pid, int all_threads,
+                                               int only_active_thread,
                                                int debug);
 
 static int
@@ -41,7 +46,7 @@ _remote_debugging_RemoteUnwinder___init__(PyObject *self, PyObject *args, PyObje
     int return_value = -1;
     #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 
-    #define NUM_KEYWORDS 3
+    #define NUM_KEYWORDS 4
     static struct {
         PyGC_Head _this_is_not_used;
         PyObject_VAR_HEAD
@@ -50,7 +55,7 @@ _remote_debugging_RemoteUnwinder___init__(PyObject *self, PyObject *args, PyObje
     } _kwtuple = {
         .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
         .ob_hash = -1,
-        .ob_item = { &_Py_ID(pid), &_Py_ID(all_threads), &_Py_ID(debug), },
+        .ob_item = { &_Py_ID(pid), &_Py_ID(all_threads), &_Py_ID(only_active_thread), &_Py_ID(debug), },
     };
     #undef NUM_KEYWORDS
     #define KWTUPLE (&_kwtuple.ob_base.ob_base)
@@ -59,19 +64,20 @@ _remote_debugging_RemoteUnwinder___init__(PyObject *self, PyObject *args, PyObje
     #  define KWTUPLE NULL
     #endif  // !Py_BUILD_CORE
 
-    static const char * const _keywords[] = {"pid", "all_threads", "debug", NULL};
+    static const char * const _keywords[] = {"pid", "all_threads", "only_active_thread", "debug", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
         .fname = "RemoteUnwinder",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
-    PyObject *argsbuf[3];
+    PyObject *argsbuf[4];
     PyObject * const *fastargs;
     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
     int pid;
     int all_threads = 0;
+    int only_active_thread = 0;
     int debug = 0;
 
     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
@@ -95,12 +101,21 @@ _remote_debugging_RemoteUnwinder___init__(PyObject *self, PyObject *args, PyObje
             goto skip_optional_kwonly;
         }
     }
-    debug = PyObject_IsTrue(fastargs[2]);
+    if (fastargs[2]) {
+        only_active_thread = PyObject_IsTrue(fastargs[2]);
+        if (only_active_thread < 0) {
+            goto exit;
+        }
+        if (!--noptargs) {
+            goto skip_optional_kwonly;
+        }
+    }
+    debug = PyObject_IsTrue(fastargs[3]);
     if (debug < 0) {
         goto exit;
     }
 skip_optional_kwonly:
-    return_value = _remote_debugging_RemoteUnwinder___init___impl((RemoteUnwinderObject *)self, pid, all_threads, debug);
+    return_value = _remote_debugging_RemoteUnwinder___init___impl((RemoteUnwinderObject *)self, pid, all_threads, only_active_thread, debug);
 
 exit:
     return return_value;
@@ -110,13 +125,18 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder_get_stack_trace__doc__,
 "get_stack_trace($self, /)\n"
 "--\n"
 "\n"
-"Returns a list of stack traces for all threads in the target process.\n"
+"Returns a list of stack traces for threads in the target process.\n"
 "\n"
 "Each element in the returned list is a tuple of (thread_id, frame_list), where:\n"
 "- thread_id is the OS thread identifier\n"
 "- frame_list is a list of tuples (function_name, filename, line_number) representing\n"
 "  the Python stack frames for that thread, ordered from most recent to oldest\n"
 "\n"
+"The threads returned depend on the initialization parameters:\n"
+"- If only_active_thread was True: returns only the thread holding the GIL\n"
+"- If all_threads was True: returns all threads\n"
+"- Otherwise: returns only the main thread\n"
+"\n"
 "Example:\n"
 "    [\n"
 "        (1234, [\n"
@@ -253,4 +273,4 @@ _remote_debugging_RemoteUnwinder_get_async_stack_trace(PyObject *self, PyObject
 
     return return_value;
 }
-/*[clinic end generated code: output=774ec34aa653402d input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a37ab223d5081b16 input=a9049054013a1b77]*/
index 8f9b6cd4c4960f744258e44b2f92a461f408a1b8..d1fcb478d2b035b2c3650f5c39aac85ea7062f89 100644 (file)
@@ -110,14 +110,6 @@ get_page_size(void) {
     return page_size;
 }
 
-typedef struct page_cache_entry {
-    uintptr_t page_addr; // page-aligned base address
-    char *data;
-    int valid;
-    struct page_cache_entry *next;
-} page_cache_entry_t;
-
-#define MAX_PAGES 1024
 
 // Define a platform-independent process handle structure
 typedef struct {
@@ -129,27 +121,9 @@ typedef struct {
 #elif defined(__linux__)
     int memfd;
 #endif
-    page_cache_entry_t pages[MAX_PAGES];
     Py_ssize_t page_size;
 } proc_handle_t;
 
-static void
-_Py_RemoteDebug_FreePageCache(proc_handle_t *handle)
-{
-    for (int i = 0; i < MAX_PAGES; i++) {
-        PyMem_RawFree(handle->pages[i].data);
-        handle->pages[i].data = NULL;
-        handle->pages[i].valid = 0;
-    }
-}
-
-UNUSED static void
-_Py_RemoteDebug_ClearCache(proc_handle_t *handle)
-{
-    for (int i = 0; i < MAX_PAGES; i++) {
-        handle->pages[i].valid = 0;
-    }
-}
 
 #if defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX
 static mach_port_t pid_to_task(pid_t pid);
@@ -178,10 +152,6 @@ _Py_RemoteDebug_InitProcHandle(proc_handle_t *handle, pid_t pid) {
     handle->memfd = -1;
 #endif
     handle->page_size = get_page_size();
-    for (int i = 0; i < MAX_PAGES; i++) {
-        handle->pages[i].data = NULL;
-        handle->pages[i].valid = 0;
-    }
     return 0;
 }
 
@@ -200,7 +170,6 @@ _Py_RemoteDebug_CleanupProcHandle(proc_handle_t *handle) {
     }
 #endif
     handle->pid = 0;
-    _Py_RemoteDebug_FreePageCache(handle);
 }
 
 #if defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX
@@ -1066,53 +1035,6 @@ _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle,
                                       size_t size,
                                       void *out)
 {
-    size_t page_size = handle->page_size;
-    uintptr_t page_base = addr & ~(page_size - 1);
-    size_t offset_in_page = addr - page_base;
-
-    if (offset_in_page + size > page_size) {
-        return _Py_RemoteDebug_ReadRemoteMemory(handle, addr, size, out);
-    }
-
-    // Search for valid cached page
-    for (int i = 0; i < MAX_PAGES; i++) {
-        page_cache_entry_t *entry = &handle->pages[i];
-        if (entry->valid && entry->page_addr == page_base) {
-            memcpy(out, entry->data + offset_in_page, size);
-            return 0;
-        }
-    }
-
-    // Find reusable slot
-    for (int i = 0; i < MAX_PAGES; i++) {
-        page_cache_entry_t *entry = &handle->pages[i];
-        if (!entry->valid) {
-            if (entry->data == NULL) {
-                entry->data = PyMem_RawMalloc(page_size);
-                if (entry->data == NULL) {
-                    _set_debug_exception_cause(PyExc_MemoryError,
-                        "Cannot allocate %zu bytes for page cache entry "
-                        "during read from PID %d at address 0x%lx",
-                        page_size, handle->pid, addr);
-                    return -1;
-                }
-            }
-
-            if (_Py_RemoteDebug_ReadRemoteMemory(handle, page_base, page_size, entry->data) < 0) {
-                // Try to just copy the exact ammount as a fallback
-                PyErr_Clear();
-                goto fallback;
-            }
-
-            entry->page_addr = page_base;
-            entry->valid = 1;
-            memcpy(out, entry->data + offset_in_page, size);
-            return 0;
-        }
-    }
-
-fallback:
-    // Cache full — fallback to uncached read
     return _Py_RemoteDebug_ReadRemoteMemory(handle, addr, size, out);
 }