]>
Commit | Line | Data |
---|---|---|
077fc835 | 1 | /* Configuration file for ARM GNU/Linux EABI targets. |
8d9254fc | 2 | Copyright (C) 2004-2020 Free Software Foundation, Inc. |
077fc835 KH |
3 | Contributed by CodeSourcery, LLC |
4 | ||
5 | This file is part of GCC. | |
6 | ||
7 | GCC is free software; you can redistribute it and/or modify it | |
8 | under the terms of the GNU General Public License as published | |
2f83c7d6 | 9 | by the Free Software Foundation; either version 3, or (at your |
077fc835 KH |
10 | option) any later version. |
11 | ||
12 | GCC is distributed in the hope that it will be useful, but WITHOUT | |
13 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
14 | or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |
15 | License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
2f83c7d6 NC |
18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. */ | |
077fc835 KH |
20 | |
21 | /* On EABI GNU/Linux, we want both the BPABI builtins and the | |
22 | GNU/Linux builtins. */ | |
d3a9662c | 23 | #undef TARGET_OS_CPP_BUILTINS |
077fc835 KH |
24 | #define TARGET_OS_CPP_BUILTINS() \ |
25 | do \ | |
26 | { \ | |
27 | TARGET_BPABI_CPP_BUILTINS(); \ | |
107fd1c1 | 28 | GNU_USER_TARGET_OS_CPP_BUILTINS(); \ |
2c8f43e6 | 29 | ANDROID_TARGET_OS_CPP_BUILTINS(); \ |
077fc835 KH |
30 | } \ |
31 | while (false) | |
32 | ||
b4c522fa IB |
33 | #define EXTRA_TARGET_D_OS_VERSIONS() \ |
34 | ANDROID_TARGET_D_OS_VERSIONS(); | |
35 | ||
077fc835 | 36 | /* We default to a soft-float ABI so that binaries can run on all |
6302b84b RE |
37 | target hardware. If you override this to use the hard-float ABI then |
38 | change the setting of GLIBC_DYNAMIC_LINKER_DEFAULT as well. */ | |
d3a9662c | 39 | #undef TARGET_DEFAULT_FLOAT_ABI |
077fc835 KH |
40 | #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT |
41 | ||
42 | /* We default to the "aapcs-linux" ABI so that enums are int-sized by | |
43 | default. */ | |
d3a9662c | 44 | #undef ARM_DEFAULT_ABI |
077fc835 KH |
45 | #define ARM_DEFAULT_ABI ARM_ABI_AAPCS_LINUX |
46 | ||
d3a9662c BF |
47 | /* TARGET_BIG_ENDIAN_DEFAULT is set in |
48 | config.gcc for big endian configurations. */ | |
49 | #undef TARGET_LINKER_EMULATION | |
50 | #if TARGET_BIG_ENDIAN_DEFAULT | |
51 | #define TARGET_LINKER_EMULATION "armelfb_linux_eabi" | |
52 | #else | |
53 | #define TARGET_LINKER_EMULATION "armelf_linux_eabi" | |
54 | #endif | |
55 | ||
56 | #undef SUBTARGET_EXTRA_LINK_SPEC | |
57 | #define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION | |
077fc835 | 58 | |
6302b84b RE |
59 | /* GNU/Linux on ARM currently supports three dynamic linkers: |
60 | - ld-linux.so.2 - for the legacy ABI | |
61 | - ld-linux.so.3 - for the EABI-derived soft-float ABI | |
62 | - ld-linux-armhf.so.3 - for the EABI-derived hard-float ABI. | |
63 | All the dynamic linkers live in /lib. | |
64 | We default to soft-float, but this can be overridden by changing both | |
65 | GLIBC_DYNAMIC_LINKER_DEFAULT and TARGET_DEFAULT_FLOAT_ABI. */ | |
66 | ||
d3a9662c | 67 | #undef GLIBC_DYNAMIC_LINKER |
c7121189 MH |
68 | #define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-linux.so.3" |
69 | #define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-linux-armhf.so.3" | |
c7121189 | 70 | #define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT |
6302b84b | 71 | |
c7121189 MH |
72 | #define GLIBC_DYNAMIC_LINKER \ |
73 | "%{mfloat-abi=hard:" GLIBC_DYNAMIC_LINKER_HARD_FLOAT "} \ | |
74 | %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \ | |
75 | %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}" | |
077fc835 | 76 | |
4d45be53 GR |
77 | /* For ARM musl currently supports four dynamic linkers: |
78 | - ld-musl-arm.so.1 - for the EABI-derived soft-float ABI | |
79 | - ld-musl-armhf.so.1 - for the EABI-derived hard-float ABI | |
80 | - ld-musl-armeb.so.1 - for the EABI-derived soft-float ABI, EB | |
81 | - ld-musl-armebhf.so.1 - for the EABI-derived hard-float ABI, EB | |
82 | musl does not support the legacy OABI mode. | |
83 | All the dynamic linkers live in /lib. | |
84 | We default to soft-float, EL. */ | |
85 | #undef MUSL_DYNAMIC_LINKER | |
86 | #if TARGET_BIG_ENDIAN_DEFAULT | |
87 | #define MUSL_DYNAMIC_LINKER_E "%{mlittle-endian:;:eb}" | |
88 | #else | |
89 | #define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:eb}" | |
90 | #endif | |
91 | #define MUSL_DYNAMIC_LINKER \ | |
45d53c67 | 92 | "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}%{mfdpic:-fdpic}.so.1" |
4d45be53 | 93 | |
077fc835 KH |
94 | /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to |
95 | use the GNU/Linux version, not the generic BPABI version. */ | |
d3a9662c | 96 | #undef LINK_SPEC |
37953bd3 | 97 | #define LINK_SPEC EABI_LINK_SPEC \ |
51b9db92 MK |
98 | LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \ |
99 | LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC) | |
100 | ||
8a5800b8 | 101 | #undef ASAN_CC1_SPEC |
de5a5fa1 | 102 | #define ASAN_CC1_SPEC "%{%:sanitize(address):-funwind-tables}" |
8a5800b8 | 103 | |
45d53c67 CL |
104 | #define FDPIC_CC1_SPEC "" |
105 | ||
51b9db92 | 106 | #undef CC1_SPEC |
8e38461c | 107 | #define CC1_SPEC \ |
45d53c67 CL |
108 | LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC " " \ |
109 | FDPIC_CC1_SPEC, \ | |
8a5800b8 CL |
110 | GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC " " \ |
111 | ANDROID_CC1_SPEC) | |
51b9db92 MK |
112 | |
113 | #define CC1PLUS_SPEC \ | |
114 | LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) | |
115 | ||
116 | #undef LIB_SPEC | |
8e38461c JM |
117 | #define LIB_SPEC \ |
118 | LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC, \ | |
8edb8dc8 | 119 | GNU_USER_TARGET_NO_PTHREADS_LIB_SPEC " " ANDROID_LIB_SPEC) |
51b9db92 MK |
120 | |
121 | #undef STARTFILE_SPEC | |
122 | #define STARTFILE_SPEC \ | |
8e38461c | 123 | LINUX_OR_ANDROID_LD (GNU_USER_TARGET_STARTFILE_SPEC, ANDROID_STARTFILE_SPEC) |
51b9db92 MK |
124 | |
125 | #undef ENDFILE_SPEC | |
126 | #define ENDFILE_SPEC \ | |
5a0ff57c | 127 | "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} " \ |
8e38461c | 128 | LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC) |
077fc835 KH |
129 | |
130 | /* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we | |
131 | do not use -lfloat. */ | |
132 | #undef LIBGCC_SPEC | |
133 | ||
8a66e987 | 134 | /* Clear the instruction cache from `beg' to `end'. This is |
45b86625 | 135 | implemented in lib1funcs.S, so ensure an error if this definition |
8a66e987 | 136 | is used. */ |
d3a9662c | 137 | #undef CLEAR_INSN_CACHE |
7cea01df | 138 | #define CLEAR_INSN_CACHE(BEG, END) not_used |
1e874273 PB |
139 | |
140 | #define ARM_TARGET2_DWARF_FORMAT (DW_EH_PE_pcrel | DW_EH_PE_indirect) |