annotate gcc/config/i386/cet.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* ELF program property for Intel CET.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2017-2020 Free Software Foundation, Inc.
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 This file is free software; you can redistribute it and/or modify it
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 under the terms of the GNU General Public License as published by the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 Free Software Foundation; either version 3, or (at your option) any
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 later version.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 This file is distributed in the hope that it will be useful, but
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 WITHOUT ANY WARRANTY; without even the implied warranty of
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 General Public License for more details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 Under Section 7 of GPL version 3, you are granted additional
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 permissions described in the GCC Runtime Library Exception, version
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 3.1, as published by the Free Software Foundation.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 You should have received a copy of the GNU General Public License and
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 a copy of the GCC Runtime Library Exception along with this program;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 <http://www.gnu.org/licenses/>.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 /* Add x86 feature with IBT and/or SHSTK bits to ELF program property
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 if they are enabled. Otherwise, contents in this header file are
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 unused. Define _CET_ENDBR for assembly codes. _CET_ENDBR should be
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 placed unconditionally at the entrance of a function whose address
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 may be taken. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 #ifndef _CET_H_INCLUDED
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 #define _CET_H_INCLUDED
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 #ifdef __ASSEMBLER__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 # if defined __CET__ && (__CET__ & 1) != 0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 # ifdef __x86_64__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 # define _CET_ENDBR endbr64
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 # else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 # define _CET_ENDBR endbr32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 # endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 # else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 # define _CET_ENDBR
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 # endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 # ifdef __ELF__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 # ifdef __CET__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 # if (__CET__ & 1) != 0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 /* GNU_PROPERTY_X86_FEATURE_1_IBT. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 # define __PROPERTY_IBT 0x1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 # else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 # define __PROPERTY_IBT 0x0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 # endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 # if (__CET__ & 2) != 0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 /* GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 # define __PROPERTY_SHSTK 0x2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 # else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 # define __PROPERTY_SHSTK 0x0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 # endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 # define __PROPERTY_BITS (__PROPERTY_IBT | __PROPERTY_SHSTK)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 # ifdef __LP64__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 # define __PROPERTY_ALIGN 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 # else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 # define __PROPERTY_ALIGN 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 # endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 .pushsection ".note.gnu.property", "a"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 .p2align __PROPERTY_ALIGN
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 .long 1f - 0f /* name length. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 .long 4f - 1f /* data length. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 /* NT_GNU_PROPERTY_TYPE_0. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 .long 5 /* note type. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 0:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 .asciz "GNU" /* vendor name. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 1:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 .p2align __PROPERTY_ALIGN
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 /* GNU_PROPERTY_X86_FEATURE_1_AND. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 .long 0xc0000002 /* pr_type. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 .long 3f - 2f /* pr_datasz. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 2:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 /* GNU_PROPERTY_X86_FEATURE_1_XXX. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 .long __PROPERTY_BITS
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 3:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 .p2align __PROPERTY_ALIGN
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 4:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 .popsection
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 # endif /* __CET__ */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 # endif /* __ELF__ */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 #endif /* __ASSEMBLER__ */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 #endif /* _CET_H_INCLUDED */