Re: git: 349cc55c9796 - main - Merge llvm-project main llvmorg-14-init-10186-gff7f2cfa959b
- Reply: Brooks Davis : "Re: git: 349cc55c9796 - main - Merge llvm-project main llvmorg-14-init-10186-gff7f2cfa959b"
- Reply: Charlie Li : "Re: git: 349cc55c9796 - main - Merge llvm-project main llvmorg-14-init-10186-gff7f2cfa959b"
- In reply to: Konstantin Belousov : "Re: git: 349cc55c9796 - main - Merge llvm-project main llvmorg-14-init-10186-gff7f2cfa959b"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 18 May 2022 19:17:58 UTC
On 18 May 2022, at 02:33, Konstantin Belousov <kostikbel@gmail.com> wrote: > > On Tue, May 17, 2022 at 10:56:14AM -0700, John Baldwin wrote: >> On 5/16/22 8:09 PM, Charlie Li wrote: >>> Brooks Davis wrote: >>>> On Mon, May 16, 2022 at 10:47:49AM -0400, Charlie Li wrote: >>>>> Dimitry Andric wrote: >>>>>> This was also reported by another user, and it turned out they were >>>>>> using WITHOUT_CROSS_COMPILER= in src.conf. If you also have that, try >>>>>> removing it and rebuilding. >>>>>> >>>>> Yeah I eventually figured that part out. Worked around (first attempt) >>>>> by building with devel/llvm14 CROSS_TOOLCHAIN, but resulted in certain >>>>> kernel modules (zfs and a few more) with malformed relocations. >>>>> Subsequent rebuild with the new world's toolchain corrected that. >>>> >>>> Does that mean we're missing patches in the port? Hopefully anything >>>> this critical can be merged into LLVM 14.0.3. >>>> >>> Probably: >>> >>> May 15 22:34:08 current-builder kernel: ---<<BOOT>>--- >>> May 15 22:34:08 current-builder kernel: Copyright (c) 1992-2022 The >>> FreeBSD Project. >>> May 15 22:34:08 current-builder kernel: Copyright (c) 1979, 1980, 1983, >>> 1986, 1988, 1989, 1991, 1992, 1993, 1994 >>> May 15 22:34:08 current-builder kernel: The Regents of the >>> University of California. All rights reserved. >>> May 15 22:34:08 current-builder kernel: FreeBSD is a registered >>> trademark of The FreeBSD Foundation. >>> May 15 22:34:08 current-builder kernel: FreeBSD 14.0-CURRENT #121 >>> main-n255657-48a1a6be196: Sun May 15 21:59:12 EDT 2022 >>> May 15 22:34:08 current-builder kernel: >>> root@current-builder:/usr/obj/usr/src/amd64.amd64/sys/GENERIC-NODEBUG amd64 >>> May 15 22:34:08 current-builder kernel: clang version 14.0.2 >>> [...] >>> May 15 22:34:08 current-builder kernel: kldload: unexpected relocation >>> type 42, symbol index 8321 >> >> These are all type 42: >> >> #define R_X86_64_REX_GOTPCRELX 42 >> >> It's not a LLVM bug so much as it is probably missing support in the kernel and/or >> loader for this type of relocation. kldxref might also need updating. >> >> I suspect due to a mismatch of old lld with new clang or some such that the old >> lld failed to resolve these relocations to some other type or something weird like >> that? > > I do think this is a toolchain bug, or at least new and undesired behavior. > > For practical purposes, R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX are > same as R_X86_64_GOTPCREL64, I believe, but we do not expect GOT relocations > in the .o object modules on amd64. I don't see this with clang 14.0.3 from base on 14-CURRENT. None of my kernel modules has any of these relocations, and I also get no warnings from kldxref. Btw, I know that clang from ports will use /usr/local/bin/ld if it is available, so this might be GNU ld specific behavior? Charlie, do you have the binutils port installed? That said, the lld release notes <https://releases.llvm.org/14.0.0/tools/lld/docs/ReleaseNotes.html#elf-improvements> say you can now use --no-relax for this: > • For x86-64, --no-relax now suppresses R_X86_64_GOTPCRELX and > R_X86_64_REX_GOTPCRELX GOT optimization (D113615) So maybe we can use this in sys/conf/kern.mk, or in kmod.mk? -Dimitry