diff options
author | shadchin <shadchin@yandex-team.com> | 2024-02-18 16:49:52 +0300 |
---|---|---|
committer | shadchin <shadchin@yandex-team.com> | 2024-02-18 17:00:16 +0300 |
commit | 0bb2168d0660be7316ffbafdb4bdc4e9957f39cf (patch) | |
tree | e708f9b05affa64aeffe0c94299576a86e99ab41 /contrib | |
parent | 7fa34d0c38beee7d193b6bfd332431d3a851a667 (diff) | |
download | ydb-0bb2168d0660be7316ffbafdb4bdc4e9957f39cf.tar.gz |
Enable perf trampoline
9ea3344aaff84779f6f3eea0c3cfb785c49857a7
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/tools/python3/src/Include/pyconfig-linux.h | 2 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/asm_trampoline.S | 28 | ||||
-rw-r--r-- | contrib/tools/python3/src/ya.make | 6 |
3 files changed, 35 insertions, 1 deletions
diff --git a/contrib/tools/python3/src/Include/pyconfig-linux.h b/contrib/tools/python3/src/Include/pyconfig-linux.h index 0cf6e48f50..967ba21e95 100644 --- a/contrib/tools/python3/src/Include/pyconfig-linux.h +++ b/contrib/tools/python3/src/Include/pyconfig-linux.h @@ -1593,7 +1593,7 @@ #define PY_COERCE_C_LOCALE 1 /* Define to 1 if you have the perf trampoline. */ -/* #undef PY_HAVE_PERF_TRAMPOLINE */ +#define PY_HAVE_PERF_TRAMPOLINE 1 /* Define to 1 to build the sqlite module with loadable extensions support. */ #define PY_SQLITE_ENABLE_LOAD_EXTENSION 1 diff --git a/contrib/tools/python3/src/Python/asm_trampoline.S b/contrib/tools/python3/src/Python/asm_trampoline.S new file mode 100644 index 0000000000..460707717d --- /dev/null +++ b/contrib/tools/python3/src/Python/asm_trampoline.S @@ -0,0 +1,28 @@ + .text + .globl _Py_trampoline_func_start +# The following assembly is equivalent to: +# PyObject * +# trampoline(PyThreadState *ts, _PyInterpreterFrame *f, +# int throwflag, py_evaluator evaluator) +# { +# return evaluator(ts, f, throwflag); +# } +_Py_trampoline_func_start: +#ifdef __x86_64__ + sub $8, %rsp + call *%rcx + add $8, %rsp + ret +#endif // __x86_64__ +#if defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__) + // ARM64 little endian, 64bit ABI + // generate with aarch64-linux-gnu-gcc 12.1 + stp x29, x30, [sp, -16]! + mov x29, sp + blr x3 + ldp x29, x30, [sp], 16 + ret +#endif + .globl _Py_trampoline_func_end +_Py_trampoline_func_end: + .section .note.GNU-stack,"",@progbits diff --git a/contrib/tools/python3/src/ya.make b/contrib/tools/python3/src/ya.make index 1b6a693192..8cf5418746 100644 --- a/contrib/tools/python3/src/ya.make +++ b/contrib/tools/python3/src/ya.make @@ -190,6 +190,12 @@ ELSE() ) ENDIF() +IF (OS_LINUX) + SRCS( + Python/asm_trampoline.S + ) +ENDIF() + SUPPRESSIONS( tsan.supp ) |