diff options
Diffstat (limited to 'contrib/tools/python3/Python/asm_trampoline.S')
| -rw-r--r-- | contrib/tools/python3/Python/asm_trampoline.S | 37 |
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__ |
