| /* SPDX-License-Identifier: MIT */ | |
| /* | |
| * Macros for asm code. | |
| * | |
| * Copyright (c) 2019, Arm Limited. | |
| */ | |
| #ifndef _ASMDEFS_H | |
| #define _ASMDEFS_H | |
| #if defined(__aarch64__) | |
| /* Branch Target Identitication support. */ | |
| #define BTI_C hint 34 | |
| #define BTI_J hint 36 | |
| /* Return address signing support (pac-ret). */ | |
| #define PACIASP hint 25; .cfi_window_save | |
| #define AUTIASP hint 29; .cfi_window_save | |
| /* GNU_PROPERTY_AARCH64_* macros from elf.h. */ | |
| #define FEATURE_1_AND 0xc0000000 | |
| #define FEATURE_1_BTI 1 | |
| #define FEATURE_1_PAC 2 | |
| /* Add a NT_GNU_PROPERTY_TYPE_0 note. */ | |
| #define GNU_PROPERTY(type, value) \ | |
| .section .note.gnu.property, "a"; \ | |
| .p2align 3; \ | |
| .word 4; \ | |
| .word 16; \ | |
| .word 5; \ | |
| .asciz "GNU"; \ | |
| .word type; \ | |
| .word 4; \ | |
| .word value; \ | |
| .word 0; \ | |
| .text | |
| /* If set then the GNU Property Note section will be added to | |
| mark objects to support BTI and PAC-RET. */ | |
| #ifndef WANT_GNU_PROPERTY | |
| #define WANT_GNU_PROPERTY 1 | |
| #endif | |
| #if WANT_GNU_PROPERTY | |
| /* Add property note with supported features to all asm files. */ | |
| GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC) | |
| #endif | |
| #define ENTRY_ALIGN(name, alignment) \ | |
| .global name; \ | |
| .type name,%function; \ | |
| .align alignment; \ | |
| name: \ | |
| .cfi_startproc; \ | |
| BTI_C; | |
| #else | |
| #define END_FILE | |
| #define ENTRY_ALIGN(name, alignment) \ | |
| .global name; \ | |
| .type name,%function; \ | |
| .align alignment; \ | |
| name: \ | |
| .cfi_startproc; | |
| #endif | |
| #define ENTRY(name) ENTRY_ALIGN(name, 6) | |
| #define ENTRY_ALIAS(name) \ | |
| .global name; \ | |
| .type name,%function; \ | |
| name: | |
| #define END(name) \ | |
| .cfi_endproc; \ | |
| .size name, .-name; | |
| #define L(l) .L ## l | |
| #ifdef __ILP32__ | |
| /* Sanitize padding bits of pointer arguments as per aapcs64 */ | |
| #define PTR_ARG(n) mov w##n, w##n | |
| #else | |
| #define PTR_ARG(n) | |
| #endif | |
| #ifdef __ILP32__ | |
| /* Sanitize padding bits of size arguments as per aapcs64 */ | |
| #define SIZE_ARG(n) mov w##n, w##n | |
| #else | |
| #define SIZE_ARG(n) | |
| #endif | |
| #endif |