OSDN Git Service

FROMLIST: kbuild: fix LD_DEAD_CODE_DATA_ELIMINATION
authorSami Tolvanen <samitolvanen@google.com>
Tue, 10 Oct 2017 17:58:53 +0000 (10:58 -0700)
committer0ranko0P <ranko0p@outlook.com>
Sat, 7 Dec 2019 08:37:12 +0000 (16:37 +0800)
Don't remove .head.text or .exitcall.exit when linking with --gc-sections,
and include .init.text.* in .init.text and .init.rodata.* in .init.rodata.

Bug: 62093296
Bug: 67506682
Change-Id: Ia0f9e735d04c2322dcc8bcfc94241f0551b149c4
(am from https://patchwork.kernel.org/patch/10085773/)
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
include/asm-generic/vmlinux.lds.h

index d021481..fae02bf 100644 (file)
                VMLINUX_SYMBOL(__softirqentry_text_end) = .;
 
 /* Section used for early init (in .S files) */
-#define HEAD_TEXT  *(.head.text)
+#define HEAD_TEXT  KEEP(*(.head.text))
 
 #define HEAD_TEXT_SECTION                                                      \
        .head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {               \
        MEM_DISCARD(init.data)                                          \
        KERNEL_CTORS()                                                  \
        MCOUNT_REC()                                                    \
-       *(.init.rodata)                                                 \
+       *(.init.rodata .init.rodata.*)                                  \
        FTRACE_EVENTS()                                                 \
        TRACE_SYSCALLS()                                                \
        KPROBE_BLACKLIST()                                              \
        EARLYCON_TABLE()
 
 #define INIT_TEXT                                                      \
-       *(.init.text)                                                   \
+       *(.init.text .init.text.*)                                      \
        *(.text.startup)                                                \
        MEM_DISCARD(init.text)
 
        MEM_DISCARD(exit.text)
 
 #define EXIT_CALL                                                      \
-       *(.exitcall.exit)
+       KEEP(*(.exitcall.exit))
 
 /*
  * bss (Block Started by Symbol) - uninitialized data