1/* Definitions for ARM running Linux-based GNU systems using ELF 2 Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3 2005, 2006, 2007, 2008 4 Free Software Foundation, Inc. 5 Contributed by Philip Blundell <philb@gnu.org> 6 7 This file is part of GCC. 8 9 GCC is free software; you can redistribute it and/or modify it 10 under the terms of the GNU General Public License as published 11 by the Free Software Foundation; either version 3, or (at your 12 option) any later version. 13 14 GCC is distributed in the hope that it will be useful, but WITHOUT 15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with GCC; see the file COPYING3. If not see 21 <http://www.gnu.org/licenses/>. */ 22 23/* elfos.h should have already been included. Now just override 24 any conflicting definitions and add any extras. */ 25 26/* Run-time Target Specification. */ 27#undef TARGET_VERSION 28#define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr); 29 30#undef TARGET_DEFAULT_FLOAT_ABI 31#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD 32 33/* TARGET_BIG_ENDIAN_DEFAULT is set in 34 config.gcc for big endian configurations. */ 35#if TARGET_BIG_ENDIAN_DEFAULT 36#define TARGET_ENDIAN_DEFAULT MASK_BIG_END 37#define TARGET_ENDIAN_OPTION "mbig-endian" 38#define TARGET_LINKER_EMULATION "armelfb_linux" 39#else 40#define TARGET_ENDIAN_DEFAULT 0 41#define TARGET_ENDIAN_OPTION "mlittle-endian" 42#define TARGET_LINKER_EMULATION "armelf_linux" 43#endif 44 45#undef TARGET_DEFAULT 46#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT) 47 48#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 49 50#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p" 51 52#undef MULTILIB_DEFAULTS 53#define MULTILIB_DEFAULTS \ 54 { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" } 55 56/* Now we define the strings used to build the spec file. */ 57#undef LIB_SPEC 58#define LIB_SPEC \ 59 "%{pthread:-lpthread} \ 60 %{shared:-lc} \ 61 %{!shared:%{profile:-lc_p}%{!profile:-lc}}" 62 63#define LIBGCC_SPEC "-lgcc" 64 65#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" 66 67#define LINUX_TARGET_LINK_SPEC "%{h*} %{version:-v} \ 68 %{b} \ 69 %{static:-Bstatic} \ 70 %{shared:-shared} \ 71 %{symbolic:-Bsymbolic} \ 72 %{rdynamic:-export-dynamic} \ 73 %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "} \ 74 -X \ 75 %{mbig-endian:-EB} %{mlittle-endian:-EL}" \ 76 SUBTARGET_EXTRA_LINK_SPEC 77 78#undef LINK_SPEC 79#define LINK_SPEC LINUX_TARGET_LINK_SPEC 80 81#define TARGET_OS_CPP_BUILTINS() \ 82 do \ 83 { \ 84 LINUX_TARGET_OS_CPP_BUILTINS(); \ 85 } \ 86 while (0) 87 88/* This is how we tell the assembler that two symbols have the same value. */ 89#define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \ 90 do \ 91 { \ 92 assemble_name (FILE, NAME1); \ 93 fputs (" = ", FILE); \ 94 assemble_name (FILE, NAME2); \ 95 fputc ('\n', FILE); \ 96 } \ 97 while (0) 98 99/* NWFPE always understands FPA instructions. */ 100#undef FPUTYPE_DEFAULT 101#define FPUTYPE_DEFAULT "fpe3" 102 103/* Call the function profiler with a given profile label. */ 104#undef ARM_FUNCTION_PROFILER 105#define ARM_FUNCTION_PROFILER(STREAM, LABELNO) \ 106{ \ 107 fprintf (STREAM, "\tbl\tmcount%s\n", \ 108 (TARGET_ARM && NEED_PLT_RELOC) ? "(PLT)" : ""); \ 109} 110 111/* The GNU/Linux profiler clobbers the link register. Make sure the 112 prologue knows to save it. */ 113#define PROFILE_HOOK(X) \ 114 emit_clobber (gen_rtx_REG (SImode, LR_REGNUM)) 115 116/* The GNU/Linux profiler needs a frame pointer. */ 117#define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile 118 119/* Add .note.GNU-stack. */ 120#undef NEED_INDICATE_EXEC_STACK 121#define NEED_INDICATE_EXEC_STACK 1 122