summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/Python/asm_trampoline.S
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tools/python3/Python/asm_trampoline.S')
-rw-r--r--contrib/tools/python3/Python/asm_trampoline.S37
1 files changed, 34 insertions, 3 deletions
diff --git a/contrib/tools/python3/Python/asm_trampoline.S b/contrib/tools/python3/Python/asm_trampoline.S
index 460707717df..a14e68c0e81 100644
--- a/contrib/tools/python3/Python/asm_trampoline.S
+++ b/contrib/tools/python3/Python/asm_trampoline.S
@@ -9,9 +9,13 @@
# }
_Py_trampoline_func_start:
#ifdef __x86_64__
- sub $8, %rsp
- call *%rcx
- add $8, %rsp
+#if defined(__CET__) && (__CET__ & 1)
+ endbr64
+#endif
+ push %rbp
+ mov %rsp, %rbp
+ call *%rcx
+ pop %rbp
ret
#endif // __x86_64__
#if defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__)
@@ -23,6 +27,33 @@ _Py_trampoline_func_start:
ldp x29, x30, [sp], 16
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
.globl _Py_trampoline_func_end
_Py_trampoline_func_end:
.section .note.GNU-stack,"",@progbits
+# Note for indicating the assembly code supports CET
+#if defined(__x86_64__) && defined(__CET__) && (__CET__ & 1)
+ .section .note.gnu.property,"a"
+ .align 8
+ .long 1f - 0f
+ .long 4f - 1f
+ .long 5
+0:
+ .string "GNU"
+1:
+ .align 8
+ .long 0xc0000002
+ .long 3f - 2f
+2:
+ .long 0x3
+3:
+ .align 8
+4:
+#endif // __x86_64__