public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Building old GCC with new GCC: stage1 32-bit libstdc++ fails to build after building 64-bit libstdc++
@ 2018-09-04 12:20 Matthew Krupcale
  2018-10-31  6:30 ` Matthew Krupcale
  0 siblings, 1 reply; 2+ messages in thread
From: Matthew Krupcale @ 2018-09-04 12:20 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 3090 bytes --]

Hello,

I was recently trying to build an older multilib bootstrap GCC
(version 4.8.3) using a newer GCC (version 8.1), and I ran into an
issue where after building the 64-bit libstdc++ for the target, while
building the 32-bit libstdc++, I would get the following error[1]:

/builddir/build/BUILD/gcc-4.8.3-20140911/obj-x86_64-redhat-linux/./gcc/cc1plus:
/builddir/build/BUILD/gcc-4.8.3-20140911/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/src/.libs/libstdc++.so.6:
version `CXXABI_1.3.9' not found (required by
/builddir/build/BUILD/gcc-4.8.3-20140911/obj-x86_64-redhat-linux/./gcc/cc1plus)

What I think is happening is that the stage1 host GCC executable
cc1plus depends on the build libstdc++,

# objdump -p /builddir/build/BUILD/gcc-4.8.3-20140911/obj-x86_64-redhat-linux/./gcc/cc1plus
| tail -n 17 | head -n 5
Version References:
  required from libstdc++.so.6:
    0x0bafd179 0x00 11 CXXABI_1.3.9
    0x08922974 0x00 10 GLIBCXX_3.4
    0x056bafd3 0x00 07 CXXABI_1.3

which defines CXXABI_1.3.9, among other things. However, the older
libstdc++ does not define CXXABI_1.3.9,

# objdump -p /builddir/build/BUILD/gcc-4.8.3-20140911/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/src/.libs/libstdc++.so
| grep 'CXXABI_1\.3\.9'

so after the target libstdc++ is built, because BASE_TARGET_EXPORTS
exports LD_LIBRARY_PATH which gives preference to the target
libraries, cc1plus fails to load.

There are also some other stage1 host GCC executables such as cc1 and
lto1 which also depend on CXXABI_1.3.9 from the build libstdc++. The
final, post-stage1 host GCC binaries cc1plus etc. do not depend on
libstdc++.so.6 at all, however, since they are linked using
-static-libstdc++.

To allow me to continue to build, I changed the BASE_TARGET_EXPORTS to
only export LD_LIBRARY_PATH with the target libraries excluding the
target libstdc++ so that the stage1 host programs would continue to
use the build libstdc++. Then in post-stage1, the target libstdc++
path is prepended to LD_LIBRARY_PATH.

I've attached two patches here: the first,
gcc48-libstdc++v3-CXXABI_1.3.9.patch, is the one that allowed me to
build[2] GCC 4.8.3 using GCC 8.1. The second,
gcc81-libstdc++v3-CXXABI_1.3.9.patch, is an analogous patch but for
GCC 8.1, which might allow future versions of GCC to build GCC 8.1
(not tested).

Now I also haven't tested what is the typical use case of building new
compilers with old ones with this patch, but it seems to me that it
makes sense for the stage1 host programs to use the build libstdc++ in
either case since they will depend on the build libstdc++ in either
case. This issue I had wouldn't show up when building new compilers
because presumably the new libstdc++ will define the versions required
by host programs from the old, build libstdc++.

Does this seem like a reasonable change in the general case, or have I
overlooked something?

Best,
Matthew Krupcale

[1] https://copr-be.cloud.fedoraproject.org/results/mkrupcale/gcc/fedora-28-x86_64/00789265-gcc/build.log.gz
[2] https://copr.fedorainfracloud.org/coprs/mkrupcale/gcc/build/789678/

[-- Attachment #2: gcc48-libstdc++v3-CXXABI_1.3.9.patch --]
[-- Type: text/x-patch, Size: 12475 bytes --]

diff --git a/Makefile.in b/Makefile.in
index bfbaf0341..9fb6ef128 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -291,7 +291,7 @@ BASE_TARGET_EXPORTS = \
 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
 @if gcc-bootstrap
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_BUILD_LIBSTDC++)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 @endif gcc-bootstrap
 	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 	TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
@@ -305,6 +305,18 @@ NORMAL_TARGET_EXPORTS = \
 	$(BASE_TARGET_EXPORTS) \
 	CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
 
+# Use the target libstdc++ only after stage1 since the build libstdc++ is
+# required by some stage1 host modules (e.g. cc1, cc1plus, lto1) for
+# CXXABI_1.3.9
+POSTSTAGE1_RPATH_EXPORT = \
+@if target-libstdc++-v3-bootstrap
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_libstdc++-v3)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+@endif target-libstdc++-v3-bootstrap
+
+# Similar, for later GCC stages.
+POSTSTAGE1_TARGET_EXPORTS = \
+	$(POSTSTAGE1_RPATH_EXPORT)
+
 # Where to find GMP
 HOST_GMPLIBS = @gmplibs@
 HOST_GMPINC = @gmpinc@
@@ -576,6 +588,8 @@ all:
 # This is the list of directories that may be needed in RPATH_ENVVAR
 # so that programs built for the target machine work.
 TARGET_LIB_PATH = $(TARGET_LIB_PATH_libstdc++-v3)$(TARGET_LIB_PATH_libmudflap)$(TARGET_LIB_PATH_libsanitizer)$(TARGET_LIB_PATH_libssp)$(TARGET_LIB_PATH_libgomp)$(TARGET_LIB_PATH_libitm)$(TARGET_LIB_PATH_libatomic)$(HOST_LIB_PATH_gcc)
+# Use the build rather than the target libstdc++
+TARGET_LIB_PATH_BUILD_LIBSTDC++ = $(TARGET_LIB_PATH_libmudflap)$(TARGET_LIB_PATH_libsanitizer)$(TARGET_LIB_PATH_libssp)$(TARGET_LIB_PATH_libgomp)$(TARGET_LIB_PATH_libitm)$(TARGET_LIB_PATH_libatomic)$(HOST_LIB_PATH_gcc)
 
 @if target-libstdc++-v3
 TARGET_LIB_PATH_libstdc++-v3 = $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs:
@@ -30858,7 +30872,7 @@ configure-stage2-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -30903,7 +30917,7 @@ configure-stage3-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -30948,7 +30962,7 @@ configure-stage4-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -30993,7 +31007,7 @@ configure-stageprofile-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -31038,7 +31052,7 @@ configure-stagefeedback-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -32289,7 +32303,7 @@ configure-stage2-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -32334,7 +32348,7 @@ configure-stage3-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -32379,7 +32393,7 @@ configure-stage4-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -32424,7 +32438,7 @@ configure-stageprofile-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -32469,7 +32483,7 @@ configure-stagefeedback-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -34177,7 +34191,7 @@ configure-stage2-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -34222,7 +34236,7 @@ configure-stage3-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -34267,7 +34281,7 @@ configure-stage4-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -34312,7 +34326,7 @@ configure-stageprofile-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -34357,7 +34371,7 @@ configure-stagefeedback-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41464,7 +41478,7 @@ configure-stage2-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41509,7 +41523,7 @@ configure-stage3-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41554,7 +41568,7 @@ configure-stage4-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41599,7 +41613,7 @@ configure-stageprofile-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41644,7 +41658,7 @@ configure-stagefeedback-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
diff --git a/Makefile.tpl b/Makefile.tpl
index 3233a788d..0636445d1 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -294,7 +294,7 @@ BASE_TARGET_EXPORTS = \
 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
 @if gcc-bootstrap
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_BUILD_LIBSTDC++)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 @endif gcc-bootstrap
 	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 	TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
@@ -308,6 +308,18 @@ NORMAL_TARGET_EXPORTS = \
 	$(BASE_TARGET_EXPORTS) \
 	CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
 
+# Use the target libstdc++ only after stage1 since the build libstdc++ is
+# required by some stage1 host modules (e.g. cc1, cc1plus, lto1) for
+# CXXABI_1.3.9
+POSTSTAGE1_RPATH_EXPORT = \
+@if target-libstdc++-v3-bootstrap
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_libstdc++-v3)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+@endif target-libstdc++-v3-bootstrap
+
+# Similar, for later GCC stages.
+POSTSTAGE1_TARGET_EXPORTS = \
+	$(POSTSTAGE1_RPATH_EXPORT)
+
 # Where to find GMP
 HOST_GMPLIBS = @gmplibs@
 HOST_GMPINC = @gmpinc@
@@ -531,6 +543,10 @@ all:
 TARGET_LIB_PATH = [+ FOR target_modules +][+
   IF lib_path +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
   ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
+# Use the build rather than the target libstdc++
+TARGET_LIB_PATH_BUILD_LIBSTDC++ = [+ FOR target_modules +][+
+  IF lib_path +][+ IF (not (= (get "module") "libstdc++-v3")) +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF +][+ ENDIF lib_path +][+
+  ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
 [+ FOR target_modules +][+ IF lib_path +]
 @if target-[+module+]
 TARGET_LIB_PATH_[+module+] = $$r/$(TARGET_SUBDIR)/[+module+]/[+lib_path+]:
@@ -1275,6 +1291,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(RAW_CXX_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]
@@ -1286,6 +1303,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(NORMAL_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[-- Attachment #3: gcc81-libstdc++v3-CXXABI_1.3.9.patch --]
[-- Type: text/x-patch, Size: 22789 bytes --]

diff --git a/Makefile.in b/Makefile.in
index 38774f542..593a4fdb7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -291,7 +291,7 @@ BASE_TARGET_EXPORTS = \
 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
 @if gcc-bootstrap
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_BUILD_LIBSTDC++)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 @endif gcc-bootstrap
 	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 	TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
@@ -305,6 +305,18 @@ NORMAL_TARGET_EXPORTS = \
 	$(BASE_TARGET_EXPORTS) \
 	CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
 
+# Use the target libstdc++ only after stage1 since the build libstdc++ is
+# required by some stage1 host modules (e.g. cc1, cc1plus, lto1) for
+# CXXABI_1.3.9
+POSTSTAGE1_RPATH_EXPORT = \
+@if target-libstdc++-v3-bootstrap
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_libstdc++-v3)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+@endif target-libstdc++-v3-bootstrap
+
+# Similar, for later GCC stages.
+POSTSTAGE1_TARGET_EXPORTS = \
+	$(POSTSTAGE1_RPATH_EXPORT)
+
 # Where to find GMP
 HOST_GMPLIBS = @gmplibs@
 HOST_GMPINC = @gmpinc@
@@ -613,6 +625,8 @@ all:
 # This is the list of directories that may be needed in RPATH_ENVVAR
 # so that programs built for the target machine work.
 TARGET_LIB_PATH = $(TARGET_LIB_PATH_libstdc++-v3)$(TARGET_LIB_PATH_libsanitizer)$(TARGET_LIB_PATH_libmpx)$(TARGET_LIB_PATH_libvtv)$(TARGET_LIB_PATH_liboffloadmic)$(TARGET_LIB_PATH_libssp)$(TARGET_LIB_PATH_libgomp)$(TARGET_LIB_PATH_libitm)$(TARGET_LIB_PATH_libatomic)$(HOST_LIB_PATH_gcc)
+# Use the build rather than the target libstdc++
+TARGET_LIB_PATH_BUILD_LIBSTDC++ = $(TARGET_LIB_PATH_libsanitizer)$(TARGET_LIB_PATH_libmpx)$(TARGET_LIB_PATH_libvtv)$(TARGET_LIB_PATH_liboffloadmic)$(TARGET_LIB_PATH_libssp)$(TARGET_LIB_PATH_libgomp)$(TARGET_LIB_PATH_libitm)$(TARGET_LIB_PATH_libatomic)$(HOST_LIB_PATH_gcc)
 
 @if target-libstdc++-v3
 TARGET_LIB_PATH_libstdc++-v3 = $$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs:
@@ -37982,7 +37996,7 @@ configure-stage2-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -38027,7 +38041,7 @@ configure-stage3-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -38072,7 +38086,7 @@ configure-stage4-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -38117,7 +38131,7 @@ configure-stageprofile-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -38162,7 +38176,7 @@ configure-stagetrain-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -38207,7 +38221,7 @@ configure-stagefeedback-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -38252,7 +38266,7 @@ configure-stageautoprofile-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -38297,7 +38311,7 @@ configure-stageautofeedback-target-libstdc++-v3:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39225,7 +39239,7 @@ configure-stage2-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39270,7 +39284,7 @@ configure-stage3-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39315,7 +39329,7 @@ configure-stage4-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39360,7 +39374,7 @@ configure-stageprofile-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39405,7 +39419,7 @@ configure-stagetrain-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39450,7 +39464,7 @@ configure-stagefeedback-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39495,7 +39509,7 @@ configure-stageautoprofile-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -39540,7 +39554,7 @@ configure-stageautofeedback-target-libsanitizer:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libsanitizer/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40468,7 +40482,7 @@ configure-stage2-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40513,7 +40527,7 @@ configure-stage3-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40558,7 +40572,7 @@ configure-stage4-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40603,7 +40617,7 @@ configure-stageprofile-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40648,7 +40662,7 @@ configure-stagetrain-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40693,7 +40707,7 @@ configure-stagefeedback-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40738,7 +40752,7 @@ configure-stageautoprofile-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -40783,7 +40797,7 @@ configure-stageautofeedback-target-libmpx:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libmpx/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41711,7 +41725,7 @@ configure-stage2-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41756,7 +41770,7 @@ configure-stage3-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41801,7 +41815,7 @@ configure-stage4-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41846,7 +41860,7 @@ configure-stageprofile-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41891,7 +41905,7 @@ configure-stagetrain-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41936,7 +41950,7 @@ configure-stagefeedback-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -41981,7 +41995,7 @@ configure-stageautoprofile-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -42026,7 +42040,7 @@ configure-stageautofeedback-target-libvtv:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libvtv/Makefile || exit 0; \
 	$(RAW_CXX_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44328,7 +44342,7 @@ configure-stage2-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44373,7 +44387,7 @@ configure-stage3-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44418,7 +44432,7 @@ configure-stage4-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44463,7 +44477,7 @@ configure-stageprofile-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44508,7 +44522,7 @@ configure-stagetrain-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44553,7 +44567,7 @@ configure-stagefeedback-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44598,7 +44612,7 @@ configure-stageautoprofile-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -44643,7 +44657,7 @@ configure-stageautofeedback-target-libgcc:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51440,7 +51454,7 @@ configure-stage2-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51485,7 +51499,7 @@ configure-stage3-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51530,7 +51544,7 @@ configure-stage4-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51575,7 +51589,7 @@ configure-stageprofile-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51620,7 +51634,7 @@ configure-stagetrain-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51665,7 +51679,7 @@ configure-stagefeedback-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51710,7 +51724,7 @@ configure-stageautoprofile-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
@@ -51755,7 +51769,7 @@ configure-stageautofeedback-target-libgomp:
 	fi; \
 	test ! -f $(TARGET_SUBDIR)/libgomp/Makefile || exit 0; \
 	$(NORMAL_TARGET_EXPORTS) \
-	 \
+	$(POSTSTAGE1_TARGET_EXPORTS) \
 	CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
 	CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
 	LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;  \
diff --git a/Makefile.tpl b/Makefile.tpl
index 1f23b79b4..39a36336a 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -294,7 +294,7 @@ BASE_TARGET_EXPORTS = \
 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
 @if gcc-bootstrap
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_BUILD_LIBSTDC++)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 @endif gcc-bootstrap
 	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 	TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
@@ -308,6 +308,18 @@ NORMAL_TARGET_EXPORTS = \
 	$(BASE_TARGET_EXPORTS) \
 	CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
 
+# Use the target libstdc++ only after stage1 since the build libstdc++ is
+# required by some stage1 host modules (e.g. cc1, cc1plus, lto1) for
+# CXXABI_1.3.9
+POSTSTAGE1_RPATH_EXPORT = \
+@if target-libstdc++-v3-bootstrap
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_libstdc++-v3)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+@endif target-libstdc++-v3-bootstrap
+
+# Similar, for later GCC stages.
+POSTSTAGE1_TARGET_EXPORTS = \
+	$(POSTSTAGE1_RPATH_EXPORT)
+
 # Where to find GMP
 HOST_GMPLIBS = @gmplibs@
 HOST_GMPINC = @gmpinc@
@@ -538,6 +550,10 @@ all:
 TARGET_LIB_PATH = [+ FOR target_modules +][+
   IF lib_path +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
   ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
+# Use the build rather than the target libstdc++
+TARGET_LIB_PATH_BUILD_LIBSTDC++ = [+ FOR target_modules +][+
+  IF lib_path +][+ IF (not (= (get "module") "libstdc++-v3")) +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF +][+ ENDIF lib_path +][+
+  ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
 [+ FOR target_modules +][+ IF lib_path +]
 @if target-[+module+]
 TARGET_LIB_PATH_[+module+] = $$r/$(TARGET_SUBDIR)/[+module+]/[+lib_path+]:
@@ -1326,6 +1342,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(RAW_CXX_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]
@@ -1337,6 +1354,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(NORMAL_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Building old GCC with new GCC: stage1 32-bit libstdc++ fails to build after building 64-bit libstdc++
  2018-09-04 12:20 Building old GCC with new GCC: stage1 32-bit libstdc++ fails to build after building 64-bit libstdc++ Matthew Krupcale
@ 2018-10-31  6:30 ` Matthew Krupcale
  0 siblings, 0 replies; 2+ messages in thread
From: Matthew Krupcale @ 2018-10-31  6:30 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 627 bytes --]

Hello,

This is an update and a ping to my original patch message[1].

I've attached an updated set of patches:

1) gcc48-stage1-build-libstdc++.patch: Makefile.tpl patch portion
which allowed me to build GCC 4.8.3 using GCC 8.1
2) gcc82-stage1-build-libstdc++.patch: analogous patch for GCC 8.2
potentially allowing future GCC to build GCC 8.2 (untested).

These patches no longer contain the generated Makefile.in diff and
have a more general comment (i.e. not specific to CXXABI_1.3.9 issue
cited) since this issue might be more general.

Best,
Matthew Krupcale

[1] https://gcc.gnu.org/ml/gcc-patches/2018-09/msg00176.html

[-- Attachment #2: gcc48-stage1-build-libstdc++.patch --]
[-- Type: text/x-patch, Size: 2931 bytes --]

diff --git a/Makefile.tpl b/Makefile.tpl
index 3233a788d..7faf98db5 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -294,7 +294,7 @@ BASE_TARGET_EXPORTS = \
 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
 @if gcc-bootstrap
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_BUILD_LIBSTDC++)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 @endif gcc-bootstrap
 	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 	TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
@@ -308,6 +308,17 @@ NORMAL_TARGET_EXPORTS = \
 	$(BASE_TARGET_EXPORTS) \
 	CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
 
+# Use the target libstdc++ only after stage1 since the build libstdc++ is
+# required by some stage1 host modules (e.g. cc1, cc1plus, lto1)
+POSTSTAGE1_RPATH_EXPORT = \
+@if target-libstdc++-v3-bootstrap
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_libstdc++-v3)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+@endif target-libstdc++-v3-bootstrap
+
+# Similar, for later GCC stages.
+POSTSTAGE1_TARGET_EXPORTS = \
+	$(POSTSTAGE1_RPATH_EXPORT)
+
 # Where to find GMP
 HOST_GMPLIBS = @gmplibs@
 HOST_GMPINC = @gmpinc@
@@ -531,6 +542,10 @@ all:
 TARGET_LIB_PATH = [+ FOR target_modules +][+
   IF lib_path +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
   ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
+# Use the build rather than the target libstdc++
+TARGET_LIB_PATH_BUILD_LIBSTDC++ = [+ FOR target_modules +][+
+  IF lib_path +][+ IF (not (= (get "module") "libstdc++-v3")) +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF +][+ ENDIF lib_path +][+
+  ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
 [+ FOR target_modules +][+ IF lib_path +]
 @if target-[+module+]
 TARGET_LIB_PATH_[+module+] = $$r/$(TARGET_SUBDIR)/[+module+]/[+lib_path+]:
@@ -1275,6 +1290,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(RAW_CXX_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]
@@ -1286,6 +1302,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(NORMAL_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

[-- Attachment #3: gcc82-stage1-build-libstdc++.patch --]
[-- Type: text/x-patch, Size: 2931 bytes --]

diff --git a/Makefile.tpl b/Makefile.tpl
index 1f23b79b4..8f048efc1 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -294,7 +294,7 @@ BASE_TARGET_EXPORTS = \
 	WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
 	WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
 @if gcc-bootstrap
-	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_BUILD_LIBSTDC++)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 @endif gcc-bootstrap
 	$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
 	TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
@@ -308,6 +308,17 @@ NORMAL_TARGET_EXPORTS = \
 	$(BASE_TARGET_EXPORTS) \
 	CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
 
+# Use the target libstdc++ only after stage1 since the build libstdc++ is
+# required by some stage1 host modules (e.g. cc1, cc1plus, lto1)
+POSTSTAGE1_RPATH_EXPORT = \
+@if target-libstdc++-v3-bootstrap
+	$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH_libstdc++-v3)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
+@endif target-libstdc++-v3-bootstrap
+
+# Similar, for later GCC stages.
+POSTSTAGE1_TARGET_EXPORTS = \
+	$(POSTSTAGE1_RPATH_EXPORT)
+
 # Where to find GMP
 HOST_GMPLIBS = @gmplibs@
 HOST_GMPINC = @gmpinc@
@@ -538,6 +549,10 @@ all:
 TARGET_LIB_PATH = [+ FOR target_modules +][+
   IF lib_path +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
   ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
+# Use the build rather than the target libstdc++
+TARGET_LIB_PATH_BUILD_LIBSTDC++ = [+ FOR target_modules +][+
+  IF lib_path +][+ IF (not (= (get "module") "libstdc++-v3")) +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF +][+ ENDIF lib_path +][+
+  ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
 [+ FOR target_modules +][+ IF lib_path +]
 @if target-[+module+]
 TARGET_LIB_PATH_[+module+] = $$r/$(TARGET_SUBDIR)/[+module+]/[+lib_path+]:
@@ -1326,6 +1341,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(RAW_CXX_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]
@@ -1337,6 +1353,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
 [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
 	     check_multilibs=true
 	     exports="$(NORMAL_TARGET_EXPORTS)"
+	     poststage1_exports="$(POSTSTAGE1_TARGET_EXPORTS)"
 	     host_alias=(get "host" "${target_alias}")
 	     target_alias=(get "target" "${target_alias}")
 	     args="$(TARGET_CONFIGARGS)" no-config-site=true +]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-10-31  2:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-04 12:20 Building old GCC with new GCC: stage1 32-bit libstdc++ fails to build after building 64-bit libstdc++ Matthew Krupcale
2018-10-31  6:30 ` Matthew Krupcale

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).