FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-149800: Split perf trampoline assembly into per-architecture files by stratakis · Pull Request #149894 · python/cpython · GitHub

Repository navigation

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .S  (3) .ac  (1) .in  (1) No extension  (1) All 4 file types selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
11 changes: 10 additions & 1 deletion Makefile.pre.in
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -3111,9 +3111,18 @@ config.status: $(srcdir)/configure

.PRECIOUS: config.status $(BUILDPYTHON) Makefile Makefile.pre

Python/asm_trampoline.o: $(srcdir)/Python/asm_trampoline.S
Python/asm_trampoline_x86_64.o: $(srcdir)/Python/asm_trampoline_x86_64.S
$(CC) -c $(PY_CORE_CFLAGS) -o $@ $<

Python/asm_trampoline_aarch64.o: $(srcdir)/Python/asm_trampoline_aarch64.S
$(CC) -c $(PY_CORE_CFLAGS) -o $@ $<

Python/asm_trampoline_riscv64.o: $(srcdir)/Python/asm_trampoline_riscv64.S
$(CC) -c $(PY_CORE_CFLAGS) -o $@ $<

Python/asm_trampoline_universal2.o: Python/asm_trampoline_aarch64.o Python/asm_trampoline_x86_64.o
lipo -create -output $@ Python/asm_trampoline_aarch64.o Python/asm_trampoline_x86_64.o

Python/emscripten_trampoline_inner.wasm: $(srcdir)/Python/emscripten_trampoline_inner.c
# emcc has a path that ends with emsdk/upstream/emscripten/emcc, we're looking for emsdk/upstream/bin/clang.
$$(dirname $$(dirname $(CC)))/bin/clang -o $@ $< -mgc -O2 -Wl,--no-entry -Wl,--import-table -Wl,--import-memory -target wasm32-unknown-unknown -nostdlib
Expand Down
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
#ifndef ASM_TRAMPOLINE_AARCH_64_H_
#define ASM_TRAMPOLINE_AARCH_64_H_

/*
* References:
* - https://developer.arm.com/documentation/101028/0012/5--Feature-test-macros
Expand Down Expand Up @@ -38,6 +35,31 @@
#define GNU_PROPERTY_AARCH64_GCS 0
#endif

.text
#if defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__)
#if defined(__APPLE__)
.globl __Py_trampoline_func_start
__Py_trampoline_func_start:
#else
.globl _Py_trampoline_func_start
_Py_trampoline_func_start:
#endif
SIGN_LR
stp x29, x30, [sp, -16]!
mov x29, sp
blr x3
ldp x29, x30, [sp], 16
VERIFY_LR
ret
#if defined(__APPLE__)
.globl __Py_trampoline_func_end
__Py_trampoline_func_end:
#else
.globl _Py_trampoline_func_end
_Py_trampoline_func_end:
.section .note.GNU-stack,"",@progbits
#endif

/* Add the BTI, PAC and GCS support to GNU Notes section */
#if GNU_PROPERTY_AARCH64_BTI != 0 || GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 || GNU_PROPERTY_AARCH64_GCS != 0
.pushsection .note.gnu.property, "a"; /* Start a new allocatable section */
Expand All @@ -52,5 +74,4 @@
.long 0; /* padding for 8 byte alignment */
.popsection; /* end the section */
#endif

#endif
#endif // __aarch64__ && __AARCH64EL__ && !__ILP32__
12 changes: 12 additions & 0 deletions Python/asm_trampoline_riscv64.S
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.text
.globl _Py_trampoline_func_start
_Py_trampoline_func_start:
addi sp,sp,-16
sd ra,8(sp)
jalr a3
ld ra,8(sp)
addi sp,sp,16
jr ra
.globl _Py_trampoline_func_end
_Py_trampoline_func_end:
.section .note.GNU-stack,"",@progbits
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -1,24 +1,12 @@
#include "asm_trampoline_aarch64.h"

.text
#ifdef __x86_64__
#if defined(__APPLE__)
.globl __Py_trampoline_func_start
#else
.globl _Py_trampoline_func_start
#endif
# The following assembly is equivalent to:
# PyObject *
# trampoline(PyThreadState *ts, _PyInterpreterFrame *f,
# int throwflag, py_evaluator evaluator)
# {
# return evaluator(ts, f, throwflag);
# }
#if defined(__APPLE__)
__Py_trampoline_func_start:
#else
.globl _Py_trampoline_func_start
_Py_trampoline_func_start:
#endif
#ifdef __x86_64__
#if defined(__CET__) && (__CET__ & 1)
endbr64
#endif
Expand All @@ -27,26 +15,6 @@ _Py_trampoline_func_start:
call *%rcx
pop %rbp
ret
#endif // __x86_64__
#if defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__)
// ARM64 little endian, 64bit ABI
// generate with aarch64-linux-gnu-gcc 12.1
SIGN_LR
stp x29, x30, [sp, -16]!
mov x29, sp
blr x3
ldp x29, x30, [sp], 16
VERIFY_LR
ret
#endif
#ifdef __riscv
addi sp,sp,-16
sd ra,8(sp)
jalr a3
ld ra,8(sp)
addi sp,sp,16
jr ra
#endif
#if defined(__APPLE__)
.globl __Py_trampoline_func_end
__Py_trampoline_func_end:
Expand All @@ -56,7 +24,7 @@ _Py_trampoline_func_end:
.section .note.GNU-stack,"",@progbits
#endif
# Note for indicating the assembly code supports CET
#if defined(__x86_64__) && defined(__CET__) && (__CET__ & 1)
#if defined(__CET__) && (__CET__ & 1)
.section .note.gnu.property,"a"
.align 8
.long 1f - 0f
Expand All @@ -73,4 +41,5 @@ _Py_trampoline_func_end:
3:
.align 8
4:
#endif
#endif // __x86_64__
23 changes: 20 additions & 3 deletions configure

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 21 additions & 4 deletions configure.ac
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -3818,20 +3818,37 @@ AC_MSG_RESULT([$SHLIBS])
dnl perf trampoline is Linux and macOS specific and requires an arch-specific
dnl trampoline in assembly.
AC_MSG_CHECKING([perf trampoline])
PERF_TRAMPOLINE_OBJ=""
AS_CASE([$PLATFORM_TRIPLET],
[x86_64-linux-gnu], [perf_trampoline=yes],
[aarch64-linux-gnu], [perf_trampoline=yes],
[x86_64-linux-gnu], [perf_trampoline=yes
PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_x86_64.o],
[aarch64-linux-gnu], [perf_trampoline=yes
PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_aarch64.o],
[darwin], [AS_CASE([$MACOSX_DEPLOYMENT_TARGET],
[[10.[0-9]|10.1[0-1]]], [perf_trampoline=no],
[perf_trampoline=yes]
[perf_trampoline=yes
if test "${enable_universalsdk}" && test "$UNIVERSAL_ARCHS" = "universal2"; then
PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_universal2.o
else
case "$host_cpu" in
x86_64)
PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_x86_64.o
;;
aarch64|arm64)
PERF_TRAMPOLINE_OBJ=Python/asm_trampoline_aarch64.o
;;
*)
perf_trampoline=no
;;
esac
fi]
)],
[perf_trampoline=no]
)
AC_MSG_RESULT([$perf_trampoline])

AS_VAR_IF([perf_trampoline], [yes], [
AC_DEFINE([PY_HAVE_PERF_TRAMPOLINE], [1], [Define to 1 if you have the perf trampoline.])
PERF_TRAMPOLINE_OBJ=Python/asm_trampoline.o
])
AC_SUBST([PERF_TRAMPOLINE_OBJ])

Expand Down
Loading

Back | FazBrowse Home | New Git URL