1 /* Definitions for RISC-V GNU/Linux systems with ELF format. 2 Copyright (C) 1998-2021 Free Software Foundation, Inc. 3 4 This file is part of GCC. 5 6 GCC is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 GCC is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GCC; see the file COPYING3. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20 #define TARGET_OS_CPP_BUILTINS() \ 21 do { \ 22 GNU_USER_TARGET_OS_CPP_BUILTINS(); \ 23 } while (0) 24 25 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-riscv" XLEN_SPEC "-" ABI_SPEC ".so.1" 26 27 #define MUSL_ABI_SUFFIX \ 28 "%{mabi=ilp32:-sf}" \ 29 "%{mabi=ilp32f:-sp}" \ 30 "%{mabi=ilp32d:}" \ 31 "%{mabi=lp64:-sf}" \ 32 "%{mabi=lp64f:-sp}" \ 33 "%{mabi=lp64d:}" 34 35 #undef MUSL_DYNAMIC_LINKER 36 #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-riscv" XLEN_SPEC MUSL_ABI_SUFFIX ".so.1" 37 38 /* Because RISC-V only has word-sized atomics, it requries libatomic where 39 others do not. So link libatomic by default, as needed. */ 40 #undef LIB_SPEC 41 #ifdef LD_AS_NEEDED_OPTION 42 #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC \ 43 " %{pthread:" LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION "}" 44 #else 45 #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC " -latomic " 46 #endif 47 48 #define ICACHE_FLUSH_FUNC "__riscv_flush_icache" 49 50 #define CPP_SPEC "%{pthread:-D_REENTRANT}" 51 52 #define LD_EMUL_SUFFIX \ 53 "%{mabi=lp64d:}" \ 54 "%{mabi=lp64f:_lp64f}" \ 55 "%{mabi=lp64:_lp64}" \ 56 "%{mabi=ilp32d:}" \ 57 "%{mabi=ilp32f:_ilp32f}" \ 58 "%{mabi=ilp32:_ilp32}" 59 60 #define LINK_SPEC "\ 61 -melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv" LD_EMUL_SUFFIX " \ 62 %{mno-relax:--no-relax} \ 63 %{mbig-endian:-EB} \ 64 %{mlittle-endian:-EL} \ 65 %{shared} \ 66 %{!shared: \ 67 %{!static: \ 68 %{rdynamic:-export-dynamic} \ 69 -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \ 70 %{static:-static}}" 71 72 #define TARGET_ASM_FILE_END file_end_indicate_exec_stack 73 74 #define STARTFILE_PREFIX_SPEC \ 75 "/lib" XLEN_SPEC "/" ABI_SPEC "/ " \ 76 "/usr/lib" XLEN_SPEC "/" ABI_SPEC "/ " \ 77 "/lib/ " \ 78 "/usr/lib/ " 79