1 /* Base configuration file for all NetBSD targets. 2 Copyright (C) 1997-2021 Free Software Foundation, Inc. 3 4 This file is part of GCC. 5 6 GCC is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 GCC is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GCC; see the file COPYING3. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20 /* TARGET_OS_CPP_BUILTINS() common to all NetBSD targets. */ 21 #define NETBSD_OS_CPP_BUILTINS_COMMON() \ 22 do \ 23 { \ 24 builtin_define ("__NetBSD__"); \ 25 builtin_define ("__unix__"); \ 26 builtin_assert ("system=bsd"); \ 27 builtin_assert ("system=unix"); \ 28 builtin_assert ("system=NetBSD"); \ 29 } \ 30 while (0) 31 32 /* CPP_SPEC parts common to all NetBSD targets. */ 33 #define NETBSD_CPP_SPEC \ 34 "%{posix:-D_POSIX_SOURCE} \ 35 %{pthread:-D_REENTRANT -D_PTHREADS}" 36 37 /* NETBSD_NATIVE is defined when gcc is integrated into the NetBSD 38 source tree so it can be configured appropriately without using 39 the GNU configure/build mechanism. */ 40 41 #ifdef NETBSD_NATIVE 42 43 /* Look for the include files in the system-defined places. */ 44 45 #undef GPLUSPLUS_INCLUDE_DIR 46 #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++" 47 48 #undef GCC_INCLUDE_DIR 49 #define GCC_INCLUDE_DIR "/usr/include" 50 51 #undef INCLUDE_DEFAULTS 52 #define INCLUDE_DEFAULTS \ 53 { \ 54 { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \ 55 { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \ 56 { 0, 0, 0, 0 } \ 57 } 58 59 /* Under NetBSD, the normal location of the compiler back ends is the 60 /usr/libexec directory. */ 61 62 #undef STANDARD_EXEC_PREFIX 63 #define STANDARD_EXEC_PREFIX "/usr/libexec/" 64 65 /* Under NetBSD, the normal location of the various *crt*.o files is the 66 /usr/lib directory. */ 67 68 #undef STANDARD_STARTFILE_PREFIX 69 #define STANDARD_STARTFILE_PREFIX "/usr/lib/" 70 71 #endif /* NETBSD_NATIVE */ 72 73 74 /* Provide a LIB_SPEC appropriate for NetBSD. Here we: 75 76 1. Select the appropriate set of libs, depending on whether we're 77 profiling. 78 79 2. Include the pthread library if -pthread is specified (only 80 if threads are enabled). 81 82 3. Include the posix library if -posix is specified. 83 84 FIXME: Could eliminate the duplication here if we were allowed to 85 use string concatenation. */ 86 87 #define NETBSD_LIB_SPEC \ 88 "%{pthread: \ 89 %{!p: \ 90 %{!pg:-lpthread}} \ 91 %{p:-lpthread_p} \ 92 %{pg:-lpthread_p}} \ 93 %{posix: \ 94 %{!p: \ 95 %{!pg:-lposix}} \ 96 %{p:-lposix_p} \ 97 %{pg:-lposix_p}} \ 98 %{shared:-lc} \ 99 %{!shared: \ 100 %{!symbolic: \ 101 %{!p: \ 102 %{!pg:-lc}} \ 103 %{p:-lc_p} \ 104 %{pg:-lc_p}}}" 105 106 #undef LIB_SPEC 107 #define LIB_SPEC NETBSD_LIB_SPEC 108 109 /* Provide a LIBGCC_SPEC appropriate for NetBSD. */ 110 111 #ifdef NETBSD_NATIVE 112 #define NETBSD_LIBGCC_SPEC \ 113 "%{!symbolic: \ 114 %{!shared: \ 115 %{!p: \ 116 %{!pg: -lgcc}}} \ 117 %{shared: -lgcc_pic} \ 118 %{p: -lgcc_p} \ 119 %{pg: -lgcc_p}}" 120 #else 121 #define NETBSD_LIBGCC_SPEC "-lgcc" 122 #endif 123 124 #undef LIBGCC_SPEC 125 #define LIBGCC_SPEC NETBSD_LIBGCC_SPEC 126 127 #if defined(HAVE_LD_EH_FRAME_HDR) 128 #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " 129 #endif 130 131 #undef TARGET_LIBC_HAS_FUNCTION 132 #define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function 133 134 /* When building shared libraries, the initialization and finalization 135 functions for the library are .init and .fini respectively. */ 136 137 #define COLLECT_SHARED_INIT_FUNC(STREAM,FUNC) \ 138 do { \ 139 fprintf ((STREAM), "void __init() __asm__ (\".init\");"); \ 140 fprintf ((STREAM), "void __init() {\n\t%s();\n}\n", (FUNC)); \ 141 } while (0) 142 143 #define COLLECT_SHARED_FINI_FUNC(STREAM,FUNC) \ 144 do { \ 145 fprintf ((STREAM), "void __fini() __asm__ (\".fini\");"); \ 146 fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \ 147 } while (0) 148 149 #undef TARGET_POSIX_IO 150 #define TARGET_POSIX_IO 151 152 /* Define some types that are the same on all NetBSD platforms, 153 making them agree with <machine/ansi.h>. */ 154 155 #undef WCHAR_TYPE 156 #define WCHAR_TYPE "int" 157 158 #undef WCHAR_TYPE_SIZE 159 #define WCHAR_TYPE_SIZE 32 160 161 #undef WINT_TYPE 162 #define WINT_TYPE "int" 163 164 #undef SUBTARGET_INIT_BUILTINS 165 #define SUBTARGET_INIT_BUILTINS \ 166 do { \ 167 netbsd_patch_builtins (); \ 168 } while(0) 169