@@ -61,7 +61,7 @@ jit_error(const char *message)
6161 PyErr_Format (PyExc_RuntimeWarning , "JIT %s (%d)" , message , hint );
6262}
6363
64- static void
64+ static void *
6565jit_record_code (const void * code_addr , size_t code_size ,
6666 const char * entry , const char * filename )
6767{
@@ -71,19 +71,24 @@ jit_record_code(const void *code_addr, size_t code_size,
7171 if (callbacks .write_state == _Py_perfmap_jit_callbacks .write_state ) {
7272 _PyPerfJit_WriteNamedCode (
7373 code_addr , code_size , entry , filename );
74- return ;
74+ return NULL ;
7575 }
76- _PyJitUnwind_GdbRegisterCode (
76+ #endif
77+
78+ #if defined(__linux__ ) && defined(__ELF__ )
79+ return _PyJitUnwind_GdbRegisterCode (
7780 code_addr , code_size , entry , filename );
7881#else
7982 (void )code_addr ;
8083 (void )code_size ;
8184 (void )entry ;
8285 (void )filename ;
86+ return NULL ;
8387#endif
8488}
8589
8690static size_t _Py_jit_shim_size = 0 ;
91+ static void * _Py_jit_shim_gdb_handle = NULL ;
8792
8893static int
8994address_in_executor_array (_PyExecutorObject * * ptrs , size_t count , uintptr_t addr )
@@ -754,7 +759,7 @@ _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], siz
754759 }
755760 executor -> jit_code = memory ;
756761 executor -> jit_size = total_size ;
757- jit_record_code (memory ,
762+ executor -> jit_gdb_handle = jit_record_code (memory ,
758763 code_size + state .trampolines .size ,
759764 "jit_entry" ,
760765 "<jit>" );
@@ -808,10 +813,10 @@ compile_shim(void)
808813 return NULL ;
809814 }
810815 _Py_jit_shim_size = total_size ;
811- jit_record_code (memory ,
812- code_size + state .trampolines .size ,
813- "jit_entry" ,
814- "<jit>" );
816+ _Py_jit_shim_gdb_handle = jit_record_code (memory ,
817+ code_size + state .trampolines .size ,
818+ "jit_entry" ,
819+ "<jit>" );
815820 return (_PyJitEntryFuncPtr )memory ;
816821}
817822
@@ -843,8 +848,11 @@ _PyJIT_Free(_PyExecutorObject *executor)
843848 if (memory ) {
844849 executor -> jit_code = NULL ;
845850 executor -> jit_size = 0 ;
846- #ifdef PY_HAVE_PERF_TRAMPOLINE
847- _PyJitUnwind_GdbUnregisterCode (memory );
851+ #if defined(__linux__ ) && defined(__ELF__ )
852+ if (executor -> jit_gdb_handle != NULL ) {
853+ _PyJitUnwind_GdbUnregisterCode (executor -> jit_gdb_handle );
854+ executor -> jit_gdb_handle = NULL ;
855+ }
848856#endif
849857 if (jit_free (memory , size )) {
850858 PyErr_FormatUnraisable ("Exception ignored while "
@@ -863,8 +871,11 @@ _PyJIT_Fini(void)
863871 if (size ) {
864872 _Py_jit_entry = _Py_LazyJitShim ;
865873 _Py_jit_shim_size = 0 ;
866- #ifdef PY_HAVE_PERF_TRAMPOLINE
867- _PyJitUnwind_GdbUnregisterCode (memory );
874+ #if defined(__linux__ ) && defined(__ELF__ )
875+ if (_Py_jit_shim_gdb_handle != NULL ) {
876+ _PyJitUnwind_GdbUnregisterCode (_Py_jit_shim_gdb_handle );
877+ _Py_jit_shim_gdb_handle = NULL ;
878+ }
868879#endif
869880 if (jit_free (memory , size )) {
870881 PyErr_FormatUnraisable ("Exception ignored while "
0 commit comments