111
|
1 /* Definitions of target machine for GNU compiler,
|
|
2 for PowerPC machines running Linux.
|
131
|
3 Copyright (C) 1996-2018 Free Software Foundation, Inc.
|
111
|
4 Contributed by Michael Meissner (meissner@cygnus.com).
|
|
5
|
|
6 This file is part of GCC.
|
|
7
|
|
8 GCC is free software; you can redistribute it and/or modify it
|
|
9 under the terms of the GNU General Public License as published
|
|
10 by the Free Software Foundation; either version 3, or (at your
|
|
11 option) any later version.
|
|
12
|
|
13 GCC is distributed in the hope that it will be useful, but WITHOUT
|
|
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
|
16 License for more details.
|
|
17
|
|
18 You should have received a copy of the GNU General Public License
|
|
19 along with GCC; see the file COPYING3. If not see
|
|
20 <http://www.gnu.org/licenses/>. */
|
|
21
|
|
22 /* Linux doesn't support saving and restoring 64-bit regs in a 32-bit
|
|
23 process. */
|
|
24 #define OS_MISSING_POWERPC64 1
|
|
25
|
|
26 /* We use glibc _mcount for profiling. */
|
|
27 #define NO_PROFILE_COUNTERS 1
|
|
28
|
|
29 #ifdef SINGLE_LIBC
|
|
30 #define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
|
|
31 #define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
|
|
32 #define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
|
|
33 #undef OPTION_MUSL
|
|
34 #define OPTION_MUSL (DEFAULT_LIBC == LIBC_MUSL)
|
|
35 #else
|
|
36 #define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
|
|
37 #define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
|
|
38 #define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
|
|
39 #undef OPTION_MUSL
|
|
40 #define OPTION_MUSL (linux_libc == LIBC_MUSL)
|
|
41 #endif
|
|
42
|
|
43 /* Determine what functions are present at the runtime;
|
|
44 this includes full c99 runtime and sincos. */
|
|
45 #undef TARGET_LIBC_HAS_FUNCTION
|
|
46 #define TARGET_LIBC_HAS_FUNCTION linux_libc_has_function
|
|
47
|
|
48 #undef TARGET_OS_CPP_BUILTINS
|
|
49 #define TARGET_OS_CPP_BUILTINS() \
|
|
50 do \
|
|
51 { \
|
|
52 builtin_define_std ("PPC"); \
|
|
53 builtin_define_std ("powerpc"); \
|
|
54 builtin_assert ("cpu=powerpc"); \
|
|
55 builtin_assert ("machine=powerpc"); \
|
|
56 TARGET_OS_SYSV_CPP_BUILTINS (); \
|
|
57 } \
|
|
58 while (0)
|
|
59
|
|
60 #undef CPP_OS_DEFAULT_SPEC
|
|
61 #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
|
|
62
|
|
63 #undef LINK_SHLIB_SPEC
|
|
64 #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
|
|
65
|
|
66 #undef LIB_DEFAULT_SPEC
|
|
67 #define LIB_DEFAULT_SPEC "%(lib_linux)"
|
|
68
|
|
69 #undef STARTFILE_DEFAULT_SPEC
|
|
70 #define STARTFILE_DEFAULT_SPEC "%(startfile_linux)"
|
|
71
|
|
72 #undef ENDFILE_DEFAULT_SPEC
|
|
73 #define ENDFILE_DEFAULT_SPEC "%(endfile_linux)"
|
|
74
|
|
75 #undef LINK_START_DEFAULT_SPEC
|
|
76 #define LINK_START_DEFAULT_SPEC "%(link_start_linux)"
|
|
77
|
|
78 #undef LINK_OS_DEFAULT_SPEC
|
|
79 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
|
|
80
|
|
81 #undef DEFAULT_ASM_ENDIAN
|
|
82 #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
|
|
83 #define DEFAULT_ASM_ENDIAN " -mlittle"
|
|
84 #define LINK_OS_LINUX_EMUL ENDIAN_SELECT(" -m elf32ppclinux", \
|
|
85 " -m elf32lppclinux", \
|
|
86 " -m elf32lppclinux")
|
|
87 #else
|
|
88 #define DEFAULT_ASM_ENDIAN " -mbig"
|
|
89 #define LINK_OS_LINUX_EMUL ENDIAN_SELECT(" -m elf32ppclinux", \
|
|
90 " -m elf32lppclinux", \
|
|
91 " -m elf32ppclinux")
|
|
92 #endif
|
|
93
|
|
94 #undef LINK_OS_LINUX_SPEC
|
|
95 #define LINK_OS_LINUX_SPEC LINK_OS_LINUX_EMUL " %{!shared: %{!static: \
|
|
96 %{rdynamic:-export-dynamic} \
|
|
97 -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
|
|
98
|
|
99 /* For backward compatibility, we must continue to use the AIX
|
|
100 structure return convention. */
|
|
101 #undef DRAFT_V4_STRUCT_RET
|
|
102 #define DRAFT_V4_STRUCT_RET 1
|
|
103
|
|
104 /* We are 32-bit all the time, so optimize a little. */
|
|
105 #undef TARGET_64BIT
|
|
106 #define TARGET_64BIT 0
|
|
107
|
|
108 /* We don't need to generate entries in .fixup, except when
|
|
109 -mrelocatable or -mrelocatable-lib is given. */
|
|
110 #undef RELOCATABLE_NEEDS_FIXUP
|
|
111 #define RELOCATABLE_NEEDS_FIXUP \
|
|
112 (rs6000_isa_flags & rs6000_isa_flags_explicit & OPTION_MASK_RELOCATABLE)
|
|
113
|
|
114 #ifdef TARGET_LIBC_PROVIDES_SSP
|
|
115 /* ppc32 glibc provides __stack_chk_guard in -0x7008(2). */
|
|
116 #define TARGET_THREAD_SSP_OFFSET -0x7008
|
|
117 #endif
|
|
118
|
|
119 #define POWERPC_LINUX
|
|
120
|
|
121 /* ppc linux has 128-bit long double support in glibc 2.4 and later. */
|
|
122 #ifdef TARGET_DEFAULT_LONG_DOUBLE_128
|
|
123 #define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
|
|
124 #endif
|
|
125
|
|
126 /* Static stack checking is supported by means of probes. */
|
|
127 #define STACK_CHECK_STATIC_BUILTIN 1
|
|
128
|
|
129 /* Software floating point support for exceptions and rounding modes
|
|
130 depends on the C library in use. */
|
|
131 #undef TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P
|
|
132 #define TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P \
|
|
133 rs6000_linux_float_exceptions_rounding_supported_p
|
|
134
|
|
135 /* Support for TARGET_ATOMIC_ASSIGN_EXPAND_FENV without FPRs depends
|
|
136 on glibc 2.19 or greater. */
|
|
137 #if TARGET_GLIBC_MAJOR > 2 \
|
|
138 || (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 19)
|
|
139 #define RS6000_GLIBC_ATOMIC_FENV 1
|
|
140 #endif
|