1 | /* Definitions for Intel 386 running Linux-based GNU systems with ELF format. |
2 | Copyright (C) 2012-2017 Free Software Foundation, Inc. |
3 | Contributed by Ilya Enkovich. |
4 | |
5 | This file is part of GCC. |
6 | |
7 | GCC is free software; you can redistribute it and/or modify |
8 | it under the terms of the GNU General Public License as published by |
9 | the Free Software Foundation; either version 3, or (at your option) |
10 | any later version. |
11 | |
12 | GCC is distributed in the hope that it will be useful, |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | GNU General Public License for more details. |
16 | |
17 | You should have received a copy of the GNU General Public License |
18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ |
20 | |
21 | #undef TARGET_OS_CPP_BUILTINS |
22 | #define TARGET_OS_CPP_BUILTINS() \ |
23 | do \ |
24 | { \ |
25 | GNU_USER_TARGET_OS_CPP_BUILTINS(); \ |
26 | ANDROID_TARGET_OS_CPP_BUILTINS(); \ |
27 | } \ |
28 | while (0) |
29 | |
30 | #undef CC1_SPEC |
31 | #define CC1_SPEC \ |
32 | LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ |
33 | GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC) |
34 | |
35 | #undef LINK_SPEC |
36 | #define LINK_SPEC \ |
37 | LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LINK_SPEC, \ |
38 | GNU_USER_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC) |
39 | |
40 | #undef LIB_SPEC |
41 | #define LIB_SPEC \ |
42 | LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC, \ |
43 | GNU_USER_TARGET_NO_PTHREADS_LIB_SPEC " " ANDROID_LIB_SPEC) |
44 | |
45 | #undef STARTFILE_SPEC |
46 | #define STARTFILE_SPEC \ |
47 | LINUX_OR_ANDROID_LD (GNU_USER_TARGET_STARTFILE_SPEC, \ |
48 | ANDROID_STARTFILE_SPEC) |
49 | |
50 | #undef ENDFILE_SPEC |
51 | #define ENDFILE_SPEC \ |
52 | LINUX_OR_ANDROID_LD (GNU_USER_TARGET_MATHFILE_SPEC " " \ |
53 | GNU_USER_TARGET_ENDFILE_SPEC, \ |
54 | GNU_USER_TARGET_MATHFILE_SPEC " " \ |
55 | ANDROID_ENDFILE_SPEC) |
56 | |
57 | #ifndef LIBMPX_LIBS |
58 | #define LIBMPX_LIBS "\ |
59 | %:include(libmpx.spec)%(link_libmpx)" |
60 | #endif |
61 | |
62 | #ifndef LINK_MPX |
63 | #if defined (HAVE_LD_BNDPLT_SUPPORT) |
64 | #define LINK_MPX "-z bndplt " |
65 | #else |
66 | #define LINK_MPX \ |
67 | "%nGCC was configured with a linker with no '-z bndplt' support. " \ |
68 | "It significantly reduces MPX coverage for dynamic codes. " \ |
69 | "It is strongly recommended to use GCC properly configured for MPX." |
70 | #endif |
71 | #endif |
72 | |
73 | #ifndef MPX_SPEC |
74 | #ifdef SPEC_64 |
75 | #define MPX_SPEC "\ |
76 | %{mmpx:%{fcheck-pointer-bounds:%{!static:%{" SPEC_64 ":" LINK_MPX "}}}}" |
77 | #else |
78 | #define MPX_SPEC "" |
79 | #endif |
80 | #endif |
81 | |
82 | #ifdef HAVE_LD_PUSHPOPSTATE_SUPPORT |
83 | #define MPX_LD_AS_NEEDED_GUARD_PUSH "--push-state --no-as-needed" |
84 | #define MPX_LD_AS_NEEDED_GUARD_POP "--pop-state" |
85 | #else |
86 | #define MPX_LD_AS_NEEDED_GUARD_PUSH "" |
87 | #define MPX_LD_AS_NEEDED_GUARD_POP "" |
88 | #endif |
89 | |
90 | #ifndef LIBMPX_SPEC |
91 | #if defined(HAVE_LD_STATIC_DYNAMIC) |
92 | #define LIBMPX_SPEC "\ |
93 | %{mmpx:%{fcheck-pointer-bounds:\ |
94 | %{static:--whole-archive -lmpx --no-whole-archive" LIBMPX_LIBS "}\ |
95 | %{!static:%{static-libmpx:" LD_STATIC_OPTION " --whole-archive}\ |
96 | %{!static-libmpx:" MPX_LD_AS_NEEDED_GUARD_PUSH "} -lmpx \ |
97 | %{!static-libmpx:" MPX_LD_AS_NEEDED_GUARD_POP "} \ |
98 | %{static-libmpx:--no-whole-archive " LD_DYNAMIC_OPTION \ |
99 | LIBMPX_LIBS "}}}}" |
100 | #else |
101 | #define LIBMPX_SPEC "\ |
102 | %{mmpx:%{fcheck-pointer-bounds:-lmpx" LIBMPX_LIBS "}}" |
103 | #endif |
104 | #endif |
105 | |
106 | #ifndef LIBMPXWRAPPERS_SPEC |
107 | #if defined(HAVE_LD_STATIC_DYNAMIC) |
108 | #define LIBMPXWRAPPERS_SPEC "\ |
109 | %{mmpx:%{fcheck-pointer-bounds:%{!fno-chkp-use-wrappers:\ |
110 | %{static:-lmpxwrappers}\ |
111 | %{!static:%{static-libmpxwrappers:" LD_STATIC_OPTION "}\ |
112 | -lmpxwrappers %{static-libmpxwrappers: "\ |
113 | LD_DYNAMIC_OPTION "}}}}}" |
114 | #else |
115 | #define LIBMPXWRAPPERS_SPEC "\ |
116 | %{mmpx:%{fcheck-pointer-bounds:{!fno-chkp-use-wrappers:-lmpxwrappers}}}" |
117 | #endif |
118 | #endif |
119 | |
120 | #ifndef CHKP_SPEC |
121 | #define CHKP_SPEC "\ |
122 | %{!nostdlib:%{!nodefaultlibs:" LIBMPX_SPEC LIBMPXWRAPPERS_SPEC "}}" MPX_SPEC |
123 | #endif |
124 | |
125 | extern void file_end_indicate_exec_stack_and_cet (void); |
126 | |
127 | #undef TARGET_ASM_FILE_END |
128 | #define TARGET_ASM_FILE_END file_end_indicate_exec_stack_and_cet |
129 | |