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