]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/gcc/config/arm/freebsd.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / gcc / config / arm / freebsd.h
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