1  /* Definitions of target machine of Andes NDS32 cpu for GNU compiler
       2     Copyright (C) 2012-2023 Free Software Foundation, Inc.
       3     Contributed by Andes Technology Corporation.
       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  
      22  /* ------------------------------------------------------------------------ */
      23  
      24  #define TARGET_LINUX_ABI 0
      25  
      26  /* In the configure stage we may use options --enable-default-relax,
      27     --enable-Os-default-ifc and --enable-Os-default-ex9.  They effect
      28     the default spec of passing --relax, --mifc, and --mex9 to linker.
      29     We use NDS32_RELAX_SPEC, NDS32_IFC_SPEC, and NDS32_EX9_SPEC
      30     so that we can customize them conveniently.  */
      31  #define LINK_SPEC \
      32    " %{G*}" \
      33    " %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
      34    " %{shared:-shared}" \
      35    NDS32_RELAX_SPEC
      36  
      37  #define LIB_SPEC \
      38    " -lc -lgloss"
      39  
      40  #define LIBGCC_SPEC \
      41    " -lgcc"
      42  
      43  /* The option -mno-ctor-dtor can disable constructor/destructor feature
      44     by applying different crt stuff.  In the convention, crt0.o is the
      45     startup file without constructor/destructor;
      46     crt1.o, crti.o, crtbegin.o, crtend.o, and crtn.o are the
      47     startup files with constructor/destructor.
      48     Note that crt0.o, crt1.o, crti.o, and crtn.o are provided
      49     by newlib/mculib/glibc/ublic, while crtbegin.o and crtend.o are
      50     currently provided by GCC for nds32 target.
      51  
      52     For nds32 target so far:
      53     If -mno-ctor-dtor, we are going to link
      54     "crt0.o [user objects]".
      55     If -mctor-dtor, we are going to link
      56     "crt1.o crtbegin1.o [user objects] crtend1.o".
      57  
      58     Note that the TARGET_DEFAULT_CTOR_DTOR would effect the
      59     default behavior.  Check gcc/config.gcc for more information.  */
      60  #ifdef TARGET_DEFAULT_CTOR_DTOR
      61    #define STARTFILE_SPEC \
      62      " %{!mno-ctor-dtor:crt1.o%s;:crt0.o%s}" \
      63      " %{!mno-ctor-dtor:crtbegin1.o%s}" \
      64      " %{mcrt-arg:crtarg.o%s}"
      65    #define ENDFILE_SPEC \
      66      " %{!mno-ctor-dtor:crtend1.o%s}"
      67  #else
      68    #define STARTFILE_SPEC \
      69      " %{mctor-dtor|coverage:crt1.o%s;:crt0.o%s}" \
      70      " %{mctor-dtor|coverage:crtbegin1.o%s}" \
      71      " %{mcrt-arg:crtarg.o%s}"
      72    #define ENDFILE_SPEC \
      73      " %{mctor-dtor|coverage:crtend1.o%s}"
      74  #endif
      75  
      76  #define STARTFILE_CXX_SPEC \
      77    " %{!mno-ctor-dtor:crt1.o%s;:crt0.o%s}" \
      78    " %{!mno-ctor-dtor:crtbegin1.o%s}" \
      79    " %{mcrt-arg:crtarg.o%s}"
      80  #define ENDFILE_CXX_SPEC \
      81    " %{!mno-ctor-dtor:crtend1.o%s}"