@@ -230,6 +230,7 @@ perf_map_init_state(void)
230
230
{
231
231
PyUnstable_PerfMapState_Init ();
232
232
trampoline_api .code_padding = 0 ;
233
+ trampoline_api .code_alignment = 32 ;
233
234
perf_trampoline_type = PERF_TRAMPOLINE_TYPE_MAP ;
234
235
return NULL ;
235
236
}
@@ -291,7 +292,9 @@ new_code_arena(void)
291
292
void * start = & _Py_trampoline_func_start ;
292
293
void * end = & _Py_trampoline_func_end ;
293
294
size_t code_size = end - start ;
294
- size_t chunk_size = round_up (code_size + trampoline_api .code_padding , 16 );
295
+ size_t unaligned_size = code_size + trampoline_api .code_padding ;
296
+ size_t chunk_size = round_up (unaligned_size , trampoline_api .code_alignment );
297
+ assert (chunk_size % trampoline_api .code_alignment == 0 );
295
298
// TODO: Check the effect of alignment of the code chunks. Initial investigation
296
299
// showed that this has no effect on performance in x86-64 or aarch64 and the current
297
300
// version has the advantage that the unwinder in GDB can unwind across JIT-ed code.
@@ -356,7 +359,9 @@ static inline py_trampoline
356
359
code_arena_new_code (code_arena_t * code_arena )
357
360
{
358
361
py_trampoline trampoline = (py_trampoline )code_arena -> current_addr ;
359
- size_t total_code_size = round_up (code_arena -> code_size + trampoline_api .code_padding , 16 );
362
+ size_t total_code_size = round_up (code_arena -> code_size + trampoline_api .code_padding ,
363
+ trampoline_api .code_alignment );
364
+ assert (total_code_size % trampoline_api .code_alignment == 0 );
360
365
code_arena -> size_left -= total_code_size ;
361
366
code_arena -> current_addr += total_code_size ;
362
367
return trampoline ;
0 commit comments