mirror of
				https://github.com/python/cpython.git
				synced 2025-10-25 02:43:41 +00:00 
			
		
		
		
	 4b96a34978
			
		
	
	
		4b96a34978
		
			
		
	
	
	
	
		
			
			Apply Intel Control-flow Technology for x86-64 on asm_trampoline.S. Required for mitigation against return-oriented programming (ROP) and Call or Jump Oriented Programming (COP/JOP) attacks. Manual application is required for the assembly files. See also: https://sourceware.org/annobin/annobin.html/Test-cf-protection.html
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
|     .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__
 | |
| #if defined(__CET__) && (__CET__ & 1)
 | |
|     endbr64
 | |
| #endif
 | |
|     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
 | |
| #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__
 |