| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /* 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
|