1 /* Definitions of target machine for GNU compiler, 2 for PowerPC machines running Linux. 3 Copyright (C) 1996-2020 Free Software Foundation, Inc. 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 if (strcmp (rs6000_abi_name, "linux") == 0) \ 53 GNU_USER_TARGET_OS_CPP_BUILTINS(); \ 54 builtin_define_std ("PPC"); \ 55 builtin_define_std ("powerpc"); \ 56 builtin_assert ("cpu=powerpc"); \ 57 builtin_assert ("machine=powerpc"); \ 58 TARGET_OS_SYSV_CPP_BUILTINS (); \ 59 } \ 60 while (0) 61 62 #undef CPP_OS_DEFAULT_SPEC 63 #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)" 64 65 #undef LINK_SHLIB_SPEC 66 #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}} \ 67 %{static-pie:-static -pie --no-dynamic-linker -z text}" 68 69 #undef LIB_DEFAULT_SPEC 70 #define LIB_DEFAULT_SPEC "%(lib_linux)" 71 72 #undef STARTFILE_DEFAULT_SPEC 73 #define STARTFILE_DEFAULT_SPEC "%(startfile_linux)" 74 75 #undef ENDFILE_DEFAULT_SPEC 76 #define ENDFILE_DEFAULT_SPEC "%(endfile_linux)" 77 78 #undef LINK_START_DEFAULT_SPEC 79 #define LINK_START_DEFAULT_SPEC "%(link_start_linux)" 80 81 #undef LINK_OS_DEFAULT_SPEC 82 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)" 83 84 #undef DEFAULT_ASM_ENDIAN 85 #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN) 86 #define DEFAULT_ASM_ENDIAN " -mlittle" 87 #define LINK_OS_LINUX_EMUL ENDIAN_SELECT(" -m elf32ppclinux", \ 88 " -m elf32lppclinux", \ 89 " -m elf32lppclinux") 90 #else 91 #define DEFAULT_ASM_ENDIAN " -mbig" 92 #define LINK_OS_LINUX_EMUL ENDIAN_SELECT(" -m elf32ppclinux", \ 93 " -m elf32lppclinux", \ 94 " -m elf32ppclinux") 95 #endif 96 97 #undef LINK_OS_LINUX_SPEC 98 #define LINK_OS_LINUX_SPEC LINK_OS_LINUX_EMUL " %{!shared: %{!static: \ 99 %{!static-pie: \ 100 %{rdynamic:-export-dynamic} \ 101 -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}}" 102 103 /* For backward compatibility, we must continue to use the AIX 104 structure return convention. */ 105 #undef DRAFT_V4_STRUCT_RET 106 #define DRAFT_V4_STRUCT_RET 1 107 108 /* We are 32-bit all the time, so optimize a little. */ 109 #undef TARGET_64BIT 110 #define TARGET_64BIT 0 111 112 /* We don't need to generate entries in .fixup, except when 113 -mrelocatable or -mrelocatable-lib is given. */ 114 #undef RELOCATABLE_NEEDS_FIXUP 115 #define RELOCATABLE_NEEDS_FIXUP \ 116 (rs6000_isa_flags & rs6000_isa_flags_explicit & OPTION_MASK_RELOCATABLE) 117 118 #undef RS6000_ABI_NAME 119 #define RS6000_ABI_NAME "linux" 120 121 #ifdef TARGET_LIBC_PROVIDES_SSP 122 /* ppc32 glibc provides __stack_chk_guard in -0x7008(2). */ 123 #define TARGET_THREAD_SSP_OFFSET -0x7008 124 #endif 125 126 #define POWERPC_LINUX 127 128 /* ppc linux has 128-bit long double support in glibc 2.4 and later. */ 129 #ifdef TARGET_DEFAULT_LONG_DOUBLE_128 130 #define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128 131 #endif 132 133 /* Static stack checking is supported by means of probes. */ 134 #define STACK_CHECK_STATIC_BUILTIN 1 135 136 /* Software floating point support for exceptions and rounding modes 137 depends on the C library in use. */ 138 #undef TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P 139 #define TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P \ 140 rs6000_linux_float_exceptions_rounding_supported_p 141 142 /* Support for TARGET_ATOMIC_ASSIGN_EXPAND_FENV without FPRs depends 143 on glibc 2.19 or greater. */ 144 #if TARGET_GLIBC_MAJOR > 2 \ 145 || (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 19) 146 #define RS6000_GLIBC_ATOMIC_FENV 1 147 #endif 148