@@ -110,14 +110,6 @@ get_page_size(void) {
110110    return  page_size ;
111111}
112112
113- typedef  struct  page_cache_entry  {
114-     uintptr_t  page_addr ; // page-aligned base address 
115-     char  * data ;
116-     int  valid ;
117-     struct  page_cache_entry  * next ;
118- } page_cache_entry_t ;
119- 
120- #define  MAX_PAGES  1024
121113
122114// Define a platform-independent process handle structure 
123115typedef  struct  {
@@ -129,27 +121,9 @@ typedef struct {
129121#elif  defined(__linux__ )
130122    int  memfd ;
131123#endif 
132-     page_cache_entry_t  pages [MAX_PAGES ];
133124    Py_ssize_t  page_size ;
134125} proc_handle_t ;
135126
136- static  void 
137- _Py_RemoteDebug_FreePageCache (proc_handle_t  * handle )
138- {
139-     for  (int  i  =  0 ; i  <  MAX_PAGES ; i ++ ) {
140-         PyMem_RawFree (handle -> pages [i ].data );
141-         handle -> pages [i ].data  =  NULL ;
142-         handle -> pages [i ].valid  =  0 ;
143-     }
144- }
145- 
146- UNUSED  static  void 
147- _Py_RemoteDebug_ClearCache (proc_handle_t  * handle )
148- {
149-     for  (int  i  =  0 ; i  <  MAX_PAGES ; i ++ ) {
150-         handle -> pages [i ].valid  =  0 ;
151-     }
152- }
153127
154128#if  defined(__APPLE__ ) &&  defined(TARGET_OS_OSX ) &&  TARGET_OS_OSX 
155129static  mach_port_t  pid_to_task (pid_t  pid );
@@ -178,10 +152,6 @@ _Py_RemoteDebug_InitProcHandle(proc_handle_t *handle, pid_t pid) {
178152    handle -> memfd  =  -1 ;
179153#endif 
180154    handle -> page_size  =  get_page_size ();
181-     for  (int  i  =  0 ; i  <  MAX_PAGES ; i ++ ) {
182-         handle -> pages [i ].data  =  NULL ;
183-         handle -> pages [i ].valid  =  0 ;
184-     }
185155    return  0 ;
186156}
187157
@@ -200,7 +170,6 @@ _Py_RemoteDebug_CleanupProcHandle(proc_handle_t *handle) {
200170    }
201171#endif 
202172    handle -> pid  =  0 ;
203-     _Py_RemoteDebug_FreePageCache (handle );
204173}
205174
206175#if  defined(__APPLE__ ) &&  defined(TARGET_OS_OSX ) &&  TARGET_OS_OSX 
@@ -1066,53 +1035,6 @@ _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle,
10661035                                      size_t  size ,
10671036                                      void  * out )
10681037{
1069-     size_t  page_size  =  handle -> page_size ;
1070-     uintptr_t  page_base  =  addr  &  ~(page_size  -  1 );
1071-     size_t  offset_in_page  =  addr  -  page_base ;
1072- 
1073-     if  (offset_in_page  +  size  >  page_size ) {
1074-         return  _Py_RemoteDebug_ReadRemoteMemory (handle , addr , size , out );
1075-     }
1076- 
1077-     // Search for valid cached page 
1078-     for  (int  i  =  0 ; i  <  MAX_PAGES ; i ++ ) {
1079-         page_cache_entry_t  * entry  =  & handle -> pages [i ];
1080-         if  (entry -> valid  &&  entry -> page_addr  ==  page_base ) {
1081-             memcpy (out , entry -> data  +  offset_in_page , size );
1082-             return  0 ;
1083-         }
1084-     }
1085- 
1086-     // Find reusable slot 
1087-     for  (int  i  =  0 ; i  <  MAX_PAGES ; i ++ ) {
1088-         page_cache_entry_t  * entry  =  & handle -> pages [i ];
1089-         if  (!entry -> valid ) {
1090-             if  (entry -> data  ==  NULL ) {
1091-                 entry -> data  =  PyMem_RawMalloc (page_size );
1092-                 if  (entry -> data  ==  NULL ) {
1093-                     _set_debug_exception_cause (PyExc_MemoryError ,
1094-                         "Cannot allocate %zu bytes for page cache entry " 
1095-                         "during read from PID %d at address 0x%lx" ,
1096-                         page_size , handle -> pid , addr );
1097-                     return  -1 ;
1098-                 }
1099-             }
1100- 
1101-             if  (_Py_RemoteDebug_ReadRemoteMemory (handle , page_base , page_size , entry -> data ) <  0 ) {
1102-                 // Try to just copy the exact ammount as a fallback 
1103-                 PyErr_Clear ();
1104-                 goto fallback ;
1105-             }
1106- 
1107-             entry -> page_addr  =  page_base ;
1108-             entry -> valid  =  1 ;
1109-             memcpy (out , entry -> data  +  offset_in_page , size );
1110-             return  0 ;
1111-         }
1112-     }
1113- 
1114- fallback :
1115-     // Cache full — fallback to uncached read 
11161038    return  _Py_RemoteDebug_ReadRemoteMemory (handle , addr , size , out );
11171039}
11181040
0 commit comments