blob: 0676cb4ceadedb26618793ce1adb915479230f1d [file] [log] [blame]
/* IA32 VxWorks target definitions for GNU compiler.
Copyright (C) 2003-2021 Free Software Foundation, Inc.
Updated by CodeSourcery, LLC.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* VxWorks after 7 SR0600 use the ELF ABI and the system environment is llvm
based. Earlier versions have GNU based environment components and use the
same ABI as Solaris 2. */
#if TARGET_VXWORKS7
#undef VXWORKS_PERSONALITY
#define VXWORKS_PERSONALITY "llvm"
#else
#undef ASM_OUTPUT_ALIGNED_BSS
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
#undef TARGET_SUBTARGET_DEFAULT
#define TARGET_SUBTARGET_DEFAULT \
(MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_VECT8_RETURNS)
#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE (TARGET_LP64 ? "long int" : "int")
#undef SIZE_TYPE
#define SIZE_TYPE (TARGET_LP64 ? "long unsigned int" : "unsigned int")
/* We cannot use PC-relative accesses for VxWorks PIC because there is no
fixed gap between segments. */
#undef ASM_PREFERRED_EH_DATA_FORMAT
#if TARGET_64BIT_DEFAULT
#undef VXWORKS_SYSCALL_LIBS_RTP
#define VXWORKS_SYSCALL_LIBS_RTP "-lsyscall"
#endif
#endif
/* Provide our target specific DBX_REGISTER_NUMBER. VxWorks relies on
the SVR4 numbering. */
#undef DBX_REGISTER_NUMBER
#define DBX_REGISTER_NUMBER(n) \
(TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
/* CPU macro definitions, ordered to account for VxWorks 7 not
supporting CPUs older than PENTIUM4 since SR0650. */
#define VX_CPUDEF(CPU) builtin_define(VX_CPU_PREFIX "CPU=" #CPU)
#define VX_CPUVDEF(CPU) builtin_define(VX_CPU_PREFIX "CPU_VARIANT=" #CPU)
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
VXWORKS_OS_CPP_BUILTINS (); \
if (TARGET_64BIT) \
VX_CPUDEF (X86_64); \
else if (TARGET_CPU_P (PENTIUM4)) \
{ \
VX_CPUDEF (PENTIUM4); \
VX_CPUVDEF (PENTIUM4); \
} \
else if (TARGET_CPU_P (CORE2)) \
VX_CPUDEF (CORE2); \
else if (TARGET_CPU_P (NEHALEM)) \
VX_CPUDEF (NEHALEM); \
else if (TARGET_CPU_P (SANDYBRIDGE)) \
VX_CPUDEF (SANDYBRIDGE); \
else if (TARGET_CPU_P (HASWELL)) \
VX_CPUDEF (HASWELL); \
else if (TARGET_CPU_P (SILVERMONT)) \
VX_CPUDEF (SILVERMONT); \
else if (TARGET_CPU_P (SKYLAKE) || TARGET_CPU_P (SKYLAKE_AVX512)) \
VX_CPUDEF (SKYLAKE); \
else if (TARGET_CPU_P (GOLDMONT)) \
VX_CPUDEF (GOLDMONT); \
else if (TARGET_VXWORKS7) \
VX_CPUDEF (PENTIUM4); \
else if (TARGET_CPU_P (I386)) \
VX_CPUDEF (I80386); \
else if (TARGET_CPU_P (I486)) \
VX_CPUDEF (I80486); \
else if (TARGET_CPU_P (PENTIUM)) \
{ \
VX_CPUDEF (PENTIUM); \
VX_CPUVDEF (PENTIUM); \
} \
else if (TARGET_CPU_P (PENTIUMPRO)) \
{ \
VX_CPUDEF (PENTIUM2); \
VX_CPUVDEF (PENTIUMPRO); \
} \
else \
VX_CPUDEF (I80386); \
} \
while (0)
#undef CPP_SPEC
#define CPP_SPEC VXWORKS_ADDITIONAL_CPP_SPEC
#undef CC1_SPEC
#define CC1_SPEC VXWORKS_CC1_SPEC
#undef LIB_SPEC
#define LIB_SPEC VXWORKS_LIB_SPEC
#undef STARTFILE_SPEC
#define STARTFILE_SPEC VXWORKS_STARTFILE_SPEC
#undef ENDFILE_SPEC
#define ENDFILE_SPEC VXWORKS_ENDFILE_SPEC
#undef LINK_SPEC
#define LINK_SPEC VXWORKS_LINK_SPEC
#undef SUBTARGET_SWITCHES
#define SUBTARGET_SWITCHES EXTRA_SUBTARGET_SWITCHES
#undef SUBTARGET_OVERRIDE_OPTIONS
#define SUBTARGET_OVERRIDE_OPTIONS VXWORKS_OVERRIDE_OPTIONS
/* No _mcount profiling on VxWorks. */
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE,LABELNO) VXWORKS_FUNCTION_PROFILER(FILE,LABELNO)
/* Define this to be nonzero if static stack checking is supported. */
#define STACK_CHECK_STATIC_BUILTIN 1
/* This platform supports the probing method of stack checking (RTP mode).
8K is reserved in the stack to propagate exceptions in case of overflow.
On 64-bit targets, we double that size. */
#define STACK_CHECK_PROTECT (TARGET_64BIT_DEFAULT ? 16 * 1024 : 8 * 1024)