xref: /optee_os/lib/libutils/ext/include/arm64_bti.S (revision 181f84921804f9b8e2d24027eca1d916d6e15a44)
1*181f8492SRuchika Gupta/* SPDX-License-Identifier: BSD-2-Clause */
2*181f8492SRuchika Gupta/*
3*181f8492SRuchika Gupta * Copyright (c) 2021, Linaro Limited
4*181f8492SRuchika Gupta */
5*181f8492SRuchika Gupta
6*181f8492SRuchika Gupta#include <elf_common.h>
7*181f8492SRuchika Gupta
8*181f8492SRuchika Gupta/*
9*181f8492SRuchika Gupta * This macro emits a program property note section identifying
10*181f8492SRuchika Gupta * architecture features which require special handling, mainly for
11*181f8492SRuchika Gupta * use in assembly files in the libraries linked with TA's.
12*181f8492SRuchika Gupta */
13*181f8492SRuchika Gupta
14*181f8492SRuchika Gupta.macro emit_aarch64_feature_1_and, feat
15*181f8492SRuchika Gupta	.pushsection .note.gnu.property, "a"
16*181f8492SRuchika Gupta	.align  3
17*181f8492SRuchika Gupta	.long   2f - 1f				/* n_namesz */
18*181f8492SRuchika Gupta	.long   6f - 3f				/* n_desc_sz */
19*181f8492SRuchika Gupta	.long   NT_GNU_PROPERTY_TYPE_0		/* n_type */
20*181f8492SRuchika Gupta1:      .string "GNU"				/* name */
21*181f8492SRuchika Gupta2:
22*181f8492SRuchika Gupta	.align  3
23*181f8492SRuchika Gupta3:      .long   GNU_PROPERTY_AARCH64_FEATURE_1_AND 	/* pr_type */
24*181f8492SRuchika Gupta	.long   5f - 4f					/* pr_datasz */
25*181f8492SRuchika Gupta4:
26*181f8492SRuchika Gupta	/*
27*181f8492SRuchika Gupta	 * This is described with an array of char in the Linux API
28*181f8492SRuchika Gupta	 * spec but the text and all other usage (including binutils,
29*181f8492SRuchika Gupta	 * clang and GCC) treat this as a 32 bit value so no swizzling
30*181f8492SRuchika Gupta	 * is required for big endian.
31*181f8492SRuchika Gupta	 */
32*181f8492SRuchika Gupta	.long   \feat					/* property */
33*181f8492SRuchika Gupta5:
34*181f8492SRuchika Gupta	.align  3
35*181f8492SRuchika Gupta6:
36*181f8492SRuchika Gupta	.popsection
37*181f8492SRuchika Gupta.endm
38