1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2019 Arm Limited 4 * Original author: Dave Martin <Dave.Martin@arm.com> 5 */ 6 7 #ifndef ASSEMBLER_H 8 #define ASSEMBLER_H 9 10 #define NT_GNU_PROPERTY_TYPE_0 5 11 #define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 12 13 /* Bits for GNU_PROPERTY_AARCH64_FEATURE_1_BTI */ 14 #define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0) 15 #define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1) 16 17 18 .macro startfn name:req 19 .globl \name 20 \name: 21 .macro endfn 22 .size \name, . - \name 23 .type \name, @function 24 .purgem endfn 25 .endm 26 .endm 27 28 .macro emit_aarch64_feature_1_and 29 .pushsection .note.gnu.property, "a" 30 .align 3 31 .long 2f - 1f 32 .long 6f - 3f 33 .long NT_GNU_PROPERTY_TYPE_0 34 1: .string "GNU" 35 2: 36 .align 3 37 3: .long GNU_PROPERTY_AARCH64_FEATURE_1_AND 38 .long 5f - 4f 39 4: 40 #if BTI 41 .long GNU_PROPERTY_AARCH64_FEATURE_1_PAC | \ 42 GNU_PROPERTY_AARCH64_FEATURE_1_BTI 43 #else 44 .long 0 45 #endif 46 5: 47 .align 3 48 6: 49 .popsection 50 .endm 51 52 .macro paciasp 53 hint 0x19 54 .endm 55 56 .macro autiasp 57 hint 0x1d 58 .endm 59 60 .macro __bti_ 61 hint 0x20 62 .endm 63 64 .macro __bti_c 65 hint 0x22 66 .endm 67 68 .macro __bti_j 69 hint 0x24 70 .endm 71 72 .macro __bti_jc 73 hint 0x26 74 .endm 75 76 .macro bti what= 77 __bti_\what 78 .endm 79 80 #endif /* ! ASSEMBLER_H */ 81