Nathan Chancellor reported several link errors on s390 with
CONFIG_RELOCATABLE disabled, after binutils commit 
906f69cf65da ("IBM
zSystems: Issue error for *DBL relocs on misaligned symbols"). The binutils
commit reveals potential miscompiles that might have happened already
before with linker script defined symbols at odd addresses.
A similar bug was recently fixed in the kernel with commit 
c9305b6c1f52
("s390: fix nospec table alignments").
See https://github.com/ClangBuiltLinux/linux/issues/1747 for an analysis
from Ulich Weigand.
Therefore always build a relocatable kernel to avoid this problem. There is
hardly any use-case for non-relocatable kernels, so this shouldn't be
controversial.
Link: https://github.com/ClangBuiltLinux/linux/issues/1747
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Reported-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/r/20221030182202.2062705-1-hca@linux.ibm.com
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
 endchoice
 
 config RELOCATABLE
-       bool "Build a relocatable kernel"
-       default y
+       def_bool y
        help
          This builds a kernel image that retains relocation information
          so it can be loaded at an arbitrary address.
          bootup process.
          The relocations make the kernel image about 15% larger (compressed
          10%), but are discarded at runtime.
+         Note: this option exists only for documentation purposes, please do
+         not remove it.
 
 config RANDOMIZE_BASE
        bool "Randomize the address of the kernel image (KASLR)"
-       depends on RELOCATABLE
        default y
        help
          In support of Kernel Address Space Layout Randomization (KASLR),
 
 KBUILD_CFLAGS_MODULE += -fPIC
 KBUILD_AFLAGS  += -m64
 KBUILD_CFLAGS  += -m64
-ifeq ($(CONFIG_RELOCATABLE),y)
 KBUILD_CFLAGS  += -fPIE
 LDFLAGS_vmlinux        := -pie
-endif
 aflags_dwarf   := -Wa,-gdwarf-2
 KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
 ifndef CONFIG_AS_IS_LLVM
 
 
 obj-y  := head.o als.o startup.o mem_detect.o ipl_parm.o ipl_report.o
 obj-y  += string.o ebcdic.o sclp_early_core.o mem.o ipl_vmparm.o cmdline.o
-obj-y  += version.o pgm_check_info.o ctype.o ipl_data.o
+obj-y  += version.o pgm_check_info.o ctype.o ipl_data.o machine_kexec_reloc.o
 obj-$(findstring y, $(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) $(CONFIG_PGSTE))  += uv.o
-obj-$(CONFIG_RELOCATABLE)      += machine_kexec_reloc.o
 obj-$(CONFIG_RANDOMIZE_BASE)   += kaslr.o
 obj-y  += $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o
 obj-$(CONFIG_KERNEL_ZSTD) += clz_ctz.o
 
 
        clear_bss_section();
        copy_bootdata();
-       if (IS_ENABLED(CONFIG_RELOCATABLE))
-               handle_relocs(__kaslr_offset);
+       handle_relocs(__kaslr_offset);
 
        if (__kaslr_offset) {
                /*