1 /* Definitions for ARM running Linux-based GNU systems using ELF 2 Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002 3 Free Software Foundation, Inc. 4 Contributed by Philip Blundell <philb@gnu.org> 5 6 This file is part of GNU CC. 7 8 GNU CC is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2, or (at your option) 11 any later version. 12 13 GNU CC is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; see the file COPYING. If not, write to 20 the Free Software Foundation, 59 Temple Place - Suite 330, 21 Boston, MA 02111-1307, USA. */ 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 /* Do not assume anything about header files. */ 31 #define NO_IMPLICIT_EXTERN_C 32 33 /* Default is to use APCS-32 mode. */ 34 #undef TARGET_DEFAULT 35 #define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS) 36 37 #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 38 39 #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p" 40 41 #undef MULTILIB_DEFAULTS 42 #define MULTILIB_DEFAULTS \ 43 { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" } 44 45 #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" 46 47 /* The GNU C++ standard library requires that these macros be defined. */ 48 #undef CPLUSPLUS_CPP_SPEC 49 #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" 50 51 /* Now we define the strings used to build the spec file. */ 52 #define LIB_SPEC \ 53 "%{pthread:-lpthread} \ 54 %{shared:-lc} \ 55 %{!shared:%{profile:-lc_p}%{!profile:-lc}}" 56 57 #define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc" 58 59 /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add 60 the GNU/Linux magical crtbegin.o file (see crtstuff.c) which 61 provides part of the support for getting C++ file-scope static 62 object constructed before entering `main'. */ 63 64 #undef STARTFILE_SPEC 65 #define STARTFILE_SPEC \ 66 "%{!shared: \ 67 %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ 68 %{!p:%{profile:gcrt1.o%s} \ 69 %{!profile:crt1.o%s}}}} \ 70 crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 71 72 /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on 73 the GNU/Linux magical crtend.o file (see crtstuff.c) which 74 provides part of the support for getting C++ file-scope static 75 object constructed before entering `main', followed by a normal 76 GNU/Linux "finalizer" file, `crtn.o'. */ 77 78 #undef ENDFILE_SPEC 79 #define ENDFILE_SPEC \ 80 "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" 81 82 #undef LINK_SPEC 83 #define LINK_SPEC "%{h*} %{version:-v} \ 84 %{b} %{Wl,*:%*} \ 85 %{static:-Bstatic} \ 86 %{shared:-shared} \ 87 %{symbolic:-Bsymbolic} \ 88 %{rdynamic:-export-dynamic} \ 89 %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \ 90 -X \ 91 %{mbig-endian:-EB}" \ 92 SUBTARGET_EXTRA_LINK_SPEC 93 94 #define TARGET_OS_CPP_BUILTINS() \ 95 do { \ 96 builtin_define_std ("unix"); \ 97 builtin_define_std ("linux"); \ 98 builtin_define ("__gnu_linux__"); \ 99 builtin_define ("__ELF__"); \ 100 builtin_assert ("system=unix"); \ 101 builtin_assert ("system=posix"); \ 102 } while (0) 103 104 /* This is how we tell the assembler that two symbols have the same value. */ 105 #define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \ 106 do \ 107 { \ 108 assemble_name (FILE, NAME1); \ 109 fputs (" = ", FILE); \ 110 assemble_name (FILE, NAME2); \ 111 fputc ('\n', FILE); \ 112 } \ 113 while (0) 114 115 /* NWFPE always understands FPA instructions. */ 116 #undef FP_DEFAULT 117 #define FP_DEFAULT FP_SOFT3 118 119 /* Call the function profiler with a given profile label. */ 120 #undef ARM_FUNCTION_PROFILER 121 #define ARM_FUNCTION_PROFILER(STREAM, LABELNO) \ 122 { \ 123 fprintf (STREAM, "\tbl\tmcount%s\n", NEED_PLT_RELOC ? "(PLT)" : ""); \ 124 } 125 126 #undef CC1_SPEC 127 #define CC1_SPEC "%{profile:-p}" 128 129 #define LINK_GCC_C_SEQUENCE_SPEC \ 130 "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" 131