1/* Definitions for ARM running Linux-based GNU systems using ELF
2   Copyright (C) 1993-2015 Free Software Foundation, Inc.
3   Contributed by Philip Blundell <philb@gnu.org>
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   Under Section 7 of GPL version 3, you are granted additional
18   permissions described in the GCC Runtime Library Exception, version
19   3.1, as published by the Free Software Foundation.
20
21   You should have received a copy of the GNU General Public License and
22   a copy of the GCC Runtime Library Exception along with this program;
23   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24   <http://www.gnu.org/licenses/>.  */
25
26/* elfos.h should have already been included.  Now just override
27   any conflicting definitions and add any extras.  */
28
29/* Run-time Target Specification.  */
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/* We do not have any MULTILIB_OPTIONS specified, so there are no
53   MULTILIB_DEFAULTS.  */
54#undef  MULTILIB_DEFAULTS
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 "%{mfloat-abi=soft*:-lfloat} -lgcc"
64
65#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
66
67#define LINUX_TARGET_LINK_SPEC  "%{h*} \
68   %{static:-Bstatic} \
69   %{shared:-shared} \
70   %{symbolic:-Bsymbolic} \
71   %{!static: \
72     %{rdynamic:-export-dynamic} \
73     %{!shared:-dynamic-linker " GNU_USER_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	GNU_USER_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#undef  FPUTYPE_DEFAULT
100#define FPUTYPE_DEFAULT "vfp"
101
102/* Call the function profiler with a given profile label.  */
103#undef  ARM_FUNCTION_PROFILER
104#define ARM_FUNCTION_PROFILER(STREAM, LABELNO)  			\
105{									\
106  fprintf (STREAM, "\tbl\tmcount%s\n",					\
107	   (TARGET_ARM && NEED_PLT_RELOC) ? "(PLT)" : "");		\
108}
109
110/* The GNU/Linux profiler clobbers the link register.  Make sure the
111   prologue knows to save it.  */
112#define PROFILE_HOOK(X)						\
113  emit_clobber (gen_rtx_REG (SImode, LR_REGNUM))
114
115/* The GNU/Linux profiler needs a frame pointer.  */
116#define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile
117
118/* Add .note.GNU-stack.  */
119#undef NEED_INDICATE_EXEC_STACK
120#define NEED_INDICATE_EXEC_STACK	1
121
122/* Uninitialized common symbols in non-PIE executables, even with
123   strong definitions in dependent shared libraries, will resolve
124   to COPY relocated symbol in the executable.  See PR65780.  */
125#undef TARGET_BINDS_LOCAL_P
126#define TARGET_BINDS_LOCAL_P default_binds_local_p_2
127