linux/arch/s390/kernel
Nathan Chancellor 2b2a25845d s390/vdso: Use $(LD) instead of $(CC) to link vDSO
Currently, the VDSO is being linked through $(CC). This does not match
how the rest of the kernel links objects, which is through the $(LD)
variable.

When clang is built in a default configuration, it first attempts to use
the target triple's default linker, which is just ld. However, the user
can override this through the CLANG_DEFAULT_LINKER cmake define so that
clang uses another linker by default, such as LLVM's own linker, ld.lld.
This can be useful to get more optimized links across various different
projects.

However, this is problematic for the s390 vDSO because ld.lld does not
have any s390 emulatiom support:

https://github.com/llvm/llvm-project/blob/llvmorg-10.0.1-rc1/lld/ELF/Driver.cpp#L132-L150

Thus, if a user is using a toolchain with ld.lld as the default, they
will see an error, even if they have specified ld.bfd through the LD
make variable:

$ make -j"$(nproc)" -s ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- LLVM=1 \
                       LD=s390x-linux-gnu-ld \
                       defconfig arch/s390/kernel/vdso64/
ld.lld: error: unknown emulation: elf64_s390
clang-11: error: linker command failed with exit code 1 (use -v to see invocation)

Normally, '-fuse-ld=bfd' could be used to get around this; however, this
can be fragile, depending on paths and variable naming. The cleaner
solution for the kernel is to take advantage of the fact that $(LD) can
be invoked directly, which bypasses the heuristics of $(CC) and respects
the user's choice. Similar changes have been done for ARM, ARM64, and
MIPS.

Link: https://lkml.kernel.org/r/20200602192523.32758-1-natechancellor@gmail.com
Link: https://github.com/ClangBuiltLinux/linux/issues/1041
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
[heiko.carstens@de.ibm.com: add --build-id flag]
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
2020-06-16 13:44:05 +02:00
..
syscalls vfs: add faccessat2 syscall 2020-05-14 16:44:25 +02:00
vdso64 s390/vdso: Use $(LD) instead of $(CC) to link vDSO 2020-06-16 13:44:05 +02:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
Makefile s390: ptrace: hard-code "s390x" instead of UTS_MACHINE 2020-05-06 14:59:20 +02:00
alternative.c s390: add automatic detection of the spectre defense 2018-03-28 08:38:24 +02:00
asm-offsets.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
audit.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
base.S s390/base: remove unused s390_base_mcck_handler 2019-09-03 13:53:56 +02:00
cache.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_linux.c s390: use generic UID16 implementation 2019-01-18 09:33:18 +01:00
compat_linux.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_ptrace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_signal.c signal: Remove task parameter from force_sig 2019-05-27 09:36:28 -05:00
cpcmd.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
crash_dump.c memblock: memblock_phys_alloc(): don't panic 2019-03-12 10:04:01 -07:00
debug.c sysctl: pass kernel pointers to ->proc_handler 2020-04-27 02:07:40 -04:00
diag.c s390/ftrace: fix potential crashes when switching tracers 2020-04-22 16:20:55 +02:00
dis.c s390/disassembler: don't hide instruction addresses 2019-11-12 11:24:10 +01:00
dumpstack.c kernel: rename show_stack_loglvl() => show_stack() 2020-06-09 09:39:13 -07:00
early.c s390: remove last diag 0x44 caller 2019-12-11 19:53:24 +01:00
early_printk.c s390/sclp: avoid using strncmp with hardcoded length 2019-08-29 15:34:58 +02:00
ebcdic.c s390: ebcdic: convert comments to UTF-8 2018-08-23 18:48:43 -07:00
entry.S s390/ptrace: pass invalid syscall numbers to tracing 2020-06-16 13:44:04 +02:00
entry.h s390/mm: add (non)secure page access exceptions handlers 2020-02-27 19:44:40 +01:00
fpu.c s390: correct some inline assembly constraints 2019-04-17 10:40:57 +02:00
ftrace.c s390: Remove two unused inline functions 2020-05-20 10:22:49 +02:00
guarded_storage.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-13 11:47:01 -08:00
head64.S s390/head64: correct init_task stack setup 2019-11-30 10:52:45 +01:00
idle.c s390: remove critical section cleanup from entry.S 2020-05-28 12:21:54 +02:00
ima_arch.c s390/kexec_file: Disable kexec_load when IPLed secure 2019-04-29 10:44:03 +02:00
ipl.c s390: use scnprintf() in sys_##_prefix##_##_name##_show 2020-06-16 13:44:05 +02:00
ipl_vmparm.c s390/ipl: provide uapi header for list directed IPL 2019-04-26 12:34:05 +02:00
irq.c s390/irq: make init_ext_interrupts static 2020-03-11 14:18:44 +01:00
jump_label.c s390/jump_label: remove unused structure definition 2019-06-07 10:10:10 +02:00
kdebugfs.c s390: no need to check return value of debugfs_create functions 2019-01-28 15:58:55 +01:00
kexec_elf.c kexec: Fix file verification on S390 2019-09-10 13:27:51 +01:00
kexec_image.c kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE 2019-08-19 21:54:15 -07:00
kprobes.c s390: support KPROBES_ON_FTRACE 2020-01-30 13:07:55 +01:00
lgr.c s390: kernel: add SPDX identifiers to the remaining files 2017-11-24 15:37:12 +01:00
machine_kexec.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
machine_kexec_file.c s390/kexec_file: fix initrd location for kdump kernel 2020-05-14 23:21:37 +02:00
machine_kexec_reloc.c s390/kaslr: add support for R_390_JMP_SLOT relocation type 2020-05-20 10:13:27 +02:00
mcount.S s390: support KPROBES_ON_FTRACE 2020-01-30 13:07:55 +01:00
module.c s390/module: Use s390_kernel_write() for late relocations 2020-05-08 00:12:43 +02:00
nmi.c s390: remove critical section cleanup from entry.S 2020-05-28 12:21:54 +02:00
nospec-branch.c s390 updates for the 5.2 merge window 2019-05-06 16:42:54 -07:00
nospec-sysfs.c s390: Convert IS_ENABLED uses to __is_defined 2019-04-11 13:36:53 +02:00
os_info.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf_cpum_cf.c s390/cpumf: Adjust registration of s390 PMU device drivers 2019-11-20 17:16:01 +01:00
perf_cpum_cf_common.c s390/cpum_cf: move common functions into a separate file 2019-02-22 09:19:55 +01:00
perf_cpum_cf_diag.c s390/cpumf: Adjust registration of s390 PMU device drivers 2019-11-20 17:16:01 +01:00
perf_cpum_cf_events.c s390/cpum_cf: Add new extended counters for IBM z15 2020-03-10 15:16:25 +01:00
perf_cpum_sf.c s390/cpum_sf: Fix wrong page count in error message 2020-03-25 12:39:37 +01:00
perf_event.c s390: add error handling to perf_callchain_kernel 2019-10-31 17:20:54 +01:00
perf_regs.c s390/perf: fix gcc 8 array-bounds warning 2018-07-02 11:24:54 +02:00
pgm_check.S s390/mm: add (non)secure page access exceptions handlers 2020-02-27 19:44:40 +01:00
process.c s390: prevent leaking kernel address in BEAR 2020-03-10 15:16:25 +01:00
processor.c s390/cpuinfo: do not skip info for CPUs without MHz feature 2020-03-23 13:41:55 +01:00
ptrace.c s390/ptrace: fix setting syscall number 2020-06-16 13:44:04 +02:00
reipl.S s390: add missing ENDPROC statements to assembler functions 2019-05-02 13:54:11 +02:00
relocate_kernel.S s390: add missing ENDPROC statements to assembler functions 2019-05-02 13:54:11 +02:00
runtime_instr.c s390/runtime_instrumentation: re-add signum system call parameter 2018-02-05 07:34:50 +01:00
setup.c s390 updates for the 5.8 merge window 2020-06-08 12:05:31 -07:00
signal.c s390: use fallthrough; 2020-03-25 12:39:37 +01:00
smp.c s390 updates for the 5.8 merge window 2020-06-08 12:05:31 -07:00
stacktrace.c s390/livepatch: Implement reliable stack tracing for the consistency model 2019-11-30 10:52:48 +01:00
sthyi.c s390/sthyi: Fix machine name validity indication 2018-10-15 12:17:00 +02:00
sys_s390.c s390: autogenerate compat syscall wrappers 2019-01-18 09:33:19 +01:00
sysinfo.c s390: no need to check return value of debugfs_create functions 2019-01-28 15:58:55 +01:00
time.c s390/time: remove monotonic_clock() 2019-10-31 17:20:52 +01:00
topology.c sysctl: pass kernel pointers to ->proc_handler 2020-04-27 02:07:40 -04:00
trace.c s390/ftrace: fix potential crashes when switching tracers 2020-04-22 16:20:55 +02:00
traps.c s390/traps: mark test_monitor_call __init 2020-03-11 14:18:44 +01:00
unwind_bc.c s390/unwind: stop gracefully at user mode pt_regs in irq stack 2019-12-18 23:29:26 +01:00
uprobes.c s390/uprobes: implement arch_uretprobe_is_alive() 2018-04-23 07:57:16 +02:00
uv.c s390/protvirt: use scnprintf() instead of snprintf() 2020-06-16 13:44:05 +02:00
vdso.c mmap locking API: use coccinelle to convert mmap_sem rwsem call sites 2020-06-09 09:39:14 -07:00
vmlinux.lds.S vmlinux.lds.h: Replace RW_DATA_SECTION with RW_DATA 2019-11-04 15:57:41 +01:00
vtime.c sched/cputime: Rename vtime_account_system() to vtime_account_kernel() 2019-10-09 12:39:25 +02:00