1 /* 2 * Macros for asm code. AArch64 version. 3 * 4 * Copyright (c) 2019-2023, Arm Limited. 5 * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 6 */ 7 8 #ifndef _ASMDEFS_H 9 #define _ASMDEFS_H 10 11 /* Branch Target Identitication support. */ 12 #define BTI_C hint 34 13 #define BTI_J hint 36 14 /* Return address signing support (pac-ret). */ 15 #define PACIASP hint 25; .cfi_window_save 16 #define AUTIASP hint 29; .cfi_window_save 17 18 /* GNU_PROPERTY_AARCH64_* macros from elf.h. */ 19 #define FEATURE_1_AND 0xc0000000 20 #define FEATURE_1_BTI 1 21 #define FEATURE_1_PAC 2 22 23 /* Add a NT_GNU_PROPERTY_TYPE_0 note. */ 24 #define GNU_PROPERTY(type, value) \ 25 .section .note.gnu.property, "a"; \ 26 .p2align 3; \ 27 .word 4; \ 28 .word 16; \ 29 .word 5; \ 30 .asciz "GNU"; \ 31 .word type; \ 32 .word 4; \ 33 .word value; \ 34 .word 0; \ 35 .text 36 37 /* If set then the GNU Property Note section will be added to 38 mark objects to support BTI and PAC-RET. */ 39 #ifndef WANT_GNU_PROPERTY 40 #define WANT_GNU_PROPERTY 1 41 #endif 42 43 #if WANT_GNU_PROPERTY 44 /* Add property note with supported features to all asm files. */ 45 GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC) 46 #endif 47 48 #define ENTRY_ALIGN(name, alignment) \ 49 .global name; \ 50 .type name,%function; \ 51 .align alignment; \ 52 name: \ 53 .cfi_startproc; \ 54 BTI_C; 55 56 #define ENTRY(name) ENTRY_ALIGN(name, 6) 57 58 #define ENTRY_ALIAS(name) \ 59 .global name; \ 60 .type name,%function; \ 61 name: 62 63 #define END(name) \ 64 .cfi_endproc; \ 65 .size name, .-name; 66 67 #define L(l) .L ## l 68 69 #ifdef __ILP32__ 70 /* Sanitize padding bits of pointer arguments as per aapcs64 */ 71 #define PTR_ARG(n) mov w##n, w##n 72 #else 73 #define PTR_ARG(n) 74 #endif 75 76 #ifdef __ILP32__ 77 /* Sanitize padding bits of size arguments as per aapcs64 */ 78 #define SIZE_ARG(n) mov w##n, w##n 79 #else 80 #define SIZE_ARG(n) 81 #endif 82 83 /* Compiler supports SVE instructions */ 84 #ifndef HAVE_SVE 85 # if __aarch64__ && (__GNUC__ >= 8 || __clang_major__ >= 5) 86 # define HAVE_SVE 1 87 # else 88 # define HAVE_SVE 0 89 # endif 90 #endif 91 92 #endif 93