Merge branches 'for-next/kvm-build-fix', 'for-next/va-refactor', 'for-next/lto',...
[platform/kernel/linux-rpi.git] / arch / arm64 / kernel / vmlinux.lds.S
index d52e6b5..94a08e3 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #define RO_EXCEPTION_TABLE_ALIGN       8
+#define RUNTIME_DISCARD_EXIT
 
 #include <asm-generic/vmlinux.lds.h>
 #include <asm/cache.h>
@@ -108,22 +109,19 @@ SECTIONS
         * matching the same input section name.  There is no documented
         * order of matching.
         */
+       DISCARDS
        /DISCARD/ : {
-               EXIT_CALL
-               *(.discard)
-               *(.discard.*)
                *(.interp .dynamic)
                *(.dynsym .dynstr .hash .gnu.hash)
-               *(.eh_frame)
        }
 
-       . = KIMAGE_VADDR + TEXT_OFFSET;
+       . = KIMAGE_VADDR;
 
        .head.text : {
                _text = .;
                HEAD_TEXT
        }
-       .text : {                       /* Real text segment            */
+       .text : ALIGN(SEGMENT_ALIGN) {  /* Real text segment            */
                _stext = .;             /* Text and read-only data      */
                        IRQENTRY_TEXT
                        SOFTIRQENTRY_TEXT
@@ -143,6 +141,14 @@ SECTIONS
                *(.got)                 /* Global offset table          */
        }
 
+       /*
+        * Make sure that the .got.plt is either completely empty or it
+        * contains only the lazy dispatch entries.
+        */
+       .got.plt : { *(.got.plt) }
+       ASSERT(SIZEOF(.got.plt) == 0 || SIZEOF(.got.plt) == 0x18,
+              "Unexpected GOT/PLT entries detected!")
+
        . = ALIGN(SEGMENT_ALIGN);
        _etext = .;                     /* End of text section */
 
@@ -195,7 +201,7 @@ SECTIONS
                INIT_CALLS
                CON_INITCALL
                INIT_RAM_FS
-               *(.init.rodata.* .init.bss)     /* from the EFI stub */
+               *(.init.altinstructions .init.rodata.* .init.bss)       /* from the EFI stub */
        }
        .exit.data : {
                EXIT_DATA
@@ -262,8 +268,22 @@ SECTIONS
        _end = .;
 
        STABS_DEBUG
+       DWARF_DEBUG
+       ELF_DETAILS
 
        HEAD_SYMBOLS
+
+       /*
+        * Sections that should stay zero sized, which is safer to
+        * explicitly check instead of blindly discarding.
+        */
+       .plt : {
+               *(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt)
+       }
+       ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
+
+       .data.rel.ro : { *(.data.rel.ro) }
+       ASSERT(SIZEOF(.data.rel.ro) == 0, "Unexpected RELRO detected!")
 }
 
 #include "image-vars.h"
@@ -287,4 +307,4 @@ ASSERT((__entry_tramp_text_end - __entry_tramp_text_start) == PAGE_SIZE,
 /*
  * If padding is applied before .head.text, virt<->phys conversions will fail.
  */
-ASSERT(_text == (KIMAGE_VADDR + TEXT_OFFSET), "HEAD is misaligned")
+ASSERT(_text == KIMAGE_VADDR, "HEAD is misaligned")