| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* | |
| * Copyright (C) 2019 Arm Limited | |
| * Original author: Dave Martin <Dave.Martin@arm.com> | |
| */ | |
| #ifndef ASSEMBLER_H | |
| #define ASSEMBLER_H | |
| #define NT_GNU_PROPERTY_TYPE_0 5 | |
| #define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 | |
| /* Bits for GNU_PROPERTY_AARCH64_FEATURE_1_BTI */ | |
| #define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0) | |
| #define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1) | |
| .macro startfn name:req | |
| .globl \name | |
| \name: | |
| .macro endfn | |
| .size \name, . - \name | |
| .type \name, @function | |
| .purgem endfn | |
| .endm | |
| .endm | |
| .macro emit_aarch64_feature_1_and | |
| .pushsection .note.gnu.property, "a" | |
| .align 3 | |
| .long 2f - 1f | |
| .long 6f - 3f | |
| .long NT_GNU_PROPERTY_TYPE_0 | |
| 1: .string "GNU" | |
| 2: | |
| .align 3 | |
| 3: .long GNU_PROPERTY_AARCH64_FEATURE_1_AND | |
| .long 5f - 4f | |
| 4: | |
| #if BTI | |
| .long GNU_PROPERTY_AARCH64_FEATURE_1_PAC | \ | |
| GNU_PROPERTY_AARCH64_FEATURE_1_BTI | |
| #else | |
| .long 0 | |
| #endif | |
| 5: | |
| .align 3 | |
| 6: | |
| .popsection | |
| .endm | |
| .macro paciasp | |
| hint 0x19 | |
| .endm | |
| .macro autiasp | |
| hint 0x1d | |
| .endm | |
| .macro __bti_ | |
| hint 0x20 | |
| .endm | |
| .macro __bti_c | |
| hint 0x22 | |
| .endm | |
| .macro __bti_j | |
| hint 0x24 | |
| .endm | |
| .macro __bti_jc | |
| hint 0x26 | |
| .endm | |
| .macro bti what= | |
| __bti_\what | |
| .endm | |
| #endif /* ! ASSEMBLER_H */ |