On April 29, 2017 3:59:27 AM GMT+02:00, Palmer Dabbelt <pal...@dabbelt.com> wrote: >We've been telling people that "riscv32-*" and "riscv64-*" are exactly >the same toolchain aside from defaults for "-march" and "-mabi", but it >appears we were lying. As far as I can tell, binutils doesn't support >64-bit targets when it has been configured for a 32-bit target. This >seems to be an upstream limitation that we can't fix in the RISC-V >port. >This means that building the toolchain with "--with-arch=rv32i >--enable-multilib" will fail when building the 64-bit multilibs. > >This patch adds two new multilib target fragments that don't add the >64-bit multilibs. This fixes the build, but has the disadvantage of >making our 32-bit and 64-bit toolchains very different.
PowerPC for 32bit can use powerpc64 as target and enable 32bit code-gen by default at configure time. Maybe this is an option for riscv as well. Richard. >gcc/ChanegLog: > >2017-04-28 Palmer Dabbelt <pal...@dabbelt.com> > > * config/riscv/t-elf-multilib32: New file. > * config/riscv/t-linux-multilib32: Likewise > * config.gcc: Select between the 32-bit and 64-bit multilib > configurations based on the target XLEN. >--- > gcc/ChangeLog | 7 +++++++ > gcc/config.gcc | 12 +++++++++-- >gcc/config/riscv/t-elf-multilib32 | 22 >++++++++++++++++++++ > .../riscv/{t-elf-multilib => t-elf-multilib64} | 0 >gcc/config/riscv/t-linux-multilib32 | 24 >++++++++++++++++++++++ > .../riscv/{t-linux-multilib => t-linux-multilib64} | 0 > 6 files changed, 63 insertions(+), 2 deletions(-) > create mode 100644 gcc/config/riscv/t-elf-multilib32 > rename gcc/config/riscv/{t-elf-multilib => t-elf-multilib64} (100%) > create mode 100644 gcc/config/riscv/t-linux-multilib32 >rename gcc/config/riscv/{t-linux-multilib => t-linux-multilib64} (100%) > >diff --git a/gcc/ChangeLog b/gcc/ChangeLog >index 977517e..2ad14ae 100644 >--- a/gcc/ChangeLog >+++ b/gcc/ChangeLog >@@ -1,3 +1,10 @@ >+2017-04-28 Palmer Dabbelt <pal...@dabbelt.com> >+ >+ * config/riscv/t-elf-multilib32: New file. >+ * config/riscv/t-linux-multilib32: Likewise >+ * config.gcc: Select between the 32-bit and 64-bit multilib >+ configurations based on the target XLEN. >+ > 2017-04-28 Jan Hubicka <hubi...@ucw.cz> > > * ipa-cp.c (perform_estimation_of_a_value): Turn time to sreal. >diff --git a/gcc/config.gcc b/gcc/config.gcc >index b8bb4d6..4d142b4 100644 >--- a/gcc/config.gcc >+++ b/gcc/config.gcc >@@ -2018,10 +2018,14 @@ microblaze*-*-elf) > tmake_file="${tmake_file} microblaze/t-microblaze" > ;; > riscv*-*-linux*) >+ case "${target}" in >+ riscv32-*) riscv_xlen=32 ;; >+ riscv64-*) riscv_xlen=64 ;; >+ esac > tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h ${tm_file} >riscv/linux.h" > case "x${enable_multilib}" in > xno) ;; >- xyes) tmake_file="${tmake_file} riscv/t-linux-multilib" ;; >+ xyes) tmake_file="${tmake_file} riscv/t-linux-multilib${riscv_xlen}" >;; > *) echo "Unknown value for enable_multilib"; exit 1 > esac > tmake_file="${tmake_file} riscv/t-riscv riscv/t-linux" >@@ -2032,10 +2036,14 @@ riscv*-*-linux*) > gcc_cv_initfini_array=yes > ;; > riscv*-*-elf*) >+ case "${target}" in >+ riscv32-*) riscv_xlen=32 ;; >+ riscv64-*) riscv_xlen=64 ;; >+ esac > tm_file="elfos.h newlib-stdint.h ${tm_file} riscv/elf.h" > case "x${enable_multilib}" in > xno) ;; >- xyes) tmake_file="${tmake_file} riscv/t-elf-multilib" ;; >+ xyes) tmake_file="${tmake_file} riscv/t-elf-multilib${riscv_xlen}" ;; > *) echo "Unknown value for enable_multilib"; exit 1 > esac > tmake_file="${tmake_file} riscv/t-riscv" >diff --git a/gcc/config/riscv/t-elf-multilib32 >b/gcc/config/riscv/t-elf-multilib32 >new file mode 100644 >index 0000000..1f2928c >--- /dev/null >+++ b/gcc/config/riscv/t-elf-multilib32 >@@ -0,0 +1,22 @@ >+# This file was generated by multilib-generator with the command: >+# ./multilib-generator rv32i-ilp32--c rv32im-ilp32--c rv32iac-ilp32-- >rv32imac-ilp32-- rv32imafc-ilp32f-rv32imafdc- >+MULTILIB_OPTIONS = >march=rv32i/march=rv32ic/march=rv32im/march=rv32imc/march=rv32iac/march=rv32imac/march=rv32imafc/march=rv32imafdc/march=rv32gc >mabi=ilp32/mabi=ilp32f >+MULTILIB_DIRNAMES = rv32i \ >+rv32ic \ >+rv32im \ >+rv32imc \ >+rv32iac \ >+rv32imac \ >+rv32imafc \ >+rv32imafdc \ >+rv32gc ilp32 \ >+ilp32f >+MULTILIB_REQUIRED = march=rv32i/mabi=ilp32 \ >+march=rv32im/mabi=ilp32 \ >+march=rv32iac/mabi=ilp32 \ >+march=rv32imac/mabi=ilp32 \ >+march=rv32imafc/mabi=ilp32f >+MULTILIB_REUSE = march.rv32i/mabi.ilp32=march.rv32ic/mabi.ilp32 \ >+march.rv32im/mabi.ilp32=march.rv32imc/mabi.ilp32 \ >+march.rv32imafc/mabi.ilp32f=march.rv32imafdc/mabi.ilp32f \ >+march.rv32imafc/mabi.ilp32f=march.rv32gc/mabi.ilp32f >diff --git a/gcc/config/riscv/t-elf-multilib >b/gcc/config/riscv/t-elf-multilib64 >similarity index 100% >rename from gcc/config/riscv/t-elf-multilib >rename to gcc/config/riscv/t-elf-multilib64 >diff --git a/gcc/config/riscv/t-linux-multilib32 >b/gcc/config/riscv/t-linux-multilib32 >new file mode 100644 >index 0000000..7b130c0 >--- /dev/null >+++ b/gcc/config/riscv/t-linux-multilib32 >@@ -0,0 +1,24 @@ >+# This file was generated by multilib-generator with the command: >+# ./multilib-generator >rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32imafc,rv32imafdc- >rv32imafdc-ilp32d-rv32imafd- >+MULTILIB_OPTIONS = >march=rv32imac/march=rv32ima/march=rv32imaf/march=rv32imafd/march=rv32imafc/march=rv32imafdc/march=rv32g/march=rv32gc >mabi=ilp32/mabi=ilp32d >+MULTILIB_DIRNAMES = rv32imac \ >+rv32ima \ >+rv32imaf \ >+rv32imafd \ >+rv32imafc \ >+rv32imafdc \ >+rv32g \ >+rv32gc ilp32 \ >+ilp32d >+MULTILIB_REQUIRED = march=rv32imac/mabi=ilp32 \ >+march=rv32imafdc/mabi=ilp32d >+MULTILIB_REUSE = march.rv32imac/mabi.ilp32=march.rv32ima/mabi.ilp32 \ >+march.rv32imac/mabi.ilp32=march.rv32imaf/mabi.ilp32 \ >+march.rv32imac/mabi.ilp32=march.rv32imafd/mabi.ilp32 \ >+march.rv32imac/mabi.ilp32=march.rv32imafc/mabi.ilp32 \ >+march.rv32imac/mabi.ilp32=march.rv32imafdc/mabi.ilp32 \ >+march.rv32imac/mabi.ilp32=march.rv32g/mabi.ilp32 \ >+march.rv32imac/mabi.ilp32=march.rv32gc/mabi.ilp32 \ >+march.rv32imafdc/mabi.ilp32d=march.rv32imafd/mabi.ilp32d \ >+march.rv32imafdc/mabi.ilp32d=march.rv32gc/mabi.ilp32d \ >+march.rv32imafdc/mabi.ilp32d=march.rv32g/mabi.ilp32d >diff --git a/gcc/config/riscv/t-linux-multilib >b/gcc/config/riscv/t-linux-multilib64 >similarity index 100% >rename from gcc/config/riscv/t-linux-multilib >rename to gcc/config/riscv/t-linux-multilib64