On Mon, Jun 20, 2022 at 1:21 AM Kito Cheng <kito.ch...@gmail.com> wrote: > > Generally I agree we should fix that by GCC driver rather than ld > emulation, but I think this should be reverted with the -L path fix, > otherwise that will break multilib on GNU toolchain for linux > immediately?
Thanks for the good consideration. That said, I am unsure any distro uses this currently. I think some just work around the possibly non-existent paths by creating symlinks. Perhaps we should prioritize on fixing the scheme before distros start to rely on the behavior. > On Wed, Jun 15, 2022 at 4:00 PM Fangrui Song via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > This reverts commit 37d57ac9a636f2235f9060e84fb8dd7968abd1dc. > > > > The resolution to https://sourceware.org/bugzilla/show_bug.cgi?id=22962 > > let GCC pass -m emulation to ld and let the ld emulation configure > > default library paths. This scheme is problematic: > > > > * It's not ld's business to specify default -L. Different platforms have > > different opinions on the hierarchy and all other arches work well without > > ld's > > default -L. > > * If some ABI derived library paths are desired, the compiler driver is in a > > better position to make the decision and traditionally has done this. > > * -m emulation is opaque to the compiler driver. It doesn't affect -B, so > > data files like crt*.o, libasan_preinit.o, and libtsan_preinit.o are not > > affected. > > > > As is, many platforms just use symlinks to fake the > > lib64/{ilp32{,f},lp64{,f}} > > hierarchies needed by the GNU ld emulation. They can always specify -L > > explicitly if they want some ABI derived library paths. See also the > > rejected > > https://reviews.llvm.org/D95755 > > > > gcc/Changelog: > > > > * config/riscv/linux.h (LD_EMUL_SUFFIX): Remove. > > (LINK_SPEC): Remove LD_EMUL_SUFFIX. > > --- > > gcc/config/riscv/linux.h | 10 +--------- > > 1 file changed, 1 insertion(+), 9 deletions(-) > > > > diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h > > index 38803723ba9..e0ff6e6a178 100644 > > --- a/gcc/config/riscv/linux.h > > +++ b/gcc/config/riscv/linux.h > > @@ -49,16 +49,8 @@ along with GCC; see the file COPYING3. If not see > > > > #define CPP_SPEC "%{pthread:-D_REENTRANT}" > > > > -#define LD_EMUL_SUFFIX \ > > - "%{mabi=lp64d:}" \ > > - "%{mabi=lp64f:_lp64f}" \ > > - "%{mabi=lp64:_lp64}" \ > > - "%{mabi=ilp32d:}" \ > > - "%{mabi=ilp32f:_ilp32f}" \ > > - "%{mabi=ilp32:_ilp32}" > > - > > #define LINK_SPEC "\ > > --melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv" LD_EMUL_SUFFIX " \ > > +-melf" XLEN_SPEC DEFAULT_ENDIAN_SPEC "riscv \ > > %{mno-relax:--no-relax} \ > > %{mbig-endian:-EB} \ > > %{mlittle-endian:-EL} \ > > -- > > 2.36.1.476.g0c4daa206d-goog > > -- 宋方睿