Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -478,7 +478,9 @@ config LD_DEAD_CODE_DATA_ELIMINATION
	  This requires that the arch annotates or otherwise protects
	  its external entry points from being discarded. Linker scripts
	  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
	bool
+10 −5
Original line number Diff line number Diff line
@@ -198,9 +198,9 @@

/*
 * .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.
 * LD_DEAD_CODE_DATA_ELIMINATION option enables -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.[0-9a-zA-Z_]*)					\
@@ -434,10 +434,15 @@
	}

/* .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							\
		ALIGN_FUNCTION();					\
		*(.text.hot .text .text.fixup .text.unlikely .text.*)	\
		*(.text.hot .text .text.fixup .text.unlikely)		\
		*(.ref.text)						\
	MEM_KEEP(init.text)						\
	MEM_KEEP(exit.text)						\