1 /* Definitions of target machine for GCC, 2 for ARM with targetting the VXWorks run time environment. 3 Copyright (C) 1999, 2000, 2003, 2004, 2007, 2008 4 Free Software Foundation, Inc. 5 6 Contributed by: Mike Stump <mrs@wrs.com> 7 Brought up to date by CodeSourcery, LLC. 8 9 This file is part of GCC. 10 11 GCC is free software; you can redistribute it and/or modify 12 it under the terms of the GNU General Public License as published by 13 the Free Software Foundation; either version 3, or (at your option) 14 any later version. 15 16 GCC is distributed in the hope that it will be useful, 17 but WITHOUT ANY WARRANTY; without even the implied warranty of 18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 GNU General Public License for more details. 20 21 You should have received a copy of the GNU General Public License 22 along with GCC; see the file COPYING3. If not see 23 <http://www.gnu.org/licenses/>. */ 24 25 26 #define TARGET_OS_CPP_BUILTINS() \ 27 do { \ 28 if (TARGET_BIG_END) \ 29 builtin_define ("ARMEB"); \ 30 else \ 31 builtin_define ("ARMEL"); \ 32 \ 33 if (arm_arch_xscale) \ 34 builtin_define ("CPU=XSCALE"); \ 35 else if (arm_arch5) \ 36 builtin_define ("CPU=ARMARCH5"); \ 37 else if (arm_arch4) \ 38 { \ 39 if (thumb_code) \ 40 builtin_define ("CPU=ARMARCH4_T"); \ 41 else \ 42 builtin_define ("CPU=ARMARCH4"); \ 43 } \ 44 VXWORKS_OS_CPP_BUILTINS (); \ 45 } while (0) 46 47 #undef OVERRIDE_OPTIONS 48 #define OVERRIDE_OPTIONS \ 49 do \ 50 { \ 51 VXWORKS_OVERRIDE_OPTIONS; \ 52 arm_override_options (); \ 53 } \ 54 while (0) 55 56 /* Subsume the arm/elf.h definition, and add RTP hooks. */ 57 #undef SUBTARGET_CPP_SPEC 58 #define SUBTARGET_CPP_SPEC "-D__ELF__" VXWORKS_ADDITIONAL_CPP_SPEC 59 60 #undef CC1_SPEC 61 #define CC1_SPEC \ 62 "%{tstrongarm:-mlittle-endian -mcpu=strongarm ; \ 63 t4: -mlittle-endian -march=armv4 ; \ 64 t4be: -mbig-endian -march=armv4 ; \ 65 t4t: -mthumb -mthumb-interwork -mlittle-endian -march=armv4t ; \ 66 t4tbe: -mthumb -mthumb-interwork -mbig-endian -march=armv4t ; \ 67 t5: -mlittle-endian -march=armv5 ; \ 68 t5be: -mbig-endian -march=armv5 ; \ 69 t5t: -mthumb -mthumb-interwork -mlittle-endian -march=armv5 ; \ 70 t5tbe: -mthumb -mthumb-interwork -mbig-endian -march=armv5 ; \ 71 txscale: -mlittle-endian -mcpu=xscale ; \ 72 txscalebe: -mbig-endian -mcpu=xscale ; \ 73 : -march=armv4}" 74 75 /* Pass -EB for big-endian targets. */ 76 #define VXWORKS_ENDIAN_SPEC \ 77 "%{mbig-endian|t4be|t4tbe|t5be|t5tbe|txscalebe:-EB}" 78 79 #undef SUBTARGET_EXTRA_ASM_SPEC 80 #define SUBTARGET_EXTRA_ASM_SPEC VXWORKS_ENDIAN_SPEC 81 82 #undef LINK_SPEC 83 #define LINK_SPEC VXWORKS_LINK_SPEC " " VXWORKS_ENDIAN_SPEC 84 85 #undef LIB_SPEC 86 #define LIB_SPEC VXWORKS_LIB_SPEC 87 88 #undef STARTFILE_SPEC 89 #define STARTFILE_SPEC VXWORKS_STARTFILE_SPEC 90 91 #undef ENDFILE_SPEC 92 #define ENDFILE_SPEC VXWORKS_ENDFILE_SPEC 93 94 #undef TARGET_VERSION 95 #define TARGET_VERSION fputs (" (ARM/VxWorks)", stderr); 96 97 /* There is no default multilib. */ 98 #undef MULTILIB_DEFAULTS 99 100 #define FPUTYPE_DEFAULT "vfp" 101 102 #undef FUNCTION_PROFILER 103 #define FUNCTION_PROFILER VXWORKS_FUNCTION_PROFILER 104 105 /* We want to be compatible with a version of "2.96" at one point in 106 the past before this macro was changed. */ 107 #undef DEFAULT_STRUCTURE_SIZE_BOUNDARY 108 #define DEFAULT_STRUCTURE_SIZE_BOUNDARY 8 109 110 /* The kernel loader does not allow relocations to overflow, so we 111 cannot allow arbitrary relocation addends in kernel modules or RTP 112 executables. Also, the dynamic loader uses the resolved relocation 113 value to distinguish references to the text and data segments, so we 114 cannot allow arbitrary offsets for shared libraries either. */ 115 #undef ARM_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 116 #define ARM_OFFSETS_MUST_BE_WITHIN_SECTIONS_P 1 117 118 #undef TARGET_DEFAULT_WORD_RELOCATIONS 119 #define TARGET_DEFAULT_WORD_RELOCATIONS 1 120