@@ -114,7 +114,6 @@ SECTIONS
.sbss : { *(.sbss .sbss.*) }
.bss : { *(.bss .bss.*) }
- .bss..stack : { *(.bss) }
__bss_stop = .;
_end = . ;
@@ -1,9 +1,9 @@
SECTIONS {
. = SIZEOF_HEADERS;
- .rodata : { *(.rodata) } :ro
+ .rodata : { *(.rodata) *(.rodata.*) } :ro
.note : { *(.note*) }
. = 0xa0000;
- .data : { *(.data) } :dat
+ .data : { *(.data) *(.data.*) } :dat
/DISCARD/ : { *(*) }
}
PHDRS {
@@ -169,6 +169,7 @@ SECTIONS {
. = ALIGN(4);
_sbss = . ;
*(.bss)
+ *(.bss.*)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
@@ -12,6 +12,7 @@ SECTIONS
.data ALIGN(0x10) :
{
*(.data)
+ *(.data.*)
}
_image_start = ADDR(.data);
_image_size = SIZEOF(.data);
@@ -112,6 +112,7 @@ SECTIONS
}
.bss : {
*(.bss)
+ *(.bss.*)
*(COMMON)
}
__bss_stop = .;
@@ -35,7 +35,7 @@ SECTIONS
*/
. = 0x400;
- .text : { *(.text) } :text =0x90909090
+ .text : { *(.text) *(.text.*) } :text =0x90909090
.note : { *(.note.*) } :text :note
.eh_frame_hdr : { *(.eh_frame_hdr ) } :text :eh_frame_hdr
.eh_frame : {
@@ -42,6 +42,7 @@ SECTIONS
.bss : {
__bss_start = .;
*(.bss)
+ *(.bss.*)
__bss_end = .;
}
@@ -307,6 +307,7 @@ SECTIONS
__bss_start = .;
*(.bss..page_aligned)
*(.bss)
+ *(.bss.*)
. = ALIGN(4);
__bss_stop = .;
}
@@ -146,9 +146,22 @@
#define TRACE_SYSCALLS()
#endif
+/* .data.foo are generated by gcc itself with -fdata-sections,
+ * whereas double-dot sections (like .data..percpu) are generated
+ * by kernel's magic macros.
+ *
+ * arch/.../vmlinux.lds.S decides where to place various double-dot sections
+ * as needed by its arch, here DATA_DATA needs to be careful and collect
+ * only .data and .data.foo sections, skipping .data..foo
+ *
+ * Same goes for .text, .bss and .rodata. In case of .rodata, various
+ * .rodata.foo sections are generated by gcc even without -fdata-sections
+ */
+
/* .data section */
#define DATA_DATA \
*(.data) \
+ *(.data.[A-Za-z0-9_$^]*) \
*(.ref.data) \
DEV_KEEP(init.data) \
DEV_KEEP(exit.data) \
@@ -212,7 +225,8 @@
. = ALIGN((align)); \
.rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__start_rodata) = .; \
- *(.rodata) *(.rodata.*) \
+ *(.rodata) \
+ *(.rodata.[A-Za-z0-9_$^]*) \
*(__vermagic) /* Kernel version magic */ \
*(__markers_strings) /* Markers: strings */ \
*(__tracepoints_strings)/* Tracepoints: strings */ \
@@ -379,6 +393,7 @@
ALIGN_FUNCTION(); \
*(.text.hot) \
*(.text) \
+ *(.text.[A-Za-z0-9_$^]*) \
*(.ref.text) \
DEV_KEEP(init.text) \
DEV_KEEP(exit.text) \
@@ -512,6 +527,7 @@
*(.bss..page_aligned) \
*(.dynbss) \
*(.bss) \
+ *(.bss.[A-Za-z0-9_$^]*) \
*(COMMON) \
}