| OLD | NEW |
| 1 /* Target definitions for GCC for NativeClient using ELF | 1 /* Target definitions for GCC for NativeClient using ELF |
| 2 Copyright (C) 1988, 1991, 1995, 2000, 2001, 2002 | 2 Copyright (C) 1988, 1991, 1995, 2000, 2001, 2002 |
| 3 Free Software Foundation, Inc. | 3 Free Software Foundation, Inc. |
| 4 | 4 |
| 5 Derived from sysv4.h written by Ron Guilmette (rfg@netcom.com). | 5 Derived from sysv4.h written by Ron Guilmette (rfg@netcom.com). |
| 6 | 6 |
| 7 This file is part of GCC. | 7 This file is part of GCC. |
| 8 | 8 |
| 9 GCC is free software; you can redistribute it and/or modify | 9 GCC is free software; you can redistribute it and/or modify |
| 10 it under the terms of the GNU General Public License as published by | 10 it under the terms of the GNU General Public License as published by |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 #else | 50 #else |
| 51 #define STARTFILE_SPEC \ | 51 #define STARTFILE_SPEC \ |
| 52 "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ | 52 "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \ |
| 53 crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" | 53 crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" |
| 54 #endif | 54 #endif |
| 55 | 55 |
| 56 /* Provide a ENDFILE_SPEC. Here we tack on | 56 /* Provide a ENDFILE_SPEC. Here we tack on |
| 57 the GNU/Linux magical crtend.o file (see crtstuff.c) which provides part of | 57 the GNU/Linux magical crtend.o file (see crtstuff.c) which provides part of |
| 58 the support for getting C++ file-scope static object constructed before | 58 the support for getting C++ file-scope static object constructed before |
| 59 entering `main', followed by a normal GNU/Linux "finalizer" file, `crtn.o'. | 59 entering `main', followed by a normal GNU/Linux "finalizer" file, `crtn.o'. |
| 60 TODO(pasko): add -ffast-math support to ENDFILE_SPEC. | 60 TODO(pasko): add -ffast-math support to ENDFILE_SPEC. */ |
| 61 */ | |
| 62 | 61 |
| 63 #undef ENDFILE_SPEC | 62 #undef ENDFILE_SPEC |
| 64 #define ENDFILE_SPEC \ | 63 #define ENDFILE_SPEC \ |
| 65 "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" | 64 "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" |
| 66 | 65 |
| 67 /* This is for -profile to use -lc_p instead of -lc. */ | 66 /* This is for -profile to use -lc_p instead of -lc. */ |
| 68 #ifndef CC1_SPEC | 67 #ifndef CC1_SPEC |
| 69 #define CC1_SPEC "%{profile:-p}" | 68 #define CC1_SPEC "%{profile:-p}" |
| 70 #endif | 69 #endif |
| 71 | 70 |
| 72 /* The GNU C++ standard library requires that these macros be defined. */ | 71 /* The GNU C++ standard library requires that these macros be defined. */ |
| 73 #undef CPLUSPLUS_CPP_SPEC | 72 #undef CPLUSPLUS_CPP_SPEC |
| 74 #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" | 73 #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" |
| 75 | 74 |
| 76 #undef LIB_SPEC | 75 #undef LIB_SPEC |
| 77 #define LIB_SPEC \ | 76 #define LIB_SPEC \ |
| 78 "%{pthread:-lpthread} \ | 77 "%{pthread:-lpthread} \ |
| 79 %{shared:-lc} \ | 78 %{shared:-lc} \ |
| 80 %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}" | 79 %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}" |
| 81 | 80 |
| 82 /* Pass the NativeClient specific options to the assembler */ | 81 /* Pass the NativeClient specific options to the assembler. */ |
| 83 #undef ASM_SPEC | 82 #undef ASM_SPEC |
| 84 #define ASM_SPEC \ | 83 #define ASM_SPEC \ |
| 85 "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} " \ | 84 "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} " \ |
| 86 "%{fnacl-library-mode:-nacl-library-mode} " \ | 85 "%{fnacl-library-mode:-nacl-library-mode} " \ |
| 87 "%{fnacl-align-16:-nacl-align=4} " \ | 86 "%{fnacl-align-16:-nacl-align=4} " \ |
| 88 "%{fnacl-align-32:-nacl-align=5} " \ | 87 "%{fnacl-align-32:-nacl-align=5} " \ |
| 89 "%{Ym,*} %{Yd,*} %{Wa,*:%*} %{m32:--32} %{m64:--64} " \ | 88 "%{Ym,*} %{Yd,*} %{Wa,*:%*} %{m32:--32} %{m64:--64} " \ |
| 90 "%{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}" | 89 "%{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}" |
| 91 | 90 |
| 92 /* `crt_platform' contains low-level platform-specific intrinsics in C. */ | 91 /* `crt_platform' contains low-level platform-specific intrinsics in C. */ |
| 93 #undef LIB_SPEC | 92 #undef LIB_SPEC |
| 94 #define LIB_SPEC \ | 93 #define LIB_SPEC \ |
| 95 "%{pthread:-lpthread} \ | 94 "%{pthread:-lpthread} \ |
| 96 %{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc} \ | 95 %{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc} \ |
| 97 -lnacl \ | 96 -lnacl \ |
| 98 %{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc} \ | 97 %{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc} \ |
| 99 %{lnosys:-lnosys} \ | 98 %{lnosys:-lnosys} \ |
| 100 -lcrt_platform \ | 99 -lcrt_platform \ |
| 101 %{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}" | 100 %{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}" |
| 102 | 101 |
| 103 /* Define this so we can compile MS code for use with WINE. */ | 102 /* Define this so we can compile MS code for use with WINE. */ |
| 104 #define HANDLE_PRAGMA_PACK_PUSH_POP | 103 #define HANDLE_PRAGMA_PACK_PUSH_POP |
| 105 | 104 |
| 106 #if defined(HAVE_LD_EH_FRAME_HDR) | 105 #if defined(HAVE_LD_EH_FRAME_HDR) |
| 107 #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " | 106 #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " |
| 108 #endif | 107 #endif |
| 109 | 108 |
| 110 /* Use --as-needed -lgcc_s for eh support. */ | 109 /* Use --as-needed -lgcc_s for eh support. */ |
| 111 #ifdef HAVE_LD_AS_NEEDED | 110 #ifdef HAVE_LD_AS_NEEDED |
| 112 #define USE_LD_AS_NEEDED 1 | 111 #define USE_LD_AS_NEEDED 1 |
| 113 #endif | 112 #endif |
| 114 | 113 |
| 115 /* TODO(pasko): replace LINUX_DYNAMIC_LINKER with NACL_DYNAMIC_LINKER when we | 114 /* TODO(pasko): replace LINUX_DYNAMIC_LINKER with NACL_DYNAMIC_LINKER when we |
| 116 * implement dynamic linking. | 115 implement dynamic linking. */ |
| 117 */ | |
| 118 | 116 |
| 119 /* Determine which dynamic linker to use depending on whether GLIBC or | 117 /* Determine which dynamic linker to use depending on whether GLIBC or |
| 120 uClibc is the default C library and whether -muclibc or -mglibc has | 118 uClibc is the default C library and whether -muclibc or -mglibc has |
| 121 been passed to change the default. */ | 119 been passed to change the default. */ |
| 122 #if UCLIBC_DEFAULT | 120 #if UCLIBC_DEFAULT |
| 123 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc u
sed together}" G ";:" U "}" | 121 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc u
sed together}" G ";:" U "}" |
| 124 #else | 122 #else |
| 125 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc u
sed together}" U ";:" G "}" | 123 #define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc u
sed together}" U ";:" G "}" |
| 126 #endif | 124 #endif |
| 127 | 125 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 | 184 |
| 187 /* This macro may be overridden in i386/k*bsd-gnu.h. */ | 185 /* This macro may be overridden in i386/k*bsd-gnu.h. */ |
| 188 #define REG_NAME(reg) reg | 186 #define REG_NAME(reg) reg |
| 189 | 187 |
| 190 #ifdef TARGET_LIBC_PROVIDES_SSP | 188 #ifdef TARGET_LIBC_PROVIDES_SSP |
| 191 /* i386 glibc provides __stack_chk_guard in %gs:0x14, | 189 /* i386 glibc provides __stack_chk_guard in %gs:0x14, |
| 192 x86_64 glibc provides it in %fs:0x28. */ | 190 x86_64 glibc provides it in %fs:0x28. */ |
| 193 #define TARGET_THREAD_SSP_OFFSET (TARGET_64BIT ? 0x28 : 0x14) | 191 #define TARGET_THREAD_SSP_OFFSET (TARGET_64BIT ? 0x28 : 0x14) |
| 194 #endif | 192 #endif |
| 195 | 193 |
| 196 /* | 194 /* Because of NaCl's use of segment registers, negative offsets from gs: will |
| 197 * Because of NaCl's use of segment registers, negative offsets from gs: will | 195 not work. Hence we need to make TLS references explicitly compute the |
| 198 * not work. Hence we need to make TLS references explicitly compute the | 196 tls base pointer and then indirect relative to it using the default |
| 199 * tls base pointer and then indirect relative to it using the default | 197 segment descriptor (DS). That is, instead of |
| 200 * segment descriptor (DS). That is, instead of | 198 movl gs:i@NTPOFF, %ecx |
| 201 * movl gs:i@NTPOFF, %ecx | 199 we use |
| 202 * we use | 200 movl %gs:0, %eax |
| 203 * movl %gs:0, %eax | 201 movl i@NTPOFF(%eax), %ecx |
| 204 * movl i@NTPOFF(%eax), %ecx | 202 There is a slight performance penalty for TLS accesses, but there does not |
| 205 * There is a slight performance penalty for TLS accesses, but there does not | 203 seem a way around it. */ |
| 206 * seem a way around it. | |
| 207 */ | |
| 208 #undef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT | 204 #undef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT |
| 209 #define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT 0 | 205 #define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT 0 |
| 210 | 206 |
| 211 /* TODO(pasko): eliminate the need to define linux-specific macros. Currently | 207 /* TODO(pasko): eliminate the need to define linux-specific macros. Currently |
| 212 * Chromium build/build_config.h prevents us from eliminating these defines by | 208 Chromium build/build_config.h prevents us from eliminating these defines by |
| 213 * not recognizing __native_client__ as a platform. */ | 209 not recognizing __native_client__ as a platform. */ |
| 214 #define LINUX_TARGET_OS_CPP_BUILTINS() \ | 210 #define LINUX_TARGET_OS_CPP_BUILTINS() \ |
| 215 do { \ | 211 do { \ |
| 216 builtin_define_std ("unix"); \ | 212 builtin_define_std ("unix"); \ |
| 217 builtin_assert ("system=unix"); \ | 213 builtin_assert ("system=unix"); \ |
| 218 builtin_assert ("system=posix"); \ | 214 builtin_assert ("system=posix"); \ |
| 219 } while (0) | 215 } while (0) |
| 220 | 216 |
| 217 /* When running in Native Client all inode numbers are identical. |
| 218 TODO(pasko): re-enable inode numbers once the relevant bug is fixed: |
| 219 http://code.google.com/p/nativeclient/issues/detail?id=1555 */ |
| 220 #ifdef __native_client__ |
| 221 #define HOST_LACKS_INODE_NUMBERS 1 |
| 222 #endif |
| 223 |
| 221 #undef TARGET_OS_CPP_BUILTINS | 224 #undef TARGET_OS_CPP_BUILTINS |
| 222 #define TARGET_OS_CPP_BUILTINS() \ | 225 #define TARGET_OS_CPP_BUILTINS() \ |
| 223 do \ | 226 do \ |
| 224 { \ | 227 { \ |
| 225 LINUX_TARGET_OS_CPP_BUILTINS(); \ | 228 LINUX_TARGET_OS_CPP_BUILTINS(); \ |
| 226 builtin_define ("__native_client__=1"); \ | 229 builtin_define ("__native_client__=1"); \ |
| 227 } \ | 230 } \ |
| 228 while (0) | 231 while (0) |
| 229 | 232 |
| 230 /* NaCl uses are using ILP32 model even on x86-84. */ | 233 /* NaCl uses are using ILP32 model even on x86-84. */ |
| 231 #undef LONG_TYPE_SIZE | 234 #undef LONG_TYPE_SIZE |
| 232 #define LONG_TYPE_SIZE 32 | 235 #define LONG_TYPE_SIZE 32 |
| 233 #define POINTER_SIZE 32 | 236 #define POINTER_SIZE 32 |
| 234 #define POINTERS_EXTEND_UNSIGNED 1 | 237 #define POINTERS_EXTEND_UNSIGNED 1 |
| 235 #undef LONG_DOUBLE_TYPE_SIZE | 238 #undef LONG_DOUBLE_TYPE_SIZE |
| 236 #define LONG_DOUBLE_TYPE_SIZE 64 | 239 #define LONG_DOUBLE_TYPE_SIZE 64 |
| 237 | 240 |
| 238 #undef TARGET_SUBTARGET_DEFAULT | 241 #undef TARGET_SUBTARGET_DEFAULT |
| 239 #define TARGET_SUBTARGET_DEFAULT (MASK_IEEE_FP) | 242 #define TARGET_SUBTARGET_DEFAULT (MASK_IEEE_FP) |
| 240 | 243 |
| 241 #undef TARGET_SUBTARGET32_DEFAULT | 244 #undef TARGET_SUBTARGET32_DEFAULT |
| 242 #define TARGET_SUBTARGET32_DEFAULT (MASK_80387 | MASK_ALIGN_DOUBLE | MASK_FLOAT_
RETURNS) | 245 #define TARGET_SUBTARGET32_DEFAULT (MASK_80387 | MASK_ALIGN_DOUBLE | MASK_FLOAT_
RETURNS) |
| 243 | 246 |
| 244 #undef TARGET_SUBTARGET64_DEFAULT | 247 #undef TARGET_SUBTARGET64_DEFAULT |
| 245 #define TARGET_SUBTARGET64_DEFAULT 0 | 248 #define TARGET_SUBTARGET64_DEFAULT 0 |
| 246 | 249 |
| 247 /* Configure script incorrectly detects this GAS capability on x86-64 and hence | 250 /* Configure script incorrectly detects this GAS capability on x86-64 and hence |
| 248 * forces JUMP_TABLES_IN_TEXT_SECTION which cannot validate in NaCl. */ | 251 forces JUMP_TABLES_IN_TEXT_SECTION which cannot validate in NaCl. */ |
| 249 #undef HAVE_AS_GOTOFF_IN_DATA | 252 #undef HAVE_AS_GOTOFF_IN_DATA |
| 250 #define HAVE_AS_GOTOFF_IN_DATA 1 | 253 #define HAVE_AS_GOTOFF_IN_DATA 1 |
| 251 | 254 |
| 252 /* Configure script incorrectly detects HAVE_GAS_CFI_DIRECTIVE when readelf is | 255 /* Configure script incorrectly detects HAVE_GAS_CFI_DIRECTIVE when readelf is |
| 253 * not found in PATH. */ | 256 not found in PATH. */ |
| 254 #undef HAVE_GAS_CFI_DIRECTIVE | 257 #undef HAVE_GAS_CFI_DIRECTIVE |
| 255 #define HAVE_GAS_CFI_DIRECTIVE 1 | 258 #define HAVE_GAS_CFI_DIRECTIVE 1 |
| 256 | 259 |
| 257 /* NaCl reserves R15 and makes RBP special in x86-64 mode */ | 260 /* NaCl reserves R15 and makes RBP special in x86-64 mode. */ |
| 258 #undef FIXED_REGISTERS | 261 #undef FIXED_REGISTERS |
| 259 #define FIXED_REGISTERS \ | 262 #define FIXED_REGISTERS \ |
| 260 /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ | 263 /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ |
| 261 { 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ | 264 { 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ |
| 262 /*arg,flags,fpsr,fpcr,frame*/ \ | 265 /*arg,flags,fpsr,fpcr,frame*/ \ |
| 263 1, 1, 1, 1, 1, \ | 266 1, 1, 1, 1, 1, \ |
| 264 /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ | 267 /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ |
| 265 0, 0, 0, 0, 0, 0, 0, 0, \ | 268 0, 0, 0, 0, 0, 0, 0, 0, \ |
| 266 /* mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7*/ \ | 269 /* mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7*/ \ |
| 267 0, 0, 0, 0, 0, 0, 0, 0, \ | 270 0, 0, 0, 0, 0, 0, 0, 0, \ |
| (...skipping 21 matching lines...) Expand all Loading... |
| 289 #undef TARGET_USE_BT | 292 #undef TARGET_USE_BT |
| 290 #define TARGET_USE_BT (ix86_tune_features[X86_TUNE_USE_BT] && !TARGET_
NACL) | 293 #define TARGET_USE_BT (ix86_tune_features[X86_TUNE_USE_BT] && !TARGET_
NACL) |
| 291 | 294 |
| 292 #undef DBX_REGISTER_NUMBER | 295 #undef DBX_REGISTER_NUMBER |
| 293 #define DBX_REGISTER_NUMBER(n) \ | 296 #define DBX_REGISTER_NUMBER(n) \ |
| 294 (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) | 297 (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) |
| 295 | 298 |
| 296 #define DWARF2_ADDR_SIZE \ | 299 #define DWARF2_ADDR_SIZE \ |
| 297 (TARGET_NACL ? (TARGET_64BIT ? 8 : 4) : \ | 300 (TARGET_NACL ? (TARGET_64BIT ? 8 : 4) : \ |
| 298 (POINTER_SIZE / BITS_PER_UNIT)) | 301 (POINTER_SIZE / BITS_PER_UNIT)) |
| OLD | NEW |