(root)/
gcc-13.2.0/
gcc/
config/
sparc/
linux.h
       1  /* Definitions for SPARC running Linux-based GNU systems with ELF.
       2     Copyright (C) 1996-2023 Free Software Foundation, Inc.
       3     Contributed by Eddie C. Dost (ecd@skynet.be)
       4  
       5  This file is part of GCC.
       6  
       7  GCC is free software; you can redistribute it and/or modify
       8  it under the terms of the GNU General Public License as published by
       9  the Free Software Foundation; either version 3, or (at your option)
      10  any later version.
      11  
      12  GCC is distributed in the hope that it will be useful,
      13  but WITHOUT ANY WARRANTY; without even the implied warranty of
      14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      15  GNU General Public 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  #define TARGET_OS_CPP_BUILTINS()		\
      22    do						\
      23      {						\
      24        GNU_USER_TARGET_OS_CPP_BUILTINS();	\
      25        if (TARGET_LONG_DOUBLE_128)       	\
      26  	builtin_define ("__LONG_DOUBLE_128__");	\
      27      }						\
      28    while (0)
      29  
      30  #undef  ENDFILE_SPEC
      31  #define ENDFILE_SPEC \
      32    GNU_USER_TARGET_ENDFILE_SPEC \
      33    "%{Ofast|ffast-math|funsafe-math-optimizations:%{!shared:crtfastmath.o%s}}"
      34  
      35  /* -mcpu=native handling only makes sense with compiler running on
      36     a SPARC chip.  */
      37  #if defined(__sparc__) && defined(__linux__)
      38  extern const char *host_detect_local_cpu (int argc, const char **argv);
      39  # define EXTRA_SPEC_FUNCTIONS						\
      40    { "local_cpu_detect", host_detect_local_cpu },
      41  
      42  # define MCPU_MTUNE_NATIVE_SPECS					\
      43     " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}"		\
      44     " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
      45  #else
      46  # define MCPU_MTUNE_NATIVE_SPECS ""
      47  #endif
      48  
      49  #define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
      50  
      51  #undef  ASAN_CC1_SPEC
      52  #define ASAN_CC1_SPEC "%{%:sanitize(address):-funwind-tables}"
      53  
      54  #undef  CC1_SPEC
      55  #define CC1_SPEC GNU_USER_TARGET_CC1_SPEC ASAN_CC1_SPEC
      56  
      57  #undef SIZE_TYPE
      58  #define SIZE_TYPE "unsigned int"
      59   
      60  #undef PTRDIFF_TYPE
      61  #define PTRDIFF_TYPE "int"
      62    
      63  #undef WCHAR_TYPE
      64  #define WCHAR_TYPE "int"
      65     
      66  #undef WCHAR_TYPE_SIZE
      67  #define WCHAR_TYPE_SIZE 32
      68  
      69  #undef CPP_SUBTARGET_SPEC
      70  #define CPP_SUBTARGET_SPEC \
      71  "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
      72  
      73  /* Provide a LINK_SPEC appropriate for GNU/Linux.  Here we provide support
      74     for the special GCC options -static and -shared, which allow us to
      75     link things in one of these three modes by applying the appropriate
      76     combinations of options at link-time.
      77  
      78     When the -shared link option is used a final link is not being
      79     done.  */
      80  
      81  #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
      82  
      83  #undef  LINK_SPEC
      84  #define LINK_SPEC "-m elf32_sparc %{shared:-shared} \
      85    %{!mno-relax:%{!r:-relax}} \
      86    %{!shared: \
      87      %{!static: \
      88        %{rdynamic:-export-dynamic} \
      89        -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \
      90        %{static:-static}}"
      91  
      92  /* It's safe to pass -s always, even if -g is not used.  */
      93  #undef ASM_SPEC
      94  #define ASM_SPEC "\
      95  -s \
      96  %{" FPIE_OR_FPIC_SPEC ":-K PIC} \
      97  %{!.c:%{findirect-dispatch:-K PIC}} \
      98  %(asm_cpu) %(asm_relax)"
      99  
     100  #undef ASM_OUTPUT_ALIGNED_LOCAL
     101  #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)		\
     102  do {									\
     103    fputs ("\t.local\t", (FILE));		\
     104    assemble_name ((FILE), (NAME));					\
     105    putc ('\n', (FILE));							\
     106    ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN);			\
     107  } while (0)
     108  
     109  #undef COMMON_ASM_OP
     110  #define COMMON_ASM_OP "\t.common\t"
     111  
     112  #undef  LOCAL_LABEL_PREFIX
     113  #define LOCAL_LABEL_PREFIX  "."
     114  
     115  
     116  /* Define for support of TFmode long double.
     117     SPARC ABI says that long double is 4 words.  */
     118  #define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
     119  
     120  #undef DITF_CONVERSION_LIBFUNCS
     121  #define DITF_CONVERSION_LIBFUNCS 1
     122  
     123  #ifdef HAVE_AS_TLS
     124  #undef TARGET_SUN_TLS
     125  #undef TARGET_GNU_TLS
     126  #define TARGET_SUN_TLS 0
     127  #define TARGET_GNU_TLS 1
     128  #endif
     129  
     130  /* We use GNU ld so undefine this so that attribute((init_priority)) works.  */
     131  #undef CTORS_SECTION_ASM_OP
     132  #undef DTORS_SECTION_ASM_OP
     133  
     134  /* Static stack checking is supported by means of probes.  */
     135  #define STACK_CHECK_STATIC_BUILTIN 1
     136  
     137  #undef NEED_INDICATE_EXEC_STACK
     138  #define NEED_INDICATE_EXEC_STACK 1
     139  
     140  #ifdef TARGET_LIBC_PROVIDES_SSP
     141  /* sparc glibc provides __stack_chk_guard in [%g7 + 0x14].  */
     142  #define TARGET_THREAD_SSP_OFFSET	0x14
     143  #endif
     144  
     145  /* Define if long doubles should be mangled as 'g'.  */
     146  #define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
     147  
     148  /* We use glibc _mcount for profiling.  */
     149  #undef NO_PROFILE_COUNTERS
     150  #define NO_PROFILE_COUNTERS	1