]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
kbuild: -ffunction-sections fix for archs with conflicting sections
authorNicholas Piggin <npiggin@gmail.com>
Wed, 14 Sep 2016 02:24:03 +0000 (12:24 +1000)
committerMichal Marek <mmarek@suse.com>
Thu, 22 Sep 2016 12:37:14 +0000 (14:37 +0200)
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: Guenter Roeck <linux@roeck-us.net>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Fixes: b67067f1176d ("kbuild: allow archs to select link dead code/data elimination")
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michal Marek <mmarek@suse.com>
arch/Kconfig
include/asm-generic/vmlinux.lds.h

index 3f948c422d9d141782ad65a3440ce6ea512bf02d..48d1e76a1ee3c40c63d80efd69f59ae6a34d1caf 100644 (file)
@@ -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
index ad9d8f94dc7a949cf9309d61afe4cd5f2d17fcf9..48dd44f3f24bc8719e4da6c1a1dbed4b4af1d456 100644 (file)
 
 /*
  * .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_]*)                                    \
        }
 
 /* .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)                                             \