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 "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -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