1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | /* Definitions of target machine for GNU compiler, for PowerPC NetBSD systems. Copyright (C) 2002-2017 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ #undef TARGET_OS_CPP_BUILTINS /* FIXME: sysv4.h should not define this! */ #define TARGET_OS_CPP_BUILTINS() \ do \ { \ NETBSD_OS_CPP_BUILTINS_ELF(); \ builtin_define ("__powerpc__"); \ builtin_assert ("cpu=powerpc"); \ builtin_assert ("machine=powerpc"); \ if (TARGET_SECURE_PLT) \ builtin_define ("_SECURE_PLT"); \ if (TARGET_SOFT_FLOAT) \ builtin_define ("_SOFT_FLOAT"); \ if (TARGET_ISEL) \ builtin_define ("__PPC_ISEL__"); \ } \ while (0) /* Override the default from rs6000.h to avoid conflicts with macros defined in NetBSD header files. */ #undef RS6000_CPU_CPP_ENDIAN_BUILTINS #define RS6000_CPU_CPP_ENDIAN_BUILTINS() \ do \ { \ if (BYTES_BIG_ENDIAN) \ { \ builtin_define ("__BIG_ENDIAN__"); \ builtin_assert ("machine=bigendian"); \ } \ else \ { \ builtin_define ("__LITTLE_ENDIAN__"); \ builtin_assert ("machine=littleendian"); \ } \ } \ while (0) /* Make GCC agree with <machine/ansi.h>. */ #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "int" /* Redefine some types that where redefined by rs6000 include files. */ #undef WCHAR_TYPE #define WCHAR_TYPE "int" #undef WCHAR_TYPE_SIZE #define WCHAR_TYPE_SIZE 32 #undef WINT_TYPE #define WINT_TYPE "int" #undef INT64_TYPE #define INT64_TYPE "long long int" #undef UINT64_TYPE #define UINT64_TYPE "long long unsigned int" #undef INTMAX_TYPE #define INTMAX_TYPE "long long int" #undef UINTMAX_TYPE #define UINTMAX_TYPE "long long unsigned int" /* Undo the spec mess from sysv4.h, and just define the specs the way NetBSD systems actually expect. */ #undef CPP_SPEC #define CPP_SPEC NETBSD_CPP_SPEC #undef LINK_SPEC #define LINK_SPEC \ "%{!msdata=none:%{G*}} %{msdata=none:-G0} \ %(netbsd_link_spec)" #define NETBSD_ENTRY_POINT "_start" #undef STARTFILE_SPEC #define STARTFILE_SPEC NETBSD_STARTFILE_SPEC #undef ENDFILE_SPEC #define ENDFILE_SPEC NETBSD_ENDFILE_SPEC #undef LIB_SPEC #define LIB_SPEC NETBSD_LIB_SPEC #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ NETBSD_SUBTARGET_EXTRA_SPECS /* * Add NetBSD specific defaults: -mstrict-align */ #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_STRICT_ALIGN) /* * We know we have the right binutils for this (we shouldn't need to do this * but until the cross build does the right thing...) */ #undef TARGET_SECURE_PLT #define TARGET_SECURE_PLT secure_plt #undef HAVE_AS_TLS #define HAVE_AS_TLS 1 #define POWERPC_NETBSD /* Attempt to enable execute permissions on the stack. */ //#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK // XXXMRG use enable-execute-stack-mprotect.c ? #ifdef L_trampoline #undef TRAMPOLINE_SIZE #define TRAMPOLINE_SIZE 48 #endif /* Override STACK_BOUNDARY to use Altivec compliant one. */ #undef STACK_BOUNDARY #define STACK_BOUNDARY 128 /* Use standard DWARF numbering for DWARF debugging information. */ #define RS6000_USE_DWARF_NUMBERING |