# DP: - Remaining multiarch patches, not yet submitted upstream.
# DP: - Add MULTIARCH_DIRNAME definitions for multilib configurations,
# DP:   which are used for the non-multilib builds.

2013-06-12  Matthias Klose  <doko@ubuntu.com>

	* config/i386/t-linux64: Set MULTIARCH_DIRNAME.
	* config.gcc (i[34567]86-*-linux* | x86_64-*-linux*): Prepend
	i386/t-linux to $tmake_file;
	set default ABI to N64 for mips64el.
	* config/mips/t-linux64: Set MULTIARCH_DIRNAME.
	* config/rs6000/t-linux64: Set MULTIARCH_DIRNAME.
	* config/s390/t-linux64: Set MULTIARCH_DIRNAME.
	* config/sparc/t-linux64: Set MULTIARCH_DIRNAME.
	* src/gcc/config/mips/mips.h: (/usr)/lib as default path.

--- a/src/gcc/config/sh/t-linux
+++ b/src/gcc/config/sh/t-linux
@@ -1,3 +1,11 @@
 MULTILIB_DIRNAMES=
 MULTILIB_MATCHES=
+
+ifneq (,$(findstring sh4,$(target)))
+MULTILIB_OSDIRNAMES = .:sh4-linux-gnu sh4_nofpu-linux-gnu:sh4-linux-gnu
+MULTIARCH_DIRNAME = $(call if_multiarch,sh4-linux-gnu)
+else
+MULTILIB_OSDIRNAMES = .:sh3-linux-gnu sh3_nofpu-linux-gnu:sh3-linux-gnu
+MULTIARCH_DIRNAME = $(call if_multiarch,sh3-linux-gnu)
+endif
 MULTILIB_EXCEPTIONS=m1 mb/m1 m2a
--- a/src/gcc/config/sparc/t-linux64
+++ b/src/gcc/config/sparc/t-linux64
@@ -27,3 +27,5 @@ MULTILIB_OPTIONS = m64/m32
 MULTILIB_DIRNAMES = 64 32
 MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu)
 MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu)
+
+MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu)
--- a/src/gcc/config/s390/t-linux64
+++ b/src/gcc/config/s390/t-linux64
@@ -9,3 +9,5 @@ MULTILIB_OPTIONS = m64/m31
 MULTILIB_DIRNAMES = 64 32
 MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
 MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
+
+MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu)
--- a/src/gcc/config/rs6000/t-linux64
+++ b/src/gcc/config/rs6000/t-linux64
@@ -31,6 +31,8 @@ MULTILIB_EXTRA_OPTS :=
 MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
 MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
 
+MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu)
+
 rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
--- a/src/gcc/config/i386/t-linux64
+++ b/src/gcc/config/i386/t-linux64
@@ -36,3 +36,13 @@ MULTILIB_DIRNAMES   = $(patsubst m%, %,
 MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
 MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
 MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
+
+ifneq (,$(findstring x86_64,$(target)))
+  ifneq (,$(findstring biarchx32.h,$(tm_include_list)))
+  MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnux32)
+  else
+  MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnu)
+  endif
+else
+  MULTIARCH_DIRNAME = $(call if_multiarch,i386-linux-gnu)
+endif
--- a/src/gcc/config/mips/t-linux64
+++ b/src/gcc/config/mips/t-linux64
@@ -18,24 +18,28 @@
 
 MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
 MULTILIB_DIRNAMES = n32 32 64
+MIPS_R6 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),r6)
+MIPS_32 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),32)
+MIPS_ISA = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),isa)
 MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
 MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
+
 ifeq (yes,$(enable_multiarch))
   ifneq (,$(findstring gnuabi64,$(target)))
     MULTILIB_OSDIRNAMES = \
-	../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-	../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-	../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+        ../lib32$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+        ../libo32$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+        ../lib$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
   else ifneq (,$(findstring gnuabin32,$(target)))
     MULTILIB_OSDIRNAMES = \
-	../lib$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-	../libo32$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-	../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+        ../lib$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+        ../libo32$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+        ../lib64$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
   else
     MULTILIB_OSDIRNAMES = \
-	../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
-	../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
-	../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+        ../lib32$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
+        ../lib$(call if_multiarch,:mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
+        ../lib64$(call if_multiarch,:mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
   endif
 else
   MULTILIB_OSDIRNAMES = \
@@ -43,3 +47,13 @@ else
 	../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
 	../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
 endif
+
+ifneq (,$(findstring abin32,$(target)))
+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT))
+else
+ifneq (,$(findstring abi64,$(target)))
+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+else
+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT))
+endif
+endif
--- a/src/gcc/config.gcc
+++ b/src/gcc/config.gcc
@@ -2710,7 +2710,8 @@ mips*-*-linux*)				# Linux MIPS, either
 	extra_options="${extra_options} linux-android.opt"
 	case ${target} in
 		mipsisa32r6*)
-			default_mips_arch=mips32r6
+			with_arch_32="mips32r6"
+			with_arch_64="mips64r6"
 			;;
 		mipsisa32r2*)
 			default_mips_arch=mips32r2
@@ -2732,7 +2733,8 @@ mips*-*-linux*)				# Linux MIPS, either
 			;;
 		mipsisa64r6*-*-linux-gnuabi64)
 			default_mips_abi=64
-			default_mips_arch=mips64r6
+			with_arch_32="mips32r6"
+			with_arch_64="mips64r6"
 			enable_mips_multilibs="yes"
 			;;
 		mipsisa64r6*-*-linux*)
@@ -6088,7 +6090,7 @@ case ${target} in
 		;;
 	i[34567]86-*-linux* | x86_64-*-linux*)
 		extra_objs="${extra_objs} gnu-property.o"
-		tmake_file="$tmake_file i386/t-linux i386/t-gnu-property"
+		tmake_file="i386/t-linux $tmake_file i386/t-gnu-property"
 		;;
 	i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
 		tmake_file="$tmake_file i386/t-kfreebsd"
--- a/src/gcc/Makefile.in
+++ b/src/gcc/Makefile.in
@@ -586,7 +586,7 @@ BUILD_SYSTEM_HEADER_DIR = `echo @BUILD_S
 STMP_FIXINC = @STMP_FIXINC@
 
 # Test to see whether <limits.h> exists in the system header files.
-LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ]
+LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h -o -f $(BUILD_SYSTEM_HEADER_DIR)/$(MULTIARCH_DIRNAME)/limits.h ]
 
 # Directory for prefix to system directories, for
 # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
--- a/src/gcc/config/aarch64/t-aarch64-linux
+++ b/src/gcc/config/aarch64/t-aarch64-linux
@@ -22,7 +22,7 @@ LIB1ASMSRC   = aarch64/lib1funcs.asm
 LIB1ASMFUNCS = _aarch64_sync_cache_range
 
 AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
+MULTILIB_OSDIRNAMES = mabi.lp64=../lib$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
 MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
 
 MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
--- a/src/gcc/config/arc/t-multilib-linux
+++ b/src/gcc/config/arc/t-multilib-linux
@@ -23,3 +23,6 @@ MULTILIB_DIRNAMES = hs archs hs38 hs38_l
 # Aliases:
 MULTILIB_MATCHES += mcpu?arc700=mA7
 MULTILIB_MATCHES += mcpu?arc700=mARC700
+
+MULTILIB_OSDIRNAMES =
+MULTIARCH_DIRNAME = $(call if_multiarch,arc-linux-gnu)
