1/* Configuration file for ARM BPABI targets. 2 Copyright (C) 2004-2013 Free Software Foundation, Inc. 3 Contributed by CodeSourcery, LLC 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 3, 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 COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21/* Use the AAPCS ABI by default. */ 22#define ARM_DEFAULT_ABI ARM_ABI_AAPCS 23 24/* Assume that AAPCS ABIs should adhere to the full BPABI. */ 25#define TARGET_BPABI (TARGET_AAPCS_BASED) 26 27/* BPABI targets use EABI frame unwinding tables. */ 28#undef ARM_UNWIND_INFO 29#define ARM_UNWIND_INFO 1 30 31/* Section 4.1 of the AAPCS requires the use of VFP format. */ 32#undef FPUTYPE_DEFAULT 33#define FPUTYPE_DEFAULT "vfp" 34 35/* TARGET_BIG_ENDIAN_DEFAULT is set in 36 config.gcc for big endian configurations. */ 37#if TARGET_BIG_ENDIAN_DEFAULT 38#define TARGET_ENDIAN_DEFAULT MASK_BIG_END 39#else 40#define TARGET_ENDIAN_DEFAULT 0 41#endif 42 43/* EABI targets should enable interworking by default. */ 44#undef TARGET_DEFAULT 45#define TARGET_DEFAULT (MASK_INTERWORK | TARGET_ENDIAN_DEFAULT) 46 47/* The ARM BPABI functions return a boolean; they use no special 48 calling convention. */ 49#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) TARGET_BPABI 50 51/* The BPABI integer comparison routines return { -1, 0, 1 }. */ 52#define TARGET_LIB_INT_CMP_BIASED !TARGET_BPABI 53 54#define TARGET_FIX_V4BX_SPEC " %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*"\ 55 "|march=armv4|mcpu=fa526|mcpu=fa626:--fix-v4bx}" 56 57#if TARGET_BIG_ENDIAN_DEFAULT 58#define BE8_LINK_SPEC \ 59 " %{!mlittle-endian:%{march=armv7-a|mcpu=cortex-a5 \ 60 |mcpu=cortex-a7 \ 61 |mcpu=cortex-a8|mcpu=cortex-a9|mcpu=cortex-a15 \ 62 |mcpu=marvell-pj4 \ 63 |mcpu=generic-armv7-a \ 64 |march=armv7-m|mcpu=cortex-m3 \ 65 |march=armv7e-m|mcpu=cortex-m4 \ 66 |march=armv6-m|mcpu=cortex-m0 \ 67 |march=armv8-a \ 68 :%{!r:--be8}}}" 69#else 70#define BE8_LINK_SPEC \ 71 " %{mbig-endian:%{march=armv7-a|mcpu=cortex-a5 \ 72 |mcpu=cortex-a7 \ 73 |mcpu=cortex-a8|mcpu=cortex-a9|mcpu=cortex-a15 \ 74 |mcpu=marvell-pj4 \ 75 |mcpu=generic-armv7-a \ 76 |march=armv7-m|mcpu=cortex-m3 \ 77 |march=armv7e-m|mcpu=cortex-m4 \ 78 |march=armv6-m|mcpu=cortex-m0 \ 79 |march=armv8-a \ 80 :%{!r:--be8}}}" 81#endif 82 83/* Tell the assembler to build BPABI binaries. */ 84#undef SUBTARGET_EXTRA_ASM_SPEC 85#define SUBTARGET_EXTRA_ASM_SPEC \ 86 "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=5}" TARGET_FIX_V4BX_SPEC 87 88#ifndef SUBTARGET_EXTRA_LINK_SPEC 89#define SUBTARGET_EXTRA_LINK_SPEC "" 90#endif 91 92/* The generic link spec in elf.h does not support shared libraries. */ 93#define BPABI_LINK_SPEC \ 94 "%{mbig-endian:-EB} %{mlittle-endian:-EL} " \ 95 "%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \ 96 "-X" SUBTARGET_EXTRA_LINK_SPEC TARGET_FIX_V4BX_SPEC BE8_LINK_SPEC 97 98#undef LINK_SPEC 99#define LINK_SPEC BPABI_LINK_SPEC 100 101/* The BPABI requires that we always use an out-of-line implementation 102 of RTTI comparison, even if the target supports weak symbols, 103 because the same object file might be used on a target that does 104 not support merging symbols across DLL boundaries. This macro is 105 broken out separately so that it can be used within 106 TARGET_OS_CPP_BUILTINS in configuration files for systems based on 107 the BPABI. */ 108#define TARGET_BPABI_CPP_BUILTINS() \ 109 do \ 110 { \ 111 builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0"); \ 112 } \ 113 while (false) 114 115#undef TARGET_OS_CPP_BUILTINS 116#define TARGET_OS_CPP_BUILTINS() \ 117 TARGET_BPABI_CPP_BUILTINS() 118 119/* The BPABI specifies the use of .{init,fini}_array. Therefore, we 120 do not want GCC to put anything into the .{init,fini} sections. */ 121#undef INIT_SECTION_ASM_OP 122#undef FINI_SECTION_ASM_OP 123#define INIT_ARRAY_SECTION_ASM_OP ARM_EABI_CTORS_SECTION_OP 124#define FINI_ARRAY_SECTION_ASM_OP ARM_EABI_DTORS_SECTION_OP 125 126/* The legacy _mcount implementation assumes r11 points to a 127 4-word APCS frame. This is generally not true for EABI targets, 128 particularly not in Thumb mode. We assume the mcount 129 implementation does not require a counter variable (No Counter). 130 Note that __gnu_mcount_nc will be entered with a misaligned stack. 131 This is OK because it uses a special calling convention anyway. */ 132 133#undef NO_PROFILE_COUNTERS 134#define NO_PROFILE_COUNTERS 1 135#undef ARM_FUNCTION_PROFILER 136#define ARM_FUNCTION_PROFILER(STREAM, LABELNO) \ 137{ \ 138 fprintf (STREAM, "\tpush\t{lr}\n"); \ 139 fprintf (STREAM, "\tbl\t__gnu_mcount_nc\n"); \ 140} 141 142#undef SUBTARGET_FRAME_POINTER_REQUIRED 143#define SUBTARGET_FRAME_POINTER_REQUIRED 0 144 145/* __gnu_mcount_nc restores the original LR value before returning. Ensure 146 that there is no unnecessary hook set up. */ 147#undef PROFILE_HOOK 148