mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
22235ef34a
Currently, when linking with ld.lld, this warning pops up:
arch/mips/vdso/Makefile:70: MIPS VDSO requires binutils >= 2.25
CONFIG_LD_VERSION is set with scripts/ld-version.sh, which is specific
to GNU ld. It returns 0 for ld.lld so CONFIG_MIPS_LD_CAN_LINK_VDSO does
not set.
ld.lld has a completely different versioning scheme (as it follows
LLVM's versioning) and it does not have the issue mentioned in the
comment block so it should be allowed to link the VDSO.
With this patch, the VDSO successfully links and shows P_MIPS_PC32 in
vgettimeofday.o.
$ llvm-objdump -Dr arch/mips/vdso/vgettimeofday.o | grep R_MIPS_PC32
00000024: R_MIPS_PC32 _start
000000b0: R_MIPS_PC32 _start
000002bc: R_MIPS_PC32 _start
0000036c: R_MIPS_PC32 _start
00000468: R_MIPS_PC32 _start
Reported-by: Dmitry Golovin <dima@golovin.in>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Link: https://github.com/ClangBuiltLinux/linux/issues/785
Link: e364e2e9ce
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
19 lines
913 B
Plaintext
19 lines
913 B
Plaintext
# For the pre-R6 code in arch/mips/vdso/vdso.h for locating
|
|
# the base address of VDSO, the linker will emit a R_MIPS_PC32
|
|
# relocation in binutils > 2.25 but it will fail with older versions
|
|
# because that relocation is not supported for that symbol. As a result
|
|
# of which we are forced to disable the VDSO symbols when building
|
|
# with < 2.25 binutils on pre-R6 kernels. For more references on why we
|
|
# can't use other methods to get the base address of VDSO please refer to
|
|
# the comments on that file.
|
|
#
|
|
# GCC (at least up to version 9.2) appears to emit function calls that make use
|
|
# of the GOT when targeting microMIPS, which we can't use in the VDSO due to
|
|
# the lack of relocations. As such, we disable the VDSO for microMIPS builds.
|
|
|
|
config MIPS_LD_CAN_LINK_VDSO
|
|
def_bool LD_VERSION >= 225000000 || LD_IS_LLD
|
|
|
|
config MIPS_DISABLE_VDSO
|
|
def_bool CPU_MICROMIPS || (!CPU_MIPSR6 && !MIPS_LD_CAN_LINK_VDSO)
|