aboutsummaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorshadchin <shadchin@yandex-team.com>2024-02-18 16:49:52 +0300
committershadchin <shadchin@yandex-team.com>2024-02-18 17:00:16 +0300
commit0bb2168d0660be7316ffbafdb4bdc4e9957f39cf (patch)
treee708f9b05affa64aeffe0c94299576a86e99ab41 /contrib
parent7fa34d0c38beee7d193b6bfd332431d3a851a667 (diff)
downloadydb-0bb2168d0660be7316ffbafdb4bdc4e9957f39cf.tar.gz
Enable perf trampoline
9ea3344aaff84779f6f3eea0c3cfb785c49857a7
Diffstat (limited to 'contrib')
-rw-r--r--contrib/tools/python3/src/Include/pyconfig-linux.h2
-rw-r--r--contrib/tools/python3/src/Python/asm_trampoline.S28
-rw-r--r--contrib/tools/python3/src/ya.make6
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
)