blob: 2a37b155c42b8ea774b3e3920548fcc01910d1d4 [file] [log] [blame]
From b1b16478729aea709e7ef81224995b6d26b38a87 Mon Sep 17 00:00:00 2001
From: Nico Huber <nico.h@gmx.de>
Date: Sun, 16 Jul 2023 00:30:03 +0200
Subject: [PATCH] GNAT: Build cross compilers with host runtime
When building with an older host toolchain, the shipped libgnat
sources may not be compatible. So rely on the host runtime just
like we do for a stage1 build.
Signed-off-by: Nico Huber <nico.h@gmx.de>
---
gcc/ada/gcc-interface/Make-lang.in | 16 +++++++++++++---
gcc/ada/init.c | 4 ++++
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
index 9507f2f09203..cf7ec4cc1662 100644
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -57,18 +57,21 @@ WARN_ADAFLAGS= -W -Wall
# checks fully active.
STAGE1=False
+HOST_RT=False
GNATBIND_FLAGS=
GNATLIB=
+ADAFLAGS=$(COMMON_ADAFLAGS) -gnatwns
ifeq ($(CROSS),)
- ADAFLAGS=$(COMMON_ADAFLAGS) -gnatwns
ifeq ($(if $(wildcard ../stage_current),$(shell cat ../stage_current),stage1),stage1)
STAGE1=True
GNATBIND_FLAGS=-t
+ HOST_RT=True
endif
else
- ADAFLAGS=$(COMMON_ADAFLAGS)
+ GNATBIND_FLAGS=-t
+ HOST_RT=True
endif
ALL_ADAFLAGS = \
@@ -87,7 +89,7 @@ ifeq ($(strip $(filter-out hpux%,$(host_os))),)
STAGE1_LIBS=/usr/lib/libcl.a
endif
-ifeq ($(STAGE1),True)
+ifeq ($(HOST_RT),True)
ADA_INCLUDES=$(COMMON_ADA_INCLUDES)
adalib=$(dir $(shell $(CC) -print-libgcc-file-name))adalib
GNATLIB=$(adalib)/$(if $(wildcard $(adalib)/libgnat.a),libgnat.a,libgnat.so) $(STAGE1_LIBS)
@@ -485,6 +487,7 @@ GNAT1_C_OBJS+= \
ada/rtinit.o \
ada/seh_init.o
+ifeq ($(HOST_RT),False)
GNAT_ADA_OBJS+= \
ada/gcc-interface/system.o \
ada/libgnat/a-assert.o \
@@ -555,6 +558,7 @@ GNAT_ADA_OBJS+= \
ada/libgnat/s-wchstw.o \
ada/libgnat/s-widuns.o
endif
+endif
# Object files for gnat executables
GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) ada/back_end.o ada/gnat1drv.o
@@ -656,6 +660,9 @@ GNATBIND_OBJS += \
ada/rtfinal.o \
ada/rtinit.o \
ada/seh_init.o \
+
+ifeq ($(HOST_RT),False)
+GNATBIND_OBJS += \
ada/gcc-interface/system.o \
ada/libgnat/a-assert.o \
ada/libgnat/a-elchha.o \
@@ -707,6 +714,9 @@ GNATBIND_OBJS += \
ada/libgnat/s-wchjis.o \
ada/libgnat/s-wchstw.o \
ada/libgnat/s-widuns.o \
+
+endif
+GNATBIND_OBJS += \
ada/adaint.o \
ada/argv.o \
ada/cio.o \
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 5212a38490d3..5ae2efd32ef3 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -93,8 +93,12 @@ extern struct Exception_Data storage_error;
#ifdef CERT
#define Raise_From_Signal_Handler __gnat_raise_exception
#else
+#if __GNUC__ < 12
+#define Raise_From_Signal_Handler ada__exceptions__raise_from_signal_handler
+#else
#define Raise_From_Signal_Handler __gnat_raise_from_signal_handler
#endif
+#endif
extern void Raise_From_Signal_Handler (struct Exception_Data *, const void *)
ATTRIBUTE_NORETURN;
--
2.39.0