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 #define SUBTARGET_EXTRA_ASM_SPEC \ 33 "-matpcs %{fpic|fpie:-k} %{fPIC|fPIE:-k}" 34 35 /* Default to full FPA if -mhard-float is specified. */ 36 #undef SUBTARGET_ASM_FLOAT_SPEC 37 #define SUBTARGET_ASM_FLOAT_SPEC \ 38 "%{mhard-float:-mfpu=fpa} \ 39 %{mfloat-abi=hard:{!mfpu=*:-mfpu=fpa}} \ 40 %{!mhard-float: %{msoft-float:-mfpu=softvfp;:-mfpu=softvfp}}" 41 42 #undef LINK_SPEC 43 #define LINK_SPEC " \ 44 %{p:%nconsider using `-pg' instead of `-p' with gprof(1) } \ 45 %{v:-V} \ 46 %{assert*} %{R*} %{rpath*} %{defsym*} \ 47 %{shared:-Bshareable %{h*} %{soname*}} \ 48 %{!shared: \ 49 %{!static: \ 50 %{rdynamic:-export-dynamic} \ 51 %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \ 52 %{static:-Bstatic}} \ 53 %{!static:--hash-style=both --enable-new-dtags} \ 54 %{symbolic:-Bsymbolic} \ 55 -X %{mbig-endian:-EB} %{mlittle-endian:-EL}" 56 57 /************************[ Target stuff ]***********************************/ 58 59 #undef TARGET_VERSION 60 #define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)"); 61 62 #ifndef TARGET_ENDIAN_DEFAULT 63 #define TARGET_ENDIAN_DEFAULT 0 64 #endif 65 66 /* Default it to use ATPCS with soft-VFP. */ 67 #undef TARGET_DEFAULT 68 #define TARGET_DEFAULT \ 69 (MASK_APCS_FRAME \ 70 | TARGET_ENDIAN_DEFAULT) 71 72 #undef ARM_DEFAULT_ABI 73 #define ARM_DEFAULT_ABI ARM_ABI_ATPCS 74 75 /* Define the actual types of some ANSI-mandated types. 76 Needs to agree with <machine/ansi.h>. GCC defaults come from c-decl.c, 77 c-common.c, and config/<arch>/<arch>.h. */ 78 79 /* arm.h gets this wrong for FreeBSD. We use the GCC defaults instead. */ 80 81 #undef SIZE_TYPE 82 #define SIZE_TYPE "unsigned int" 83 84 #undef PTRDIFF_TYPE 85 #define PTRDIFF_TYPE "int" 86 87 /* We use the GCC defaults here. */ 88 #undef WCHAR_TYPE 89 90 #undef SUBTARGET_CPU_DEFAULT 91 #define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm 92 93 /* FreeBSD does its profiling differently to the Acorn compiler. We 94 don't need a word following the mcount call; and to skip it 95 requires either an assembly stub or use of fomit-frame-pointer when 96 compiling the profiling functions. Since we break Acorn CC 97 compatibility below a little more won't hurt. */ 98 99 #undef ARM_FUNCTION_PROFILER 100 #define ARM_FUNCTION_PROFILER(STREAM,LABELNO) \ 101 { \ 102 asm_fprintf (STREAM, "\tmov\t%Rip, %Rlr\n"); \ 103 asm_fprintf (STREAM, "\tbl\t__mcount%s\n", \ 104 (TARGET_ARM && NEED_PLT_RELOC) \ 105 ? "(PLT)" : ""); \ 106 } 107 108 /* Clear the instruction cache from `BEG' to `END'. This makes a 109 call to the ARM_SYNC_ICACHE architecture specific syscall. */ 110 #define CLEAR_INSN_CACHE(BEG, END) \ 111 do \ 112 { \ 113 extern int sysarch(int number, void *args); \ 114 struct \ 115 { \ 116 unsigned int addr; \ 117 int len; \ 118 } s; \ 119 s.addr = (unsigned int)(BEG); \ 120 s.len = (END) - (BEG); \ 121 (void) sysarch (0, &s); \ 122 } \ 123 while (0) 124 125 #undef FPUTYPE_DEFAULT 126 #define FPUTYPE_DEFAULT FPUTYPE_VFP 127