]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/build: move got, toc, plt, branch_lt sections to read-only
authorNicholas Piggin <npiggin@gmail.com>
Fri, 16 Sep 2022 04:07:51 +0000 (14:07 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 26 Sep 2022 10:58:17 +0000 (20:58 +1000)
This moves linker-related tables from .data to read-only area.
Relocations are performed at early boot time before memory is protected,
after which there should be no modifications required.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
[mpe: Don't use SPECIAL as reported by lkp@intel.com]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220916040755.2398112-4-npiggin@gmail.com
arch/powerpc/kernel/vmlinux.lds.S

index a922c348b4f750a889eeabaf856d54ce75c92817..0bacec66fecf88d2567c2a965a76fe444d9a671d 100644 (file)
@@ -135,6 +135,10 @@ SECTIONS
        /* Read-only data */
        RO_DATA(PAGE_SIZE)
 
+       .branch_lt : AT(ADDR(.branch_lt) - LOAD_OFFSET) {
+               *(.branch_lt)
+       }
+
 #ifdef CONFIG_PPC32
        .got1 : AT(ADDR(.got1) - LOAD_OFFSET) {
                *(.got1)
@@ -144,7 +148,25 @@ SECTIONS
                *(.got2)
                __got2_end = .;
        }
+       .got : AT(ADDR(.got) - LOAD_OFFSET) {
+               *(.got)
+               *(.got.plt)
+       }
+       .plt : AT(ADDR(.plt) - LOAD_OFFSET) {
+               /* XXX: is .plt (and .got.plt) required? */
+               *(.plt)
+       }
+
 #else /* CONFIG_PPC32 */
+       .toc1 : AT(ADDR(.toc1) - LOAD_OFFSET) {
+               *(.toc1)
+       }
+
+       .got : AT(ADDR(.got) - LOAD_OFFSET) ALIGN(256) {
+               *(.got)
+               *(.toc)
+       }
+
        SOFT_MASK_TABLE(8)
        RESTART_TABLE(8)
 
@@ -333,21 +355,11 @@ SECTIONS
                *(.data.rel*)
                *(SDATA_MAIN)
                *(.sdata2)
-               *(.got.plt) *(.got)
-               *(.plt)
-               *(.branch_lt)
        }
 #else
        .data : AT(ADDR(.data) - LOAD_OFFSET) {
                DATA_DATA
                *(.data.rel*)
-               *(.toc1)
-               *(.branch_lt)
-       }
-
-       .got : AT(ADDR(.got) - LOAD_OFFSET) ALIGN(256) {
-               *(.got)
-               *(.toc)
        }
 #endif