1c3d31fe1Smrg /* Definitions of target machine for GCC, 2c3d31fe1Smrg for i386/ELF NetBSD systems. 32f055536Smrg Copyright (C) 2001-2020 Free Software Foundation, Inc. 4c3d31fe1Smrg Contributed by matthew green <mrg@eterna.com.au> 5c3d31fe1Smrg 6c3d31fe1Smrg This file is part of GCC. 7c3d31fe1Smrg 8c3d31fe1Smrg GCC is free software; you can redistribute it and/or modify 9c3d31fe1Smrg it under the terms of the GNU General Public License as published by 10c3d31fe1Smrg the Free Software Foundation; either version 3, or (at your option) 11c3d31fe1Smrg any later version. 12c3d31fe1Smrg 13c3d31fe1Smrg GCC is distributed in the hope that it will be useful, 14c3d31fe1Smrg but WITHOUT ANY WARRANTY; without even the implied warranty of 15c3d31fe1Smrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16c3d31fe1Smrg GNU General Public License for more details. 17c3d31fe1Smrg 18c3d31fe1Smrg You should have received a copy of the GNU General Public License 19c3d31fe1Smrg along with GCC; see the file COPYING3. If not see 20c3d31fe1Smrg <http://www.gnu.org/licenses/>. */ 21c3d31fe1Smrg 22c3d31fe1Smrg #define TARGET_OS_CPP_BUILTINS() \ 23c3d31fe1Smrg do \ 24c3d31fe1Smrg { \ 25c3d31fe1Smrg NETBSD_OS_CPP_BUILTINS_ELF(); \ 26c3d31fe1Smrg } \ 27c3d31fe1Smrg while (0) 28c3d31fe1Smrg 29c3d31fe1Smrg 30c3d31fe1Smrg /* Provide a LINK_SPEC appropriate for a NetBSD/i386 ELF target. */ 31c3d31fe1Smrg 32c3d31fe1Smrg #undef LINK_SPEC 33c3d31fe1Smrg #define LINK_SPEC NETBSD_LINK_SPEC_ELF 34c3d31fe1Smrg 35c3d31fe1Smrg #define NETBSD_ENTRY_POINT "__start" 36c3d31fe1Smrg 37c3d31fe1Smrg 38c3d31fe1Smrg /* Provide a CPP_SPEC appropriate for NetBSD. */ 39c3d31fe1Smrg 40c3d31fe1Smrg #undef CPP_SPEC 41c3d31fe1Smrg #define CPP_SPEC "%(netbsd_cpp_spec)" 42c3d31fe1Smrg 43c3d31fe1Smrg 446062e771Smrg /* Provide C11_SPEC/CC1PLUS_SPEC appropriate for NetBSD/i386. */ 456062e771Smrg #define NETBSD_CC1_CPU_SPEC " %(cc1_cpu) " 466062e771Smrg 476062e771Smrg #undef CC1_SPEC 486062e771Smrg #define CC1_SPEC NETBSD_CC1_AND_CC1PLUS_SPEC NETBSD_CC1_CPU_SPEC 496062e771Smrg 506062e771Smrg #undef CC1PLUS_SPEC 516062e771Smrg #define CC1PLUS_SPEC NETBSD_CC1_AND_CC1PLUS_SPEC NETBSD_CC1_CPU_SPEC 526062e771Smrg 536062e771Smrg 54c3d31fe1Smrg /* Make gcc agree with <machine/ansi.h> */ 55c3d31fe1Smrg 56c3d31fe1Smrg #undef SIZE_TYPE 57c3d31fe1Smrg #define SIZE_TYPE "unsigned int" 58c3d31fe1Smrg 59c3d31fe1Smrg #undef PTRDIFF_TYPE 60c3d31fe1Smrg #define PTRDIFF_TYPE "int" 61c3d31fe1Smrg 62c3d31fe1Smrg #undef ASM_APP_ON 63c3d31fe1Smrg #define ASM_APP_ON "#APP\n" 64c3d31fe1Smrg 65c3d31fe1Smrg #undef ASM_APP_OFF 66c3d31fe1Smrg #define ASM_APP_OFF "#NO_APP\n" 67c3d31fe1Smrg 68c3d31fe1Smrg #undef ASM_COMMENT_START 69c3d31fe1Smrg #define ASM_COMMENT_START "#" 70c3d31fe1Smrg 71c3d31fe1Smrg #undef DBX_REGISTER_NUMBER 72c3d31fe1Smrg #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] 73c3d31fe1Smrg 74c3d31fe1Smrg 75c3d31fe1Smrg /* Output assembler code to FILE to call the profiler. */ 76c3d31fe1Smrg 77c3d31fe1Smrg #undef NO_PROFILE_COUNTERS 78c3d31fe1Smrg #define NO_PROFILE_COUNTERS 1 79c3d31fe1Smrg 80c3d31fe1Smrg #undef FUNCTION_PROFILER 81c3d31fe1Smrg #define FUNCTION_PROFILER(FILE, LABELNO) \ 82c3d31fe1Smrg { \ 83c3d31fe1Smrg if (flag_pic) \ 84c3d31fe1Smrg fprintf (FILE, "\tcall __mcount@PLT\n"); \ 85c3d31fe1Smrg else \ 86c3d31fe1Smrg fprintf (FILE, "\tcall __mcount\n"); \ 87c3d31fe1Smrg } 88c3d31fe1Smrg 89c3d31fe1Smrg 90c3d31fe1Smrg #undef HAS_INIT_SECTION 91c3d31fe1Smrg 92c3d31fe1Smrg /* This is how we tell the assembler that two symbols have the same value. */ 93c3d31fe1Smrg 94c3d31fe1Smrg #define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \ 95c3d31fe1Smrg do { assemble_name(FILE, NAME1); \ 96c3d31fe1Smrg fputs(" = ", FILE); \ 97c3d31fe1Smrg assemble_name(FILE, NAME2); \ 98c3d31fe1Smrg fputc('\n', FILE); } while (0) 99c3d31fe1Smrg 100c3d31fe1Smrg /* A C statement to output to the stdio stream FILE an assembler 101c3d31fe1Smrg command to advance the location counter to a multiple of 1<<LOG 102c3d31fe1Smrg bytes if it is within MAX_SKIP bytes. 103c3d31fe1Smrg 104c3d31fe1Smrg This is used to align code labels according to Intel recommendations. */ 105c3d31fe1Smrg 106c3d31fe1Smrg #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 107c3d31fe1Smrg #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ 108c3d31fe1Smrg if ((LOG) != 0) { \ 109ff135a7aSmrg if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \ 110ff135a7aSmrg fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 111ff135a7aSmrg else \ 112ff135a7aSmrg fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 113c3d31fe1Smrg } 114c3d31fe1Smrg #endif 115c3d31fe1Smrg 116c3d31fe1Smrg /* We always use gas here, so we don't worry about ECOFF assembler 117c3d31fe1Smrg problems. */ 118c3d31fe1Smrg #undef TARGET_GAS 119c3d31fe1Smrg #define TARGET_GAS 1 120c3d31fe1Smrg 121c3d31fe1Smrg /* Default to pcc-struct-return, because this is the ELF abi and 122c3d31fe1Smrg we don't care about compatibility with older gcc versions. */ 123c3d31fe1Smrg #define DEFAULT_PCC_STRUCT_RETURN 1 124c3d31fe1Smrg 1253bf62c3fSmrg #define HAVE_ENABLE_EXECUTE_STACK 1263bf62c3fSmrg 1274646d632Smrg #define IX86_MAYBE_NO_LIBGCC_TFMODE 1284646d632Smrg 1293fe46160Sjoerg /* Preserve i386 psABI */ 1303fe46160Sjoerg #undef PREFERRED_STACK_BOUNDARY_DEFAULT 1313fe46160Sjoerg #define PREFERRED_STACK_BOUNDARY_DEFAULT MIN_STACK_BOUNDARY 132*9b6d9335Smrg 133*9b6d9335Smrg /* NetBSD/x86 on 32-bit places the ASAN shadow map at 0x40000000. */ 134*9b6d9335Smrg #undef X86_32_ASAN_BIT_OFFSET 135*9b6d9335Smrg #define X86_32_ASAN_BIT_OFFSET 30 136