freebsd.h revision 260565
1/* Definitions for StrongARM running FreeBSD using the ELF format 2 Copyright (C) 2001, 2004 Free Software Foundation, Inc. 3 Contributed by David E. O'Brien <obrien@FreeBSD.org> and BSDi. 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it 8 under the terms of the GNU General Public License as published 9 by the Free Software Foundation; either version 2, or (at your 10 option) any later version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15 License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING. If not, write to 19 the Free Software Foundation, 51 Franklin Street, Fifth Floor, 20 Boston, MA 02110-1301, USA. */ 21 22#undef SUBTARGET_CPP_SPEC 23#define SUBTARGET_CPP_SPEC FBSD_CPP_SPEC 24 25#undef SUBTARGET_EXTRA_SPECS 26#define SUBTARGET_EXTRA_SPECS \ 27 { "subtarget_extra_asm_spec", SUBTARGET_EXTRA_ASM_SPEC }, \ 28 { "subtarget_asm_float_spec", SUBTARGET_ASM_FLOAT_SPEC }, \ 29 { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER } 30 31#undef SUBTARGET_EXTRA_ASM_SPEC 32#ifdef TARGET_ARM_EABI 33#define SUBTARGET_EXTRA_ASM_SPEC \ 34 "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=4} %{fpic|fpie:-k} %{fPIC|fPIE:-k}" 35#else 36#define SUBTARGET_EXTRA_ASM_SPEC \ 37 "-matpcs %{fpic|fpie:-k} %{fPIC|fPIE:-k}" 38#endif 39 40/* Default to full FPA if -mhard-float is specified. */ 41#undef SUBTARGET_ASM_FLOAT_SPEC 42#define SUBTARGET_ASM_FLOAT_SPEC \ 43 "%{mhard-float:-mfpu=fpa} \ 44 %{mfloat-abi=hard:{!mfpu=*:-mfpu=fpa}} \ 45 %{!mhard-float: %{msoft-float:-mfpu=softvfp;:-mfpu=softvfp}}" 46 47#undef LINK_SPEC 48#define LINK_SPEC " \ 49 %{p:%nconsider using `-pg' instead of `-p' with gprof(1) } \ 50 %{v:-V} \ 51 %{assert*} %{R*} %{rpath*} %{defsym*} \ 52 %{shared:-Bshareable %{h*} %{soname*}} \ 53 %{!shared: \ 54 %{!static: \ 55 %{rdynamic:-export-dynamic} \ 56 %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \ 57 %{static:-Bstatic}} \ 58 %{!static:--hash-style=both --enable-new-dtags} \ 59 %{symbolic:-Bsymbolic} \ 60 -X %{mbig-endian:-EB} %{mlittle-endian:-EL}" 61 62/************************[ Target stuff ]***********************************/ 63 64 65#ifndef TARGET_ENDIAN_DEFAULT 66#define TARGET_ENDIAN_DEFAULT 0 67#endif 68 69#ifdef TARGET_ARM_EABI 70/* We default to a soft-float ABI so that binaries can run on all 71 target hardware. */ 72#undef TARGET_DEFAULT_FLOAT_ABI 73#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT 74 75#undef TARGET_DEFAULT 76#define TARGET_DEFAULT (MASK_INTERWORK | TARGET_ENDIAN_DEFAULT) 77 78#undef ARM_DEFAULT_ABI 79#define ARM_DEFAULT_ABI ARM_ABI_AAPCS_LINUX 80 81#undef TARGET_OS_CPP_BUILTINS 82#define TARGET_OS_CPP_BUILTINS() \ 83 do \ 84 { \ 85 FBSD_TARGET_OS_CPP_BUILTINS(); \ 86 TARGET_BPABI_CPP_BUILTINS(); \ 87 } \ 88 while (false) 89#else 90/* Default it to use ATPCS with soft-VFP. */ 91#undef TARGET_DEFAULT 92#define TARGET_DEFAULT \ 93 (MASK_APCS_FRAME \ 94 | TARGET_ENDIAN_DEFAULT) 95 96#undef ARM_DEFAULT_ABI 97#define ARM_DEFAULT_ABI ARM_ABI_ATPCS 98 99#undef FPUTYPE_DEFAULT 100#define FPUTYPE_DEFAULT FPUTYPE_VFP 101#endif 102 103/* Define the actual types of some ANSI-mandated types. 104 Needs to agree with <machine/ansi.h>. GCC defaults come from c-decl.c, 105 c-common.c, and config/<arch>/<arch>.h. */ 106 107/* arm.h gets this wrong for FreeBSD. We use the GCC defaults instead. */ 108 109#undef SIZE_TYPE 110#define SIZE_TYPE "unsigned int" 111 112#undef PTRDIFF_TYPE 113#define PTRDIFF_TYPE "int" 114 115/* We use the GCC defaults here. */ 116#undef WCHAR_TYPE 117 118#if defined(FREEBSD_ARCH_armv6) 119#undef SUBTARGET_CPU_DEFAULT 120#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm1176jzs 121#undef FBSD_TARGET_CPU_CPP_BUILTINS 122#define FBSD_TARGET_CPU_CPP_BUILTINS() \ 123 do { \ 124 builtin_define ("__FreeBSD_ARCH_armv6__"); \ 125 } while (0) 126#undef TARGET_VERSION 127#define TARGET_VERSION fprintf (stderr, " (FreeBSD/armv6 ELF)"); 128#else 129#undef SUBTARGET_CPU_DEFAULT 130#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9 131#undef TARGET_VERSION 132#define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)"); 133#endif 134 135/* FreeBSD does its profiling differently to the Acorn compiler. We 136 don't need a word following the mcount call; and to skip it 137 requires either an assembly stub or use of fomit-frame-pointer when 138 compiling the profiling functions. Since we break Acorn CC 139 compatibility below a little more won't hurt. */ 140 141#undef ARM_FUNCTION_PROFILER 142#define ARM_FUNCTION_PROFILER(STREAM,LABELNO) \ 143{ \ 144 asm_fprintf (STREAM, "\tmov\t%Rip, %Rlr\n"); \ 145 asm_fprintf (STREAM, "\tbl\t__mcount%s\n", \ 146 (TARGET_ARM && NEED_PLT_RELOC) \ 147 ? "(PLT)" : ""); \ 148} 149 150/* Clear the instruction cache from `BEG' to `END'. This makes a 151 call to the ARM_SYNC_ICACHE architecture specific syscall. */ 152#define CLEAR_INSN_CACHE(BEG, END) \ 153do \ 154 { \ 155 extern int sysarch(int number, void *args); \ 156 struct \ 157 { \ 158 unsigned int addr; \ 159 int len; \ 160 } s; \ 161 s.addr = (unsigned int)(BEG); \ 162 s.len = (END) - (BEG); \ 163 (void) sysarch (0, &s); \ 164 } \ 165while (0) 166 167