linux: use INSTALL_MOD_STRIP=1 to strip modules
authorAlexey Brodkin <Alexey.Brodkin@synopsys.com>
Mon, 19 Sep 2016 14:12:05 +0000 (17:12 +0300)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Mon, 19 Sep 2016 17:29:02 +0000 (19:29 +0200)
We used to do a special handling of Linux kernel modules when stripping
target binaries because there's some special precious data in modules
that we must keep for them to properly operate. This is for example true
for stack unwinding data etc.

It turned out there're cases when our existing "strip --strip-unneeded"
doesn't work well. For example this removes .debug_frame section used by
Linux on ARC for stack unwinding, refer to [1] and [2] for more details.

Now Linux kernel may strip modules as a part of "modules_install" target
if INSTALL_MOD_STRIP=1 is passed in command line. And so we'll do
allowing kernel decide how to strip modules in the best way.

Still note as of today Linux kernel strips modules uniformly for all
arches with "strip" command, so this commit alone doesn't solve
mentioned problem but it opens a possibility to add later a patch to the
kernel which will strip modules for ARC differently - and that's our
plan for mainline kernel.

[1] https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/issues/86
[2] http://lists.busybox.net/pipermail/buildroot/2016-September/172161.html

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Daniel Mentz <danielmentz@google.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Makefile
linux/linux.mk
package/Makefile.in

index 92feff3123987069f770bb78449fb6007fdbfa72..5e4daefae793986a745a60fbc69c892d0d44a96a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -631,9 +631,6 @@ endif
        rm -rf $(TARGET_DIR)/usr/share/gtk-doc
        -rmdir $(TARGET_DIR)/usr/share 2>/dev/null
        $(STRIP_FIND_CMD) | xargs -0 $(STRIPCMD) 2>/dev/null || true
-       if test -d $(TARGET_DIR)/lib/modules; then \
-               find $(TARGET_DIR)/lib/modules -type f -name '*.ko' -print0 | \
-               xargs -0 -r $(KSTRIPCMD); fi
 
 # See http://sourceware.org/gdb/wiki/FAQ, "GDB does not see any threads
 # besides the one in which crash occurred; or SIGTRAP kills my program when
index 6e41a920a1a0e86d9f5136d91ade58cb3bf547db..5cbb5e5f19a2122af38a69e685643cb8558e98a5 100644 (file)
@@ -384,6 +384,10 @@ define LINUX_INSTALL_IMAGES_CMDS
        $(call LINUX_INSTALL_DTB,$(BINARIES_DIR))
 endef
 
+ifeq ($(BR2_STRIP_strip),y)
+LINUX_MAKE_FLAGS += INSTALL_MOD_STRIP=1
+endif
+
 define LINUX_INSTALL_TARGET_CMDS
        $(LINUX_INSTALL_KERNEL_IMAGE_TO_TARGET)
        # Install modules and remove symbolic links pointing to build
index afd5d3a59b9cad5300e1f23aa9fe92bf2591b6aa..83c9a894e8cf034d09d087a078ec2c7dbe7708c3 100644 (file)
@@ -203,16 +203,13 @@ TARGET_OBJDUMP  = $(TARGET_CROSS)objdump
 
 ifeq ($(BR2_STRIP_strip),y)
 STRIP_STRIP_DEBUG := --strip-debug
-STRIP_STRIP_UNNEEDED := --strip-unneeded
 STRIP_STRIP_ALL := --strip-all
 TARGET_STRIP = $(TARGET_CROSS)strip
 STRIPCMD = $(TARGET_CROSS)strip --remove-section=.comment --remove-section=.note
-KSTRIPCMD = $(STRIPCMD) $(STRIP_STRIP_UNNEEDED)
 endif
 ifeq ($(BR2_STRIP_none),y)
 TARGET_STRIP = true
 STRIPCMD = $(TARGET_STRIP)
-KSTRIPCMD = $(TARGET_STRIP)
 endif
 INSTALL := $(shell which install || type -p install)
 FLEX := $(shell which flex || type -p flex)