|
@@ -196,9 +196,14 @@
|
|
|
*(.dtb.init.rodata) \
|
|
|
VMLINUX_SYMBOL(__dtb_end) = .;
|
|
|
|
|
|
-/* .data section */
|
|
|
+/*
|
|
|
+ * .data section
|
|
|
+ * -fdata-sections generates .data.identifier which needs to be pulled in
|
|
|
+ * with .data, but don't want to pull in .data..stuff which has its own
|
|
|
+ * requirements. Same for bss.
|
|
|
+ */
|
|
|
#define DATA_DATA \
|
|
|
- *(.data) \
|
|
|
+ *(.data .data.[0-9a-zA-Z_]*) \
|
|
|
*(.ref.data) \
|
|
|
*(.data..shared_aligned) /* percpu related */ \
|
|
|
MEM_KEEP(init.data) \
|
|
@@ -320,76 +325,76 @@
|
|
|
/* Kernel symbol table: Normal symbols */ \
|
|
|
__ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___ksymtab) = .; \
|
|
|
- *(SORT(___ksymtab+*)) \
|
|
|
+ KEEP(*(SORT(___ksymtab+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___ksymtab) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: GPL-only symbols */ \
|
|
|
__ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \
|
|
|
- *(SORT(___ksymtab_gpl+*)) \
|
|
|
+ KEEP(*(SORT(___ksymtab_gpl+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: Normal unused symbols */ \
|
|
|
__ksymtab_unused : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___ksymtab_unused) = .; \
|
|
|
- *(SORT(___ksymtab_unused+*)) \
|
|
|
+ KEEP(*(SORT(___ksymtab_unused+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___ksymtab_unused) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: GPL-only unused symbols */ \
|
|
|
__ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .; \
|
|
|
- *(SORT(___ksymtab_unused_gpl+*)) \
|
|
|
+ KEEP(*(SORT(___ksymtab_unused_gpl+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: GPL-future-only symbols */ \
|
|
|
__ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .; \
|
|
|
- *(SORT(___ksymtab_gpl_future+*)) \
|
|
|
+ KEEP(*(SORT(___ksymtab_gpl_future+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: Normal symbols */ \
|
|
|
__kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___kcrctab) = .; \
|
|
|
- *(SORT(___kcrctab+*)) \
|
|
|
+ KEEP(*(SORT(___kcrctab+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___kcrctab) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: GPL-only symbols */ \
|
|
|
__kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___kcrctab_gpl) = .; \
|
|
|
- *(SORT(___kcrctab_gpl+*)) \
|
|
|
+ KEEP(*(SORT(___kcrctab_gpl+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: Normal unused symbols */ \
|
|
|
__kcrctab_unused : AT(ADDR(__kcrctab_unused) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___kcrctab_unused) = .; \
|
|
|
- *(SORT(___kcrctab_unused+*)) \
|
|
|
+ KEEP(*(SORT(___kcrctab_unused+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___kcrctab_unused) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: GPL-only unused symbols */ \
|
|
|
__kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = .; \
|
|
|
- *(SORT(___kcrctab_unused_gpl+*)) \
|
|
|
+ KEEP(*(SORT(___kcrctab_unused_gpl+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___kcrctab_unused_gpl) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: GPL-future-only symbols */ \
|
|
|
__kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .; \
|
|
|
- *(SORT(___kcrctab_gpl_future+*)) \
|
|
|
+ KEEP(*(SORT(___kcrctab_gpl_future+*))) \
|
|
|
VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .; \
|
|
|
} \
|
|
|
\
|
|
|
/* Kernel symbol table: strings */ \
|
|
|
__ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \
|
|
|
- *(__ksymtab_strings) \
|
|
|
+ KEEP(*(__ksymtab_strings)) \
|
|
|
} \
|
|
|
\
|
|
|
/* __*init sections */ \
|
|
@@ -424,7 +429,7 @@
|
|
|
#define SECURITY_INIT \
|
|
|
.security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \
|
|
|
VMLINUX_SYMBOL(__security_initcall_start) = .; \
|
|
|
- *(.security_initcall.init) \
|
|
|
+ KEEP(*(.security_initcall.init)) \
|
|
|
VMLINUX_SYMBOL(__security_initcall_end) = .; \
|
|
|
}
|
|
|
|
|
@@ -432,7 +437,7 @@
|
|
|
* during second ld run in second ld pass when generating System.map */
|
|
|
#define TEXT_TEXT \
|
|
|
ALIGN_FUNCTION(); \
|
|
|
- *(.text.hot .text .text.fixup .text.unlikely) \
|
|
|
+ *(.text.hot .text .text.fixup .text.unlikely .text.*) \
|
|
|
*(.ref.text) \
|
|
|
MEM_KEEP(init.text) \
|
|
|
MEM_KEEP(exit.text) \
|
|
@@ -527,6 +532,7 @@
|
|
|
|
|
|
/* init and exit section handling */
|
|
|
#define INIT_DATA \
|
|
|
+ KEEP(*(SORT(___kentry+*))) \
|
|
|
*(.init.data) \
|
|
|
MEM_DISCARD(init.data) \
|
|
|
KERNEL_CTORS() \
|
|
@@ -593,7 +599,7 @@
|
|
|
BSS_FIRST_SECTIONS \
|
|
|
*(.bss..page_aligned) \
|
|
|
*(.dynbss) \
|
|
|
- *(.bss) \
|
|
|
+ *(.bss .bss.[0-9a-zA-Z_]*) \
|
|
|
*(COMMON) \
|
|
|
}
|
|
|
|
|
@@ -676,12 +682,12 @@
|
|
|
|
|
|
#define INIT_CALLS_LEVEL(level) \
|
|
|
VMLINUX_SYMBOL(__initcall##level##_start) = .; \
|
|
|
- *(.initcall##level##.init) \
|
|
|
- *(.initcall##level##s.init) \
|
|
|
+ KEEP(*(.initcall##level##.init)) \
|
|
|
+ KEEP(*(.initcall##level##s.init)) \
|
|
|
|
|
|
#define INIT_CALLS \
|
|
|
VMLINUX_SYMBOL(__initcall_start) = .; \
|
|
|
- *(.initcallearly.init) \
|
|
|
+ KEEP(*(.initcallearly.init)) \
|
|
|
INIT_CALLS_LEVEL(0) \
|
|
|
INIT_CALLS_LEVEL(1) \
|
|
|
INIT_CALLS_LEVEL(2) \
|
|
@@ -695,21 +701,21 @@
|
|
|
|
|
|
#define CON_INITCALL \
|
|
|
VMLINUX_SYMBOL(__con_initcall_start) = .; \
|
|
|
- *(.con_initcall.init) \
|
|
|
+ KEEP(*(.con_initcall.init)) \
|
|
|
VMLINUX_SYMBOL(__con_initcall_end) = .;
|
|
|
|
|
|
#define SECURITY_INITCALL \
|
|
|
VMLINUX_SYMBOL(__security_initcall_start) = .; \
|
|
|
- *(.security_initcall.init) \
|
|
|
+ KEEP(*(.security_initcall.init)) \
|
|
|
VMLINUX_SYMBOL(__security_initcall_end) = .;
|
|
|
|
|
|
#ifdef CONFIG_BLK_DEV_INITRD
|
|
|
#define INIT_RAM_FS \
|
|
|
. = ALIGN(4); \
|
|
|
VMLINUX_SYMBOL(__initramfs_start) = .; \
|
|
|
- *(.init.ramfs) \
|
|
|
+ KEEP(*(.init.ramfs)) \
|
|
|
. = ALIGN(8); \
|
|
|
- *(.init.ramfs.info)
|
|
|
+ KEEP(*(.init.ramfs.info))
|
|
|
#else
|
|
|
#define INIT_RAM_FS
|
|
|
#endif
|