xref: /freebsd-src/contrib/arm-optimized-routines/string/aarch64/asmdefs.h (revision f3087bef11543b42e0d69b708f367097a4118d24)
1*072a4ba8SAndrew Turner /*
2*072a4ba8SAndrew Turner  * Macros for asm code.  AArch64 version.
3*072a4ba8SAndrew Turner  *
4*072a4ba8SAndrew Turner  * Copyright (c) 2019-2023, Arm Limited.
5*072a4ba8SAndrew Turner  * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
6*072a4ba8SAndrew Turner  */
7*072a4ba8SAndrew Turner 
8*072a4ba8SAndrew Turner #ifndef _ASMDEFS_H
9*072a4ba8SAndrew Turner #define _ASMDEFS_H
10*072a4ba8SAndrew Turner 
11*072a4ba8SAndrew Turner /* Branch Target Identitication support.  */
12*072a4ba8SAndrew Turner #define BTI_C		hint	34
13*072a4ba8SAndrew Turner #define BTI_J		hint	36
14*072a4ba8SAndrew Turner /* Return address signing support (pac-ret).  */
15*072a4ba8SAndrew Turner #define PACIASP		hint	25; .cfi_window_save
16*072a4ba8SAndrew Turner #define AUTIASP		hint	29; .cfi_window_save
17*072a4ba8SAndrew Turner 
18*072a4ba8SAndrew Turner /* GNU_PROPERTY_AARCH64_* macros from elf.h.  */
19*072a4ba8SAndrew Turner #define FEATURE_1_AND 0xc0000000
20*072a4ba8SAndrew Turner #define FEATURE_1_BTI 1
21*072a4ba8SAndrew Turner #define FEATURE_1_PAC 2
22*072a4ba8SAndrew Turner 
23*072a4ba8SAndrew Turner /* Add a NT_GNU_PROPERTY_TYPE_0 note.  */
24*072a4ba8SAndrew Turner #define GNU_PROPERTY(type, value)	\
25*072a4ba8SAndrew Turner   .section .note.gnu.property, "a";	\
26*072a4ba8SAndrew Turner   .p2align 3;				\
27*072a4ba8SAndrew Turner   .word 4;				\
28*072a4ba8SAndrew Turner   .word 16;				\
29*072a4ba8SAndrew Turner   .word 5;				\
30*072a4ba8SAndrew Turner   .asciz "GNU";				\
31*072a4ba8SAndrew Turner   .word type;				\
32*072a4ba8SAndrew Turner   .word 4;				\
33*072a4ba8SAndrew Turner   .word value;				\
34*072a4ba8SAndrew Turner   .word 0;				\
35*072a4ba8SAndrew Turner   .text
36*072a4ba8SAndrew Turner 
37*072a4ba8SAndrew Turner /* If set then the GNU Property Note section will be added to
38*072a4ba8SAndrew Turner    mark objects to support BTI and PAC-RET.  */
39*072a4ba8SAndrew Turner #ifndef WANT_GNU_PROPERTY
40*072a4ba8SAndrew Turner #define WANT_GNU_PROPERTY 1
41*072a4ba8SAndrew Turner #endif
42*072a4ba8SAndrew Turner 
43*072a4ba8SAndrew Turner #if WANT_GNU_PROPERTY
44*072a4ba8SAndrew Turner /* Add property note with supported features to all asm files.  */
45*072a4ba8SAndrew Turner GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC)
46*072a4ba8SAndrew Turner #endif
47*072a4ba8SAndrew Turner 
48*072a4ba8SAndrew Turner #define ENTRY_ALIGN(name, alignment)	\
49*072a4ba8SAndrew Turner   .global name;		\
50*072a4ba8SAndrew Turner   .type name,%function;	\
51*072a4ba8SAndrew Turner   .align alignment;		\
52*072a4ba8SAndrew Turner   name:			\
53*072a4ba8SAndrew Turner   .cfi_startproc;	\
54*072a4ba8SAndrew Turner   BTI_C;
55*072a4ba8SAndrew Turner 
56*072a4ba8SAndrew Turner #define ENTRY(name)	ENTRY_ALIGN(name, 6)
57*072a4ba8SAndrew Turner 
58*072a4ba8SAndrew Turner #define ENTRY_ALIAS(name)	\
59*072a4ba8SAndrew Turner   .global name;		\
60*072a4ba8SAndrew Turner   .type name,%function;	\
61*072a4ba8SAndrew Turner   name:
62*072a4ba8SAndrew Turner 
63*072a4ba8SAndrew Turner #define END(name)	\
64*072a4ba8SAndrew Turner   .cfi_endproc;		\
65*072a4ba8SAndrew Turner   .size name, .-name;
66*072a4ba8SAndrew Turner 
67*072a4ba8SAndrew Turner #define L(l) .L ## l
68*072a4ba8SAndrew Turner 
69*072a4ba8SAndrew Turner #endif
70