[gcc(refs/users/aoliva/heads/testme)] [PATCH] Turn x86_64-m32 configurations into biarch defaulting to m32
Alexandre Oliva
aoliva@gcc.gnu.org
Thu Dec 4 04:18:30 GMT 2025
https://gcc.gnu.org/g:d171e42d807391e0d8c9e99761e209024523a19d
commit d171e42d807391e0d8c9e99761e209024523a19d
Author: Olivier Hainque <hainque@adacore.com>
Date: Mon Nov 24 20:07:27 2025 -0300
[PATCH] Turn x86_64-m32 configurations into biarch defaulting to m32
Experimental changes.
Diff:
---
gcc/ada/gcc-interface/Make-lang.in | 25 +++++++++++++++++++------
gcc/ada/gcc-interface/Makefile.in | 7 +++++++
gcc/config.gcc | 4 ++--
3 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
index e768ef60ddf7..c264caa4c94e 100644
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -192,10 +192,20 @@ GNATLS_FOR_HOST = $(subst gnatmake,gnatls,$(GNATMAKE))
# There are too many Ada sources to check against here. Let's
# always force the recursive make.
+
+# A native x86_64 compiler defaulting to -m32 is not suitable to build
+# 64bit host tools. Arrange to build the tools with the base compiler
+# in this case, as we do for cross configurations.
+
+m32_target=$(filter x86_64%m32, $(target))
+not_m32_target=$(if $(m32_target),,$(target))
+
ifeq ($(build), $(host))
- ifeq ($(host), $(target))
- # This is a regular native. So use the compiler from our current build
- # tree.
+ native_target=$(filter $(host), $(target))
+
+ ifneq ($(and $(native_target), $(not_m32_target)),)
+ # This is a regular native. Use the compiler from our
+ # current build tree.
ADA_TOOLS_FLAGS_TO_PASS=\
CC="../../xgcc -B../../" \
CXX="$(CXX)" \
@@ -205,8 +215,8 @@ ifeq ($(build), $(host))
GNATLINK="../../gnatlink" \
GNATBIND="../../gnatbind"
else
- # This is a regular cross compiler. Use the native compiler to compile
- # the tools.
+ # This is a regular cross compiler or a 64bit native defaulting to -m32.
+ # Use the base native compiler to compile the tools.
# put the host RTS dir first in the PATH to hide the default runtime
# files that are among the sources
@@ -792,8 +802,11 @@ gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS)
+$(GCC_LINK) -o $@ $(CFLAGS) ada/b_gnatb.o $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS) ggc-none.o libcommon-target.a $(LIBS) $(SYSLIBS) $(GNATLIB)
# use target-gcc target-gnatmake target-gnatbind target-gnatlink
+
+native_gnattools1=$(if $(not_m32_target),gnattools1,gnattools1-re)
+
gnattools: $(CONFIG_H) prefix.o force
- $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1
+ $(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) $(native_gnattools1)
$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
regnattools:
diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
index f37893e93fee..2eadf996a1a7 100644
--- a/gcc/ada/gcc-interface/Makefile.in
+++ b/gcc/ada/gcc-interface/Makefile.in
@@ -358,6 +358,13 @@ ifeq ($(strip $(filter-out x86_64 linux-gnux32%, $(target_cpu) $(target_os))),)
endif
endif
+# The x86_64-*m32 compilers are x86_64 compilers defaulting to -m32
+ifeq ($(strip $(filter-out x86_64 %m32, $(target_cpu) $(target_os))),)
+ ifneq ($(strip $(MULTISUBDIR)),/64)
+ target_cpu:=i686
+ endif
+endif
+
# Configuration of host tools
# Under linux, host tools need to be linked with -ldl
diff --git a/gcc/config.gcc b/gcc/config.gcc
index f7539e96ad80..f8d7cb2b2fcb 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -690,8 +690,7 @@ x86_64-*-*)
exit 1
esac
case ${with_multilib_list} in
- default | m32)
- with_multilib_list=m32
+ default | *m32*)
;;
*)
echo "Invalid multilib list for m32 target"
@@ -715,6 +714,7 @@ x86_64-*-*)
tm_file="i386/biarchx32.h ${tm_file}"
;;
32 | m32)
+ tm_defines="${tm_defines} TARGET_BI_ARCH=1"
;;
*)
echo "Unknown ABI used in --with-abi=$with_abi"
More information about the Gcc-cvs
mailing list