1f5121176Skettenis /* Configuration file for a mips64 OpenBSD target. 2f5121176Skettenis Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 3f5121176Skettenis Free Software Foundation, Inc. 4404b540aSrobert 5404b540aSrobert This file is part of GCC. 6404b540aSrobert 7404b540aSrobert GCC is free software; you can redistribute it and/or modify 8404b540aSrobert it under the terms of the GNU General Public License as published by 9404b540aSrobert the Free Software Foundation; either version 2, or (at your option) 10404b540aSrobert any later version. 11404b540aSrobert 12404b540aSrobert GCC is distributed in the hope that it will be useful, 13404b540aSrobert but WITHOUT ANY WARRANTY; without even the implied warranty of 14404b540aSrobert MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15404b540aSrobert GNU General Public License for more details. 16404b540aSrobert 17404b540aSrobert You should have received a copy of the GNU General Public License 18404b540aSrobert along with GCC; see the file COPYING. If not, write to 19404b540aSrobert the Free Software Foundation, 51 Franklin Street, Fifth Floor, 20404b540aSrobert Boston, MA 02110-1301, USA. */ 21404b540aSrobert 22f5121176Skettenis /* This must agree with <machine/_types.h> */ 23404b540aSrobert #undef SIZE_TYPE 24f5121176Skettenis #define SIZE_TYPE "long unsigned int" 25404b540aSrobert 26404b540aSrobert #undef PTRDIFF_TYPE 27f5121176Skettenis #define PTRDIFF_TYPE "long int" 28f5121176Skettenis 29f5121176Skettenis #undef INTMAX_TYPE 30f5121176Skettenis #define INTMAX_TYPE "long long int" 31f5121176Skettenis 32f5121176Skettenis #undef UINTMAX_TYPE 33f5121176Skettenis #define UINTMAX_TYPE "long long unsigned int" 34404b540aSrobert 35404b540aSrobert #undef WCHAR_TYPE 36404b540aSrobert #define WCHAR_TYPE "int" 37404b540aSrobert 38404b540aSrobert #undef WCHAR_TYPE_SIZE 39404b540aSrobert #define WCHAR_TYPE_SIZE 32 40404b540aSrobert 41f5121176Skettenis /* If defined, a C expression whose value is a string containing the 42f5121176Skettenis assembler operation to identify the following data as 43f5121176Skettenis uninitialized global data. If not defined, and neither 44f5121176Skettenis `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined, 45f5121176Skettenis uninitialized global data will be output in the data section if 46f5121176Skettenis `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be 47f5121176Skettenis used. */ 48f5121176Skettenis #define BSS_SECTION_ASM_OP "\t.section\t.bss" 49404b540aSrobert 50f5121176Skettenis #define ASM_OUTPUT_ALIGNED_BSS mips_output_aligned_bss 51404b540aSrobert 52f5121176Skettenis #undef ASM_DECLARE_OBJECT_NAME 53f5121176Skettenis #define ASM_DECLARE_OBJECT_NAME mips_declare_object_name 54f5121176Skettenis 55f5121176Skettenis #undef MD_EXEC_PREFIX 56f5121176Skettenis #undef MD_STARTFILE_PREFIX 57f5121176Skettenis 58f5121176Skettenis /* If we don't set MASK_ABICALLS, we can't default to PIC. */ 59f5121176Skettenis #undef TARGET_DEFAULT 60f5121176Skettenis #define TARGET_DEFAULT MASK_ABICALLS 61f5121176Skettenis 62f5121176Skettenis #define TARGET_OS_CPP_BUILTINS() \ 63f5121176Skettenis do { \ 64f5121176Skettenis OPENBSD_OS_CPP_BUILTINS(); \ 65f5121176Skettenis \ 66f5121176Skettenis if (TARGET_64BIT) \ 67f5121176Skettenis builtin_define ("__mips64__"); \ 68f5121176Skettenis \ 69f5121176Skettenis if (TARGET_ABICALLS) \ 70f5121176Skettenis builtin_define ("__ABICALLS__"); \ 71f5121176Skettenis \ 72f5121176Skettenis if (mips_abi == ABI_EABI) \ 73f5121176Skettenis builtin_define ("__mips_eabi"); \ 74f5121176Skettenis else if (mips_abi == ABI_N32) \ 75f5121176Skettenis builtin_define ("__mips_n32"); \ 76f5121176Skettenis else if (mips_abi == ABI_64) \ 77f5121176Skettenis builtin_define ("__mips_n64"); \ 78f5121176Skettenis else if (mips_abi == ABI_O64) \ 79f5121176Skettenis builtin_define ("__mips_o64"); \ 80f5121176Skettenis \ 81f5121176Skettenis if (mips_abi == ABI_N32) \ 82f5121176Skettenis { \ 83f5121176Skettenis builtin_define ("_ABIN32=2"); \ 84f5121176Skettenis builtin_define ("_MIPS_SIM=_ABIN32"); \ 85f5121176Skettenis builtin_define ("_MIPS_SZLONG=32"); \ 86f5121176Skettenis builtin_define ("_MIPS_SZPTR=32"); \ 87f5121176Skettenis } \ 88f5121176Skettenis else if (mips_abi == ABI_64) \ 89f5121176Skettenis { \ 90f5121176Skettenis builtin_define ("_ABI64=3"); \ 91f5121176Skettenis builtin_define ("_MIPS_SIM=_ABI64"); \ 92f5121176Skettenis builtin_define ("_MIPS_SZLONG=64"); \ 93f5121176Skettenis builtin_define ("_MIPS_SZPTR=64"); \ 94f5121176Skettenis } \ 95f5121176Skettenis else \ 96f5121176Skettenis { \ 97f5121176Skettenis builtin_define ("_ABIO32=1"); \ 98f5121176Skettenis builtin_define ("_MIPS_SIM=_ABIO32"); \ 99f5121176Skettenis builtin_define ("_MIPS_SZLONG=32"); \ 100f5121176Skettenis builtin_define ("_MIPS_SZPTR=32"); \ 101f5121176Skettenis } \ 102f5121176Skettenis if (TARGET_FLOAT64) \ 103f5121176Skettenis builtin_define ("_MIPS_FPSET=32"); \ 104f5121176Skettenis else \ 105f5121176Skettenis builtin_define ("_MIPS_FPSET=16"); \ 106f5121176Skettenis \ 107f5121176Skettenis builtin_define ("_MIPS_SZINT=32"); \ 108f5121176Skettenis } while (0) 109f5121176Skettenis 110f5121176Skettenis #undef SUBTARGET_CPP_SPEC 111f5121176Skettenis #define SUBTARGET_CPP_SPEC OBSD_CPP_SPEC 112f5121176Skettenis 113f5121176Skettenis /* A standard GNU/Linux mapping. On most targets, it is included in 114f5121176Skettenis CC1_SPEC itself by config/linux.h, but mips.h overrides CC1_SPEC 115f5121176Skettenis and provides this hook instead. */ 116f5121176Skettenis #undef SUBTARGET_CC1_SPEC 117f5121176Skettenis #define SUBTARGET_CC1_SPEC "%{profile:-p}" 118f5121176Skettenis 119f5121176Skettenis /* From iris5.h */ 120404b540aSrobert /* -G is incompatible with -KPIC which is the default, so only allow objects 121404b540aSrobert in the small data section if the user explicitly asks for it. */ 122404b540aSrobert #undef MIPS_DEFAULT_GVALUE 123404b540aSrobert #define MIPS_DEFAULT_GVALUE 0 124404b540aSrobert 125f5121176Skettenis /* Borrowed from sparc/linux.h */ 126f5121176Skettenis #undef LINK_SPEC 127f5121176Skettenis #define LINK_SPEC \ 128f5121176Skettenis "%(endian_spec) \ 129f5121176Skettenis %{!shared:%{!nostdlib:%{!r*:%{!e*:-e __start}}}} \ 130f5121176Skettenis %{shared:-shared} %{R*} \ 131f5121176Skettenis %{static:-Bstatic} \ 132f5121176Skettenis %{!static:-Bdynamic} \ 133ae784e91Sjsg %{rdynamic:-export-dynamic} \ 134f5121176Skettenis %{assert*} \ 135*1107cbefSmillert %{!static:%{!dynamic-linker:-dynamic-linker /usr/libexec/ld.so}}" 136f5121176Skettenis 137f5121176Skettenis /* As an elf system, we need crtbegin/crtend stuff. */ 138404b540aSrobert #undef STARTFILE_SPEC 139f5121176Skettenis #define STARTFILE_SPEC "\ 1405face465Skettenis %{!shared: %{pg:gcrt0%O%s} %{!pg:%{p:gcrt0%O%s} \ 141c3b5dcdcSpascal %{!p:%{!static:crt0%O%s} %{static:%{nopie:crt0%O%s} \ 142c3b5dcdcSpascal %{!nopie:rcrt0%O%s}}}} \ 143f5121176Skettenis crtbegin%O%s} %{shared:crtbeginS%O%s}" 144f5121176Skettenis #undef ENDFILE_SPEC 145f5121176Skettenis #define ENDFILE_SPEC "%{!shared:crtend%O%s} %{shared:crtendS%O%s}" 146404b540aSrobert 147f5121176Skettenis #undef SUBTARGET_ASM_SPEC 148f5121176Skettenis #define SUBTARGET_ASM_SPEC "%{mabi=64: -64} %{!mno-abicalls:-KPIC}" 149f5121176Skettenis 150f5121176Skettenis /* The MIPS assembler has different syntax for .set. We set it to 151f5121176Skettenis .dummy to trap any errors. */ 152f5121176Skettenis #undef SET_ASM_OP 153f5121176Skettenis #define SET_ASM_OP "\t.dummy\t" 154f5121176Skettenis 155f5121176Skettenis #undef ASM_OUTPUT_DEF 156f5121176Skettenis #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ 157f5121176Skettenis do { \ 158f5121176Skettenis fputc ( '\t', FILE); \ 159f5121176Skettenis assemble_name (FILE, LABEL1); \ 160f5121176Skettenis fputs ( " = ", FILE); \ 161f5121176Skettenis assemble_name (FILE, LABEL2); \ 162f5121176Skettenis fputc ( '\n', FILE); \ 163f5121176Skettenis } while (0) 164f5121176Skettenis 165f5121176Skettenis #undef ASM_DECLARE_FUNCTION_NAME 166f5121176Skettenis #define ASM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \ 167f5121176Skettenis do { \ 168f5121176Skettenis if (!flag_inhibit_size_directive) \ 169f5121176Skettenis { \ 170f5121176Skettenis fputs ("\t.ent\t", STREAM); \ 171f5121176Skettenis assemble_name (STREAM, NAME); \ 172f5121176Skettenis putc ('\n', STREAM); \ 173f5121176Skettenis } \ 174f5121176Skettenis ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, NAME, "function"); \ 175f5121176Skettenis assemble_name (STREAM, NAME); \ 176f5121176Skettenis fputs (":\n", STREAM); \ 177f5121176Skettenis } while (0) 178f5121176Skettenis 179f5121176Skettenis #undef ASM_DECLARE_FUNCTION_SIZE 180f5121176Skettenis #define ASM_DECLARE_FUNCTION_SIZE(STREAM, NAME, DECL) \ 181f5121176Skettenis do { \ 182f5121176Skettenis if (!flag_inhibit_size_directive) \ 183f5121176Skettenis { \ 184f5121176Skettenis fputs ("\t.end\t", STREAM); \ 185f5121176Skettenis assemble_name (STREAM, NAME); \ 186f5121176Skettenis putc ('\n', STREAM); \ 187f5121176Skettenis } \ 188f5121176Skettenis } while (0) 189f5121176Skettenis 190f5121176Skettenis /* Tell function_prologue in mips.c that we have already output the .ent/.end 191f5121176Skettenis pseudo-ops. */ 192f5121176Skettenis #undef FUNCTION_NAME_ALREADY_DECLARED 193f5121176Skettenis #define FUNCTION_NAME_ALREADY_DECLARED 1 194f5121176Skettenis 195f5121176Skettenis #undef LOCAL_LABEL_PREFIX 196f5121176Skettenis #define LOCAL_LABEL_PREFIX "." 197f5121176Skettenis 198f5121176Skettenis /* The glibc _mcount stub will save $v0 for us. Don't mess with saving 199f5121176Skettenis it, since ASM_OUTPUT_REG_PUSH/ASM_OUTPUT_REG_POP do not work in the 200f5121176Skettenis presence of $gp-relative calls. */ 201f5121176Skettenis #undef ASM_OUTPUT_REG_PUSH 202f5121176Skettenis #undef ASM_OUTPUT_REG_POP 203f5121176Skettenis 204f5121176Skettenis #undef LIB_SPEC 205f5121176Skettenis #define LIB_SPEC OBSD_LIB_SPEC 206f5121176Skettenis 207f5121176Skettenis #undef ENABLE_EXECUTE_STACK 208bc3a335eSmiod 209bc3a335eSmiod /* Default to -mfix-r4000 -mfix-r4400 when compiling big endian. */ 210bc3a335eSmiod #undef OVERRIDE_OPTIONS 211bc3a335eSmiod #define OVERRIDE_OPTIONS \ 212bc3a335eSmiod do { \ 213bc3a335eSmiod if (TARGET_BIG_ENDIAN) \ 214bc3a335eSmiod { \ 215bc3a335eSmiod target_flags |= MASK_FIX_R4000 | MASK_FIX_R4400; \ 216bc3a335eSmiod } \ 217bc3a335eSmiod override_options (); \ 218bc3a335eSmiod } while (0) 219