]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
riscv: vdso.lds.S: remove hardcoded 0x800 .text start addr
authorJisheng Zhang <jszhang@kernel.org>
Tue, 12 Sep 2023 07:20:15 +0000 (15:20 +0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Sun, 5 Nov 2023 22:15:14 +0000 (14:15 -0800)
I believe the hardcoded 0x800 and related comments come from the long
history VDSO_TEXT_OFFSET in x86 vdso code, but commit 5b9304933730
("x86 vDSO: generate vdso-syms.lds") and commit f6b46ebf904f ("x86
vDSO: new layout") removes the comment and hard coding for x86.

Similar as x86 and other arch, riscv doesn't need the rigid layout
using VDSO_TEXT_OFFSET since it "no longer matters to the kernel".
so we could remove the hard coding now, and removing it brings a
small vdso.so and aligns with other architectures.

Also, having enough separation between data and text is important for
I-cache, so similar as x86, move .note, .eh_frame_hdr, and .eh_frame
between .rodata and .text.

Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Tested-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>
Link: https://lore.kernel.org/r/20230912072015.2424-4-jszhang@kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/kernel/vdso/vdso.lds.S

index 671aa21769bcfbecb0148fb2d5a21e7b356a73bf..cbe2a179331d2511a8b4a26c06383e46131661b1 100644 (file)
@@ -23,12 +23,8 @@ SECTIONS
        .gnu.version_d  : { *(.gnu.version_d) }
        .gnu.version_r  : { *(.gnu.version_r) }
 
-       .note           : { *(.note.*) }                :text   :note
        .dynamic        : { *(.dynamic) }               :text   :dynamic
 
-       .eh_frame_hdr   : { *(.eh_frame_hdr) }          :text   :eh_frame_hdr
-       .eh_frame       : { KEEP (*(.eh_frame)) }       :text
-
        .rodata         : {
                *(.rodata .rodata.* .gnu.linkonce.r.*)
                *(.got.plt) *(.got)
@@ -37,13 +33,16 @@ SECTIONS
                *(.bss .bss.* .gnu.linkonce.b.*)
        }
 
+       .note           : { *(.note.*) }                :text   :note
+
+       .eh_frame_hdr   : { *(.eh_frame_hdr) }          :text   :eh_frame_hdr
+       .eh_frame       : { KEEP (*(.eh_frame)) }       :text
+
        /*
-        * This linker script is used both with -r and with -shared.
-        * For the layouts to match, we need to skip more than enough
-        * space for the dynamic symbol table, etc. If this amount is
-        * insufficient, ld -shared will error; simply increase it here.
+        * Text is well-separated from actual data: there's plenty of
+        * stuff that isn't used at runtime in between.
         */
-       . = 0x800;
+       . = ALIGN(16);
        .text           : { *(.text .text.*) }          :text
 
        . = ALIGN(4);