clang  14.0.0git
cet.h
Go to the documentation of this file.
1 /*===------ cet.h -Control-flow Enforcement Technology feature ------------===
2  * Add x86 feature with IBT and/or SHSTK bits to ELF program property if they
3  * are enabled. Otherwise, contents in this header file are unused. This file
4  * is mainly design for assembly source code which want to enable CET.
5  *
6  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
7  * See https://llvm.org/LICENSE.txt for license information.
8  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9  *
10  *===-----------------------------------------------------------------------===
11  */
12 #ifndef __CET_H
13 #define __CET_H
14 
15 #ifdef __ASSEMBLER__
16 
17 #ifndef __CET__
18 # define _CET_ENDBR
19 #endif
20 
21 #ifdef __CET__
22 
23 # ifdef __LP64__
24 # if __CET__ & 0x1
25 # define _CET_ENDBR endbr64
26 # else
27 # define _CET_ENDBR
28 # endif
29 # else
30 # if __CET__ & 0x1
31 # define _CET_ENDBR endbr32
32 # else
33 # define _CET_ENDBR
34 # endif
35 # endif
36 
37 
38 # ifdef __LP64__
39 # define __PROPERTY_ALIGN 3
40 # else
41 # define __PROPERTY_ALIGN 2
42 # endif
43 
44  .pushsection ".note.gnu.property", "a"
45  .p2align __PROPERTY_ALIGN
46  .long 1f - 0f /* name length. */
47  .long 4f - 1f /* data length. */
48  /* NT_GNU_PROPERTY_TYPE_0. */
49  .long 5 /* note type. */
50 0:
51  .asciz "GNU" /* vendor name. */
52 1:
53  .p2align __PROPERTY_ALIGN
54  /* GNU_PROPERTY_X86_FEATURE_1_AND. */
55  .long 0xc0000002 /* pr_type. */
56  .long 3f - 2f /* pr_datasz. */
57 2:
58  /* GNU_PROPERTY_X86_FEATURE_1_XXX. */
59  .long __CET__
60 3:
61  .p2align __PROPERTY_ALIGN
62 4:
63  .popsection
64 #endif
65 #endif
66 #endif