Note: this option exists only for documentation purposes, please do
          not remove it.
 
-config PIE_BUILD
-       def_bool CC_IS_CLANG && !$(cc-option,-munaligned-symbols)
-       help
-         If the compiler is unable to generate code that can manage unaligned
-         symbols, the kernel is linked as a position-independent executable
-         (PIE) and includes dynamic relocations that are processed early
-         during bootup.
-
-         For kpatch functionality, it is recommended to build the kernel
-         without the PIE_BUILD option. PIE_BUILD is only enabled when the
-         compiler lacks proper support for handling unaligned symbols.
-
 config RANDOMIZE_BASE
        bool "Randomize the address of the kernel image (KASLR)"
        default y
 
 KBUILD_CFLAGS_MODULE += -fPIC
 KBUILD_AFLAGS  += -m64
 KBUILD_CFLAGS  += -m64
-ifdef CONFIG_PIE_BUILD
-KBUILD_CFLAGS  += -fPIE
-LDFLAGS_vmlinux        := -pie -z notext
-else
-KBUILD_CFLAGS  += $(call cc-option,-munaligned-symbols,)
-LDFLAGS_vmlinux        := --emit-relocs --discard-none
+KBUILD_CFLAGS  += -fPIC
+LDFLAGS_vmlinux        := -no-pie --emit-relocs --discard-none
 extra_tools    := relocs
-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 physmem_info.o ipl_parm.o ipl_report.o vmem.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  += $(if $(CONFIG_PIE_BUILD),machine_kexec_reloc.o,relocs.o)
+obj-y  += version.o pgm_check_info.o ctype.o ipl_data.o relocs.o
 obj-$(findstring y, $(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) $(CONFIG_PGSTE))  += uv.o
 obj-$(CONFIG_RANDOMIZE_BASE)   += kaslr.o
 obj-y  += $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o
 targets        += vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2
 targets += vmlinux.bin.xz vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.lz4
 targets += vmlinux.bin.zst info.bin syms.bin vmlinux.syms $(obj-all)
-ifndef CONFIG_PIE_BUILD
 targets += relocs.S
-endif
 
 OBJECTS := $(addprefix $(obj)/,$(obj-y))
 OBJECTS_ALL := $(addprefix $(obj)/,$(obj-all))
 $(obj)/vmlinux.bin: vmlinux FORCE
        $(call if_changed,objcopy)
 
-ifndef CONFIG_PIE_BUILD
 CMD_RELOCS=arch/s390/tools/relocs
 quiet_cmd_relocs = RELOCS  $@
        cmd_relocs = $(CMD_RELOCS) $< > $@
 $(obj)/relocs.S: vmlinux FORCE
        $(call if_changed,relocs)
-endif
 
 suffix-$(CONFIG_KERNEL_GZIP)  := .gz
 suffix-$(CONFIG_KERNEL_BZIP2) := .bz2
 
        unsigned long bootdata_size;
        unsigned long bootdata_preserved_off;
        unsigned long bootdata_preserved_size;
-#ifdef CONFIG_PIE_BUILD
-       unsigned long dynsym_start;
-       unsigned long rela_dyn_start;
-       unsigned long rela_dyn_end;
-#else
        unsigned long got_start;
        unsigned long got_end;
-#endif
        unsigned long amode31_size;
        unsigned long init_mm_off;
        unsigned long swapper_pg_dir_off;
 
        memcpy((void *)vmlinux.bootdata_preserved_off, __boot_data_preserved_start, vmlinux.bootdata_preserved_size);
 }
 
-#ifdef CONFIG_PIE_BUILD
-static void kaslr_adjust_relocs(unsigned long min_addr, unsigned long max_addr,
-                               unsigned long offset, unsigned long phys_offset)
-{
-       Elf64_Rela *rela_start, *rela_end, *rela;
-       int r_type, r_sym, rc;
-       Elf64_Addr loc, val;
-       Elf64_Sym *dynsym;
-
-       rela_start = (Elf64_Rela *) vmlinux.rela_dyn_start;
-       rela_end = (Elf64_Rela *) vmlinux.rela_dyn_end;
-       dynsym = (Elf64_Sym *) vmlinux.dynsym_start;
-       for (rela = rela_start; rela < rela_end; rela++) {
-               loc = rela->r_offset + phys_offset - __START_KERNEL;
-               val = rela->r_addend;
-               r_sym = ELF64_R_SYM(rela->r_info);
-               if (r_sym) {
-                       if (dynsym[r_sym].st_shndx != SHN_UNDEF)
-                               val += dynsym[r_sym].st_value + offset - __START_KERNEL;
-               } else {
-                       /*
-                        * 0 == undefined symbol table index (SHN_UNDEF),
-                        * used for R_390_RELATIVE, only add KASLR offset
-                        */
-                       val += offset - __START_KERNEL;
-               }
-               r_type = ELF64_R_TYPE(rela->r_info);
-               rc = arch_kexec_do_relocs(r_type, (void *) loc, val, 0);
-               if (rc)
-                       error("Unknown relocation type");
-       }
-}
-
-static void kaslr_adjust_got(unsigned long offset) {}
-#else
 static void kaslr_adjust_relocs(unsigned long min_addr, unsigned long max_addr,
                                unsigned long offset, unsigned long phys_offset)
 {
        for (entry = (u64 *)vmlinux.got_start; entry < (u64 *)vmlinux.got_end; entry++)
                *entry += offset - __START_KERNEL;
 }
-#endif
 
 /*
  * Merge information from several sources into a single ident_map_size value.
 {
        vmlinux.bootdata_off += offset;
        vmlinux.bootdata_preserved_off += offset;
-#ifdef CONFIG_PIE_BUILD
-       vmlinux.rela_dyn_start += offset;
-       vmlinux.rela_dyn_end += offset;
-       vmlinux.dynsym_start += offset;
-#else
        vmlinux.got_start += offset;
        vmlinux.got_end += offset;
-#endif
        vmlinux.init_mm_off += offset;
        vmlinux.swapper_pg_dir_off += offset;
        vmlinux.invalid_pg_dir_off += offset;
 
 
        _decompressor_end = .;
 
-#ifndef CONFIG_PIE_BUILD
        . = ALIGN(4);
        .vmlinux.relocs : {
                __vmlinux_relocs_64_start = .;
                *(.vmlinux.relocs_64)
                __vmlinux_relocs_64_end = .;
        }
-#endif
 
 #ifdef CONFIG_KERNEL_UNCOMPRESSED
        . = ALIGN(PAGE_SIZE);
 
 
        PERCPU_SECTION(0x100)
 
-#ifdef CONFIG_PIE_BUILD
-       .dynsym ALIGN(8) : {
-               __dynsym_start = .;
-               *(.dynsym)
-               __dynsym_end = .;
-       }
-       .rela.dyn ALIGN(8) : {
-               __rela_dyn_start = .;
-               *(.rela*)
-               __rela_dyn_end = .;
-       }
-       .dynamic ALIGN(8) : {
-               *(.dynamic)
-       }
-       .dynstr ALIGN(8) : {
-               *(.dynstr)
-       }
-       .hash ALIGN(8) : {
-               *(.hash)
-       }
-       .gnu.hash ALIGN(8) : {
-               *(.gnu.hash)
-       }
-#endif
-
        . = ALIGN(PAGE_SIZE);
        __init_end = .;         /* freed after init ends here */
 
                QUAD(__boot_data_preserved_start)               /* bootdata_preserved_off */
                QUAD(__boot_data_preserved_end -
                     __boot_data_preserved_start)               /* bootdata_preserved_size */
-#ifdef CONFIG_PIE_BUILD
-               QUAD(__dynsym_start)                            /* dynsym_start */
-               QUAD(__rela_dyn_start)                          /* rela_dyn_start */
-               QUAD(__rela_dyn_end)                            /* rela_dyn_end */
-#else
                QUAD(__got_start)                               /* got_start */
                QUAD(__got_end)                                 /* got_end */
-#endif
                QUAD(_eamode31 - _samode31)                     /* amode31_size */
                QUAD(init_mm)
                QUAD(swapper_pg_dir)
                *(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt)
        }
        ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
-#ifndef CONFIG_PIE_BUILD
        .rela.dyn : {
                *(.rela.*) *(.rela_*)
        }
        ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!")
-#endif
 
        /* Sections to be discarded */
        DISCARDS