aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXi Ruoyao <xry111@xry111.site>2023-11-21 09:09:25 +0800
committerXi Ruoyao <xry111@xry111.site>2023-11-21 11:05:11 +0800
commit7bf1de918608e2d0b5a3ad0923040acb1819d9a5 (patch)
treee090c805efda3f247c794568433bbf2eb33e6308
parent7e2a429ae8f938a94c69bcab96062c9f036b721e (diff)
downloadgcc-7bf1de918608e2d0b5a3ad0923040acb1819d9a5.zip
gcc-7bf1de918608e2d0b5a3ad0923040acb1819d9a5.tar.gz
gcc-7bf1de918608e2d0b5a3ad0923040acb1819d9a5.tar.bz2
LoongArch: Fix libgcc build failure when libc is not available
To use int64_t we included <stdint.h> in loongarch-def.h. Unfortunately, loongarch-def.h is also used by libgcc etc., causing a build failure when building a "stage1" cross compiler at which the target libc is not built yet. As int64_t is used for a C-compatible replacement of HOST_WIDE_INT, it's not directly or indirectly referred by the target libraries. So guard everything requiring stdint.h with #if then they'll not block target libraries. gcc/ChangeLog: * config/loongarch/loongarch-def.h (stdint.h): Guard with #if to exclude it for target libraries. (loongarch_isa_base_features): Likewise. (loongarch_isa): Likewise. (loongarch_abi): Likewise. (loongarch_target): Likewise. (loongarch_cpu_default_isa): Likewise.
-rw-r--r--gcc/config/loongarch/loongarch-def.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h
index af7bd63..851ff86 100644
--- a/gcc/config/loongarch/loongarch-def.h
+++ b/gcc/config/loongarch/loongarch-def.h
@@ -46,7 +46,10 @@ along with GCC; see the file COPYING3. If not see
#ifndef LOONGARCH_DEF_H
#define LOONGARCH_DEF_H
+#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
#include <stdint.h>
+#endif
+
#include "loongarch-tune.h"
#ifdef __cplusplus
@@ -62,9 +65,11 @@ extern const char* loongarch_isa_base_strings[];
#define ISA_BASE_LA64V110 1
#define N_ISA_BASE_TYPES 2
+#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
/* Unlike other arrays, this is defined in loongarch-cpu.cc. The problem is
we cannot use the C++ header options.h in loongarch-def.c. */
extern int64_t loongarch_isa_base_features[];
+#endif
/* enum isa_ext_* */
extern const char* loongarch_isa_ext_strings[];
@@ -121,6 +126,7 @@ extern const char* loongarch_cmodel_strings[];
#define M_OPT_ABSENT(opt_enum) ((opt_enum) == M_OPT_UNSET)
+#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
/* Internal representation of the target. */
struct loongarch_isa
{
@@ -150,6 +156,9 @@ struct loongarch_target
int cmodel; /* CMODEL_ */
};
+extern struct loongarch_isa loongarch_cpu_default_isa[];
+#endif
+
/* CPU properties. */
/* index */
#define CPU_NATIVE 0
@@ -162,7 +171,6 @@ struct loongarch_target
/* parallel tables. */
extern const char* loongarch_cpu_strings[];
-extern struct loongarch_isa loongarch_cpu_default_isa[];
extern int loongarch_cpu_issue_rate[];
extern int loongarch_cpu_multipass_dfa_lookahead[];