]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V: Lookup reversely in riscv_select_multilib_by_abi
authorYunQiang Su <yunqiang@isrc.iscas.ac.cn>
Thu, 5 Sep 2024 07:14:43 +0000 (15:14 +0800)
committerYunQiang Su <syq@gcc.gnu.org>
Thu, 5 Sep 2024 08:45:46 +0000 (16:45 +0800)
When use --print-multi-os-dir or -print-multi-directory, gcc outputs
different values with full -march option and the base one only.

$ ./gcc/xgcc --print-multi-os-dir -mabi=lp64d -march=rv64gc
lib64/lp64d

$ ./gcc/xgcc --print-multi-os-dir -mabi=lp64d -march=rv64gc_zba
.

The reason is that in multilib.h, the fallback value of multilib
is listed as the 1st one in `multilib_raw[]`.

gcc
* common/config/riscv/riscv-common.cc(riscv_select_multilib_by_abi):
look up reversely as the fallback path is listed as the 1st one.

gcc/common/config/riscv/riscv-common.cc

index 62c6e1dab1fd52969249f4ae9018feffd4fa0ac7..2c1ce7fc7cb8a350391cd333b077f033516986ec 100644 (file)
@@ -2079,7 +2079,7 @@ riscv_select_multilib_by_abi (
   const std::string &riscv_current_abi_str,
   const std::vector<riscv_multi_lib_info_t> &multilib_infos)
 {
-  for (size_t i = 0; i < multilib_infos.size (); ++i)
+  for (ssize_t i = multilib_infos.size (); i >= 0; --i)
     if (riscv_current_abi_str == multilib_infos[i].abi_str)
       return xstrdup (multilib_infos[i].path.c_str ());