1 /* Definitions of target machine for GNU compiler, NetBSD/arm ELF version.
2    Copyright (C) 2002-2021 Free Software Foundation, Inc.
3    Contributed by Wasabi Systems, Inc.
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 /* Run-time Target Specification.  */
22 #undef MULTILIB_DEFAULTS
23 #define MULTILIB_DEFAULTS { "mabi=aapcs-linux" }
24 
25 #define TARGET_LINKER_EABI_SUFFIX_SOFT \
26   "%{!mabi=apcs-gnu:%{!mabi=atpcs:%{mfloat-abi=hard:_eabihf;:_eabi}}}"
27 #define TARGET_LINKER_EABI_SUFFIX_HARD \
28   "%{!mabi=apcs-gnu:%{!mabi=atpcs:%{mfloat-abi=soft:_eabi;:_eabihf}}}"
29 
30 #define TARGET_LINKER_EABI_SUFFIX			\
31   (TARGET_DEFAULT_FLOAT_ABI == ARM_FLOAT_ABI_SOFT	\
32    ? TARGET_LINKER_EABI_SUFFIX_SOFT			\
33    : TARGET_LINKER_EABI_SUFFIX_HARD)
34 
35 #define TARGET_LINKER_BIG_EMULATION "armelfb_nbsd%(linker_eabi_suffix)"
36 #define TARGET_LINKER_LITTLE_EMULATION "armelf_nbsd%(linker_eabi_suffix)"
37 
38 /* TARGET_BIG_ENDIAN_DEFAULT is set in
39    config.gcc for big endian configurations.  */
40 #undef  TARGET_LINKER_EMULATION
41 #if TARGET_BIG_ENDIAN_DEFAULT
42 #define TARGET_LINKER_EMULATION TARGET_LINKER_BIG_EMULATION
43 #else
44 #define TARGET_LINKER_EMULATION TARGET_LINKER_LITTLE_EMULATION
45 #endif
46 
47 #undef ARM_DEFAULT_ABI
48 #define ARM_DEFAULT_ABI ARM_ABI_AAPCS_LINUX
49 
50 #undef ARM_UNWIND_INFO
51 #define ARM_UNWIND_INFO 0
52 #undef DWARF2_UNWIND_INFO
53 #define DWARF2_UNWIND_INFO 1
54 
55 #undef TARGET_OS_CPP_BUILTINS
56 #define TARGET_OS_CPP_BUILTINS()		\
57   do						\
58     {						\
59       if (TARGET_AAPCS_BASED)			\
60 	TARGET_BPABI_CPP_BUILTINS();		\
61       NETBSD_OS_CPP_BUILTINS_ELF();		\
62       if (DWARF2_UNWIND_INFO)			\
63 	builtin_define ("__ARM_DWARF_EH__");	\
64     }						\
65   while (0)
66 
67 #undef SUBTARGET_CPP_SPEC
68 #define SUBTARGET_CPP_SPEC NETBSD_CPP_SPEC
69 
70 /*
71  * Override AAPCS types to remain compatible the existing NetBSD types.
72  */
73 #undef WCHAR_TYPE
74 #define WCHAR_TYPE "int"
75 
76 #undef SIZE_TYPE
77 #define SIZE_TYPE "long unsigned int"
78 
79 #undef PTRDIFF_TYPE
80 #define PTRDIFF_TYPE "long int"
81 
82 #undef SUBTARGET_EXTRA_ASM_SPEC
83 #define SUBTARGET_EXTRA_ASM_SPEC		\
84   "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu} "	\
85   "%{fpic|fpie:-k} "				\
86   "%{fPIC|fPIE:-k}"
87 
88 #undef SUBTARGET_EXTRA_SPECS
89 #define SUBTARGET_EXTRA_SPECS						\
90   { "subtarget_extra_asm_spec",	SUBTARGET_EXTRA_ASM_SPEC },		\
91   { "linker_eabi_suffix",	TARGET_LINKER_EABI_SUFFIX },		\
92   { "linker_emulation",		TARGET_LINKER_EMULATION },		\
93   { "linker_big_emulation",	TARGET_LINKER_BIG_EMULATION },		\
94   { "linker_little_emulation",	TARGET_LINKER_LITTLE_EMULATION },	\
95   { "target_fix_v4bx_spec",	TARGET_FIX_V4BX_SPEC },			\
96   NETBSD_SUBTARGET_EXTRA_SPECS
97 
98 #define NETBSD_ENTRY_POINT "__start"
99 
100 #undef LINK_SPEC
101 #define LINK_SPEC						\
102   "-X %{mbig-endian:-EB -m %(linker_big_emulation)} "		\
103   "%{mlittle-endian:-EL -m %(linker_liitle_emulation)} "	\
104   "%{!mbig-endian:%{!mlittle-endian:-m %(linker_emulation)}} "	\
105   "%(target_fix_v4bx_spec) %(netbsd_link_spec)"
106