]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
s390/boot: simplify GOT handling
authorAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 21 Feb 2024 10:51:55 +0000 (11:51 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 26 Feb 2024 09:25:09 +0000 (10:25 +0100)
The end of GOT is calculated dynamically on boot. The size of GOT
is calculated on build from the start and end of GOT. Avoid both
calculations and use the end of GOT directly.

Acked-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/boot/boot.h
arch/s390/boot/startup.c
arch/s390/kernel/vmlinux.lds.S

index 8943d5be7ca288059e3ea1d394f9164aa60f2008..cebf9feba6b1c477c0321f6bafcd368c6967dbcb 100644 (file)
@@ -30,8 +30,8 @@ struct vmlinux_info {
        unsigned long rela_dyn_start;
        unsigned long rela_dyn_end;
 #else
-       unsigned long got_off;
-       unsigned long got_size;
+       unsigned long got_start;
+       unsigned long got_end;
 #endif
        unsigned long amode31_size;
        unsigned long init_mm_off;
index cb0d89801c43a90f7ef668c537ef32b4c4dec7d4..c1a758921b7a12128031c21f3a43ec759406db5a 100644 (file)
@@ -221,11 +221,8 @@ static void kaslr_adjust_got(unsigned long offset)
         * Even without -fPIE, Clang still uses a global offset table for some
         * reason.  Adjust the GOT entries.
         */
-       for (entry = (u64 *)vmlinux.got_off;
-            entry < (u64 *)(vmlinux.got_off + vmlinux.got_size);
-            entry++) {
+       for (entry = (u64 *)vmlinux.got_start; entry < (u64 *)vmlinux.got_end; entry++)
                *entry += offset;
-       }
 }
 #endif
 
@@ -366,7 +363,8 @@ static void kaslr_adjust_vmlinux_info(unsigned long offset)
        vmlinux.rela_dyn_end += offset;
        vmlinux.dynsym_start += offset;
 #else
-       vmlinux.got_off += offset;
+       vmlinux.got_start += offset;
+       vmlinux.got_end += offset;
 #endif
        vmlinux.init_mm_off += offset;
        vmlinux.swapper_pg_dir_off += offset;
index 9c59715d17456a77bd14ac882791f66d3c1cef5c..48de296e8905c1bef0ad7059aa92666656adc8b1 100644 (file)
@@ -244,8 +244,8 @@ SECTIONS
                QUAD(__rela_dyn_start)                          /* rela_dyn_start */
                QUAD(__rela_dyn_end)                            /* rela_dyn_end */
 #else
-               QUAD(__got_start)                               /* got_off */
-               QUAD(__got_end - __got_start)                   /* got_size */
+               QUAD(__got_start)                               /* got_start */
+               QUAD(__got_end)                                 /* got_end */
 #endif
                QUAD(_eamode31 - _samode31)                     /* amode31_size */
                QUAD(init_mm)