1*072a4ba8SAndrew Turner /* 2*072a4ba8SAndrew Turner * Macros for asm code. AArch64 version. 3*072a4ba8SAndrew Turner * 4*072a4ba8SAndrew Turner * Copyright (c) 2019-2023, Arm Limited. 5*072a4ba8SAndrew Turner * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 6*072a4ba8SAndrew Turner */ 7*072a4ba8SAndrew Turner 8*072a4ba8SAndrew Turner #ifndef _ASMDEFS_H 9*072a4ba8SAndrew Turner #define _ASMDEFS_H 10*072a4ba8SAndrew Turner 11*072a4ba8SAndrew Turner /* Branch Target Identitication support. */ 12*072a4ba8SAndrew Turner #define BTI_C hint 34 13*072a4ba8SAndrew Turner #define BTI_J hint 36 14*072a4ba8SAndrew Turner /* Return address signing support (pac-ret). */ 15*072a4ba8SAndrew Turner #define PACIASP hint 25; .cfi_window_save 16*072a4ba8SAndrew Turner #define AUTIASP hint 29; .cfi_window_save 17*072a4ba8SAndrew Turner 18*072a4ba8SAndrew Turner /* GNU_PROPERTY_AARCH64_* macros from elf.h. */ 19*072a4ba8SAndrew Turner #define FEATURE_1_AND 0xc0000000 20*072a4ba8SAndrew Turner #define FEATURE_1_BTI 1 21*072a4ba8SAndrew Turner #define FEATURE_1_PAC 2 22*072a4ba8SAndrew Turner 23*072a4ba8SAndrew Turner /* Add a NT_GNU_PROPERTY_TYPE_0 note. */ 24*072a4ba8SAndrew Turner #define GNU_PROPERTY(type, value) \ 25*072a4ba8SAndrew Turner .section .note.gnu.property, "a"; \ 26*072a4ba8SAndrew Turner .p2align 3; \ 27*072a4ba8SAndrew Turner .word 4; \ 28*072a4ba8SAndrew Turner .word 16; \ 29*072a4ba8SAndrew Turner .word 5; \ 30*072a4ba8SAndrew Turner .asciz "GNU"; \ 31*072a4ba8SAndrew Turner .word type; \ 32*072a4ba8SAndrew Turner .word 4; \ 33*072a4ba8SAndrew Turner .word value; \ 34*072a4ba8SAndrew Turner .word 0; \ 35*072a4ba8SAndrew Turner .text 36*072a4ba8SAndrew Turner 37*072a4ba8SAndrew Turner /* If set then the GNU Property Note section will be added to 38*072a4ba8SAndrew Turner mark objects to support BTI and PAC-RET. */ 39*072a4ba8SAndrew Turner #ifndef WANT_GNU_PROPERTY 40*072a4ba8SAndrew Turner #define WANT_GNU_PROPERTY 1 41*072a4ba8SAndrew Turner #endif 42*072a4ba8SAndrew Turner 43*072a4ba8SAndrew Turner #if WANT_GNU_PROPERTY 44*072a4ba8SAndrew Turner /* Add property note with supported features to all asm files. */ 45*072a4ba8SAndrew Turner GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC) 46*072a4ba8SAndrew Turner #endif 47*072a4ba8SAndrew Turner 48*072a4ba8SAndrew Turner #define ENTRY_ALIGN(name, alignment) \ 49*072a4ba8SAndrew Turner .global name; \ 50*072a4ba8SAndrew Turner .type name,%function; \ 51*072a4ba8SAndrew Turner .align alignment; \ 52*072a4ba8SAndrew Turner name: \ 53*072a4ba8SAndrew Turner .cfi_startproc; \ 54*072a4ba8SAndrew Turner BTI_C; 55*072a4ba8SAndrew Turner 56*072a4ba8SAndrew Turner #define ENTRY(name) ENTRY_ALIGN(name, 6) 57*072a4ba8SAndrew Turner 58*072a4ba8SAndrew Turner #define ENTRY_ALIAS(name) \ 59*072a4ba8SAndrew Turner .global name; \ 60*072a4ba8SAndrew Turner .type name,%function; \ 61*072a4ba8SAndrew Turner name: 62*072a4ba8SAndrew Turner 63*072a4ba8SAndrew Turner #define END(name) \ 64*072a4ba8SAndrew Turner .cfi_endproc; \ 65*072a4ba8SAndrew Turner .size name, .-name; 66*072a4ba8SAndrew Turner 67*072a4ba8SAndrew Turner #define L(l) .L ## l 68*072a4ba8SAndrew Turner 69*072a4ba8SAndrew Turner #endif 70