--- /dev/null
+From 3bbd3db86470c701091fb1d67f1fab6621debf50 Mon Sep 17 00:00:00 2001
+From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Date: Mon, 3 Dec 2018 20:58:05 +0100
+Subject: arm64: relocatable: fix inconsistencies in linker script and options
+
+From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+
+commit 3bbd3db86470c701091fb1d67f1fab6621debf50 upstream.
+
+readelf complains about the section layout of vmlinux when building
+with CONFIG_RELOCATABLE=y (for KASLR):
+
+ readelf: Warning: [21]: Link field (0) should index a symtab section.
+ readelf: Warning: [21]: Info field (0) should index a relocatable section.
+
+Also, it seems that our use of '-pie -shared' is contradictory, and
+thus ambiguous. In general, the way KASLR is wired up at the moment
+is highly tailored to how ld.bfd happens to implement (and conflate)
+PIE executables and shared libraries, so given the current effort to
+support other toolchains, let's fix some of these issues as well.
+
+- Drop the -pie linker argument and just leave -shared. In ld.bfd,
+ the differences between them are unclear (except for the ELF type
+ of the produced image [0]) but lld chokes on seeing both at the
+ same time.
+
+- Rename the .rela output section to .rela.dyn, as is customary for
+ shared libraries and PIE executables, so that it is not misidentified
+ by readelf as a static relocation section (producing the warnings
+ above).
+
+- Pass the -z notext and -z norelro options to explicitly instruct the
+ linker to permit text relocations, and to omit the RELRO program
+ header (which requires a certain section layout that we don't adhere
+ to in the kernel). These are the defaults for current versions of
+ ld.bfd.
+
+- Discard .eh_frame and .gnu.hash sections to avoid them from being
+ emitted between .head.text and .text, screwing up the section layout.
+
+These changes only affect the ELF image, and produce the same binary
+image.
+
+[0] b9dce7f1ba01 ("arm64: kernel: force ET_DYN ELF type for ...")
+
+Cc: Nick Desaulniers <ndesaulniers@google.com>
+Cc: Peter Smith <peter.smith@linaro.org>
+Tested-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm64/Makefile | 2 +-
+ arch/arm64/kernel/vmlinux.lds.S | 9 +++++----
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+--- a/arch/arm64/Makefile
++++ b/arch/arm64/Makefile
+@@ -18,7 +18,7 @@ ifeq ($(CONFIG_RELOCATABLE), y)
+ # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
+ # for relative relocs, since this leads to better Image compression
+ # with the relocation offsets always being zero.
+-LDFLAGS_vmlinux += -pie -shared -Bsymbolic \
++LDFLAGS_vmlinux += -shared -Bsymbolic -z notext -z norelro \
+ $(call ld-option, --no-apply-dynamic-relocs)
+ endif
+
+--- a/arch/arm64/kernel/vmlinux.lds.S
++++ b/arch/arm64/kernel/vmlinux.lds.S
+@@ -99,7 +99,8 @@ SECTIONS
+ *(.discard)
+ *(.discard.*)
+ *(.interp .dynamic)
+- *(.dynsym .dynstr .hash)
++ *(.dynsym .dynstr .hash .gnu.hash)
++ *(.eh_frame)
+ }
+
+ . = KIMAGE_VADDR + TEXT_OFFSET;
+@@ -176,12 +177,12 @@ SECTIONS
+
+ PERCPU_SECTION(L1_CACHE_BYTES)
+
+- .rela : ALIGN(8) {
++ .rela.dyn : ALIGN(8) {
+ *(.rela .rela*)
+ }
+
+- __rela_offset = ABSOLUTE(ADDR(.rela) - KIMAGE_VADDR);
+- __rela_size = SIZEOF(.rela);
++ __rela_offset = ABSOLUTE(ADDR(.rela.dyn) - KIMAGE_VADDR);
++ __rela_size = SIZEOF(.rela.dyn);
+
+ . = ALIGN(SEGMENT_ALIGN);
+ __initdata_end = .;