Commit 0f4c4af0 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michal Marek

kbuild: -ffunction-sections fix for archs with conflicting sections

Enabling -ffunction-sections modified the generic linker script to
pull .text.* sections into regular TEXT_TEXT section, conflicting
with some architectures. Revert that change and require archs that
enable the option to ensure they have no conflicting section names,
and do the appropriate merging.
Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
Fixes: b67067f1 ("kbuild: allow archs to select link dead code/data elimination")
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichal Marek <mmarek@suse.com>
parent fbe6e37d
...@@ -478,7 +478,9 @@ config LD_DEAD_CODE_DATA_ELIMINATION ...@@ -478,7 +478,9 @@ config LD_DEAD_CODE_DATA_ELIMINATION
This requires that the arch annotates or otherwise protects This requires that the arch annotates or otherwise protects
its external entry points from being discarded. Linker scripts its external entry points from being discarded. Linker scripts
must also merge .text.*, .data.*, and .bss.* correctly into must also merge .text.*, .data.*, and .bss.* correctly into
output sections. output sections. Care must be taken not to pull in unrelated
sections (e.g., '.text.init'). Typically '.' in section names
is used to distinguish them from label names / C identifiers.
config HAVE_CONTEXT_TRACKING config HAVE_CONTEXT_TRACKING
bool bool
......
...@@ -198,9 +198,9 @@ ...@@ -198,9 +198,9 @@
/* /*
* .data section * .data section
* -fdata-sections generates .data.identifier which needs to be pulled in * LD_DEAD_CODE_DATA_ELIMINATION option enables -fdata-sections generates
* with .data, but don't want to pull in .data..stuff which has its own * .data.identifier which needs to be pulled in with .data, but don't want to
* requirements. Same for bss. * pull in .data..stuff which has its own requirements. Same for bss.
*/ */
#define DATA_DATA \ #define DATA_DATA \
*(.data .data.[0-9a-zA-Z_]*) \ *(.data .data.[0-9a-zA-Z_]*) \
...@@ -434,10 +434,15 @@ ...@@ -434,10 +434,15 @@
} }
/* .text section. Map to function alignment to avoid address changes /* .text section. Map to function alignment to avoid address changes
* during second ld run in second ld pass when generating System.map */ * during second ld run in second ld pass when generating System.map
* LD_DEAD_CODE_DATA_ELIMINATION option enables -ffunction-sections generates
* .text.identifier which needs to be pulled in with .text , but some
* architectures define .text.foo which is not intended to be pulled in here.
* Those enabling LD_DEAD_CODE_DATA_ELIMINATION must ensure they don't have
* conflicting section names, and must pull in .text.[0-9a-zA-Z_]* */
#define TEXT_TEXT \ #define TEXT_TEXT \
ALIGN_FUNCTION(); \ ALIGN_FUNCTION(); \
*(.text.hot .text .text.fixup .text.unlikely .text.*) \ *(.text.hot .text .text.fixup .text.unlikely) \
*(.ref.text) \ *(.ref.text) \
MEM_KEEP(init.text) \ MEM_KEEP(init.text) \
MEM_KEEP(exit.text) \ MEM_KEEP(exit.text) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment