(root)/
gcc-13.2.0/
gcc/
config/
sparc/
freebsd.h
       1  /* Definitions for Sun SPARC64 running FreeBSD using the ELF format
       2     Copyright (C) 2001-2023 Free Software Foundation, Inc.
       3     Contributed by David E. O'Brien <obrien@FreeBSD.org> and BSDi.
       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  #undef  SUBTARGET_EXTRA_SPECS
      22  #define SUBTARGET_EXTRA_SPECS \
      23    { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
      24  
      25  /* FreeBSD needs the platform name (sparc64) defined.
      26     Emacs etc needs to know if the arch is 64 or 32-bits.
      27     This also selects which targets are available via -mcpu.  */
      28  
      29  #undef  FBSD_TARGET_CPU_CPP_BUILTINS
      30  #define FBSD_TARGET_CPU_CPP_BUILTINS()		\
      31    do						\
      32      {						\
      33        builtin_define ("__sparc64__");		\
      34        builtin_define ("__sparc__");		\
      35        builtin_define ("__sparc_v9__");		\
      36        builtin_define ("__sparcv9");		\
      37      }						\
      38    while (0)
      39  
      40  #undef ASM_SPEC
      41  #define ASM_SPEC "%{" FPIE_OR_FPIC_SPEC ":-K PIC} %(asm_cpu)"
      42  
      43  #define LINK_SPEC "%(link_arch)						\
      44    %{!mno-relax:%{!r:-relax}}						\
      45    %{p:%nconsider using '-pg' instead of '-p' with gprof(1)}		\
      46    %{assert*} %{R*} %{rpath*} %{defsym*}					\
      47    %{shared:-Bshareable %{h*} %{soname*}}				\
      48    %{symbolic:-Bsymbolic}						\
      49    %{!shared:								\
      50      %{!static:								\
      51        %{rdynamic:-export-dynamic}					\
      52        -dynamic-linker %(fbsd_dynamic_linker) }	\
      53      %{static:-Bstatic}}"
      54  
      55  
      56  /************************[  Target stuff  ]***********************************/
      57  
      58  /* Define the actual types of some ANSI-mandated types.  
      59     Needs to agree with <machine/ansi.h>.  GCC defaults come from c-decl.cc,
      60     c-common.cc, and config/<arch>/<arch>.h.  */
      61  
      62  /* Earlier headers may get this wrong for FreeBSD.
      63     We use the GCC defaults instead.  */
      64  #undef WCHAR_TYPE
      65  
      66  #undef  WCHAR_TYPE_SIZE
      67  #define WCHAR_TYPE_SIZE 32
      68  
      69  /* Define for support of TFmode long double.
      70     SPARC ABI says that long double is 4 words.  */
      71  #undef  LONG_DOUBLE_TYPE_SIZE
      72  #define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_128 ? 128 : 64)
      73  
      74  /* Definitions for 64-bit SPARC running systems with ELF. */
      75  
      76  #define TARGET_ELF		1
      77  
      78  /* XXX */
      79  /* A 64 bit v9 compiler with stack-bias,
      80     in a Medium/mid code model environment.  */
      81  
      82  #undef  TARGET_DEFAULT
      83  #define TARGET_DEFAULT \
      84    (MASK_V9 + MASK_64BIT + MASK_PTR64 /* + MASK_FASTER_STRUCTS */ \
      85     + MASK_STACK_BIAS + MASK_APP_REGS + MASK_FPU \
      86     + MASK_LONG_DOUBLE_128 /* + MASK_HARD_QUAD */)
      87  
      88  /* The default code model.  */
      89  #undef  SPARC_DEFAULT_CMODEL
      90  #define SPARC_DEFAULT_CMODEL	CM_MEDLOW
      91  
      92  #define HAVE_ENABLE_EXECUTE_STACK
      93  
      94  /************************[  Assembler stuff  ]********************************/
      95  
      96  #undef	LOCAL_LABEL_PREFIX
      97  #define LOCAL_LABEL_PREFIX  "."
      98  
      99  /* XXX2 */
     100  /* This is how to store into the string LABEL
     101     the symbol_ref name of an internal numbered label where
     102     PREFIX is the class of label and NUM is the number within the class.
     103     This is suitable for output with `assemble_name'.  */
     104  
     105  #undef  ASM_GENERATE_INTERNAL_LABEL
     106  #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)			\
     107    sprintf (LABEL, "*.L%s%lu", PREFIX, (unsigned long)(NUM))
     108  
     109  
     110  /************************[  Debugger stuff  ]*********************************/
     111  
     112  /* DWARF bits.  */
     113  
     114  /* Follow Irix 6 and not the Dwarf2 draft in using 64-bit offsets. 
     115     Obviously the Dwarf2 folks havn't tried to actually build systems
     116     with their spec.  On a 64-bit system, only 64-bit relocs become
     117     RELATIVE relocations.  */
     118  
     119  /* #define DWARF_OFFSET_SIZE PTR_SIZE */
     120  
     121  #ifdef HAVE_AS_TLS
     122  #undef TARGET_SUN_TLS
     123  #undef TARGET_GNU_TLS
     124  #define TARGET_SUN_TLS 0
     125  #define TARGET_GNU_TLS 1
     126  #endif
     127  
     128  #undef ENDFILE_SPEC
     129  #define ENDFILE_SPEC						\
     130    "%{Ofast|ffast-math|funsafe-math-optimizations:%{!shared:crtfastmath.o%s}} "	\
     131    FBSD_ENDFILE_SPEC
     132  
     133  /* We use GNU ld so undefine this so that attribute((init_priority)) works.  */
     134  #undef CTORS_SECTION_ASM_OP
     135  #undef DTORS_SECTION_ASM_OP