Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/i386/cet.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Functions for CET/x86. | |
2 Copyright (C) 2017 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GCC. | |
5 | |
6 GCC is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 3, or (at your option) | |
9 any later version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GCC; see the file COPYING3. If not see | |
18 <http://www.gnu.org/licenses/>. */ | |
19 | |
20 #include "config.h" | |
21 #include "system.h" | |
22 #include "coretypes.h" | |
23 #include "tm.h" | |
24 #include "output.h" | |
25 #include "linux-common.h" | |
26 | |
27 void | |
28 file_end_indicate_exec_stack_and_cet (void) | |
29 { | |
30 file_end_indicate_exec_stack (); | |
31 | |
32 if (flag_cf_protection == CF_NONE) | |
33 return; | |
34 | |
35 unsigned int feature_1 = 0; | |
36 | |
37 if (TARGET_IBT) | |
38 /* GNU_PROPERTY_X86_FEATURE_1_IBT. */ | |
39 feature_1 |= 0x1; | |
40 | |
41 if (TARGET_SHSTK) | |
42 /* GNU_PROPERTY_X86_FEATURE_1_SHSTK. */ | |
43 feature_1 |= 0x2; | |
44 | |
45 if (feature_1) | |
46 { | |
47 int p2align = ptr_mode == SImode ? 2 : 3; | |
48 | |
49 /* Generate GNU_PROPERTY_X86_FEATURE_1_XXX. */ | |
50 switch_to_section (get_section (".note.gnu.property", | |
51 SECTION_NOTYPE, NULL)); | |
52 | |
53 ASM_OUTPUT_ALIGN (asm_out_file, p2align); | |
54 /* name length. */ | |
55 fprintf (asm_out_file, ASM_LONG " 1f - 0f\n"); | |
56 /* data length. */ | |
57 fprintf (asm_out_file, ASM_LONG " 4f - 1f\n"); | |
58 /* note type: NT_GNU_PROPERTY_TYPE_0. */ | |
59 fprintf (asm_out_file, ASM_LONG " 5\n"); | |
60 ASM_OUTPUT_LABEL (asm_out_file, "0"); | |
61 /* vendor name: "GNU". */ | |
62 fprintf (asm_out_file, STRING_ASM_OP " \"GNU\"\n"); | |
63 ASM_OUTPUT_LABEL (asm_out_file, "1"); | |
64 ASM_OUTPUT_ALIGN (asm_out_file, p2align); | |
65 /* pr_type: GNU_PROPERTY_X86_FEATURE_1_AND. */ | |
66 fprintf (asm_out_file, ASM_LONG " 0xc0000002\n"); | |
67 /* pr_datasz. */\ | |
68 fprintf (asm_out_file, ASM_LONG " 3f - 2f\n"); | |
69 ASM_OUTPUT_LABEL (asm_out_file, "2"); | |
70 /* GNU_PROPERTY_X86_FEATURE_1_XXX. */ | |
71 fprintf (asm_out_file, ASM_LONG " 0x%x\n", feature_1); | |
72 ASM_OUTPUT_LABEL (asm_out_file, "3"); | |
73 ASM_OUTPUT_ALIGN (asm_out_file, p2align); | |
74 ASM_OUTPUT_LABEL (asm_out_file, "4"); | |
75 } | |
76 } |