summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-08-08 14:22:04 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-08-08 14:22:04 +0000
commitba38e0585024837bc59c618bdd2adfd42d2d9af8 (patch)
treedf21f6ee4ec1fd3d2c7111ab593dc88dc72a16cc /include
parent321577a2dbf5941ff44fa72bdd6a7268c5539b21 (diff)
add an optional config option for stripping all unnecessary symbol exports from the kernel image
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@17181 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'include')
-rw-r--r--include/kernel-build.mk24
-rw-r--r--include/kernel-defaults.mk5
2 files changed, 28 insertions, 1 deletions
diff --git a/include/kernel-build.mk b/include/kernel-build.mk
index d48f8b9f5..e3e446ba5 100644
--- a/include/kernel-build.mk
+++ b/include/kernel-build.mk
@@ -54,6 +54,28 @@ define BuildKernel
$(Kernel/Prepare)
touch $$@
+ $(KERNEL_BUILD_DIR)/symtab.txt: FORCE
+ find $(LINUX_DIR) $(STAGING_DIR_ROOT)/lib/modules -name \*.ko | \
+ xargs $(TARGET_CROSS)nm | \
+ awk '$$$$1 == "U" { print $$$$2 } ' | \
+ sort -u > $$@
+
+ $(KERNEL_BUILD_DIR)/symtab.h: $(KERNEL_BUILD_DIR)/symtab.txt
+ ( \
+ echo '#define SYMTAB_KEEP \'; \
+ cat $(KERNEL_BUILD_DIR)/symtab.txt | \
+ awk '{print "*(__ksymtab." $$$$1 ") \\" }'; \
+ echo; \
+ echo '#define SYMTAB_KEEP_GPL \'; \
+ cat $(KERNEL_BUILD_DIR)/symtab.txt | \
+ awk '{print "*(__ksymtab_gpl." $$$$1 ") \\" }'; \
+ echo; \
+ echo '#define SYMTAB_KEEP_STR \'; \
+ cat $(KERNEL_BUILD_DIR)/symtab.txt | \
+ awk '{print "*(__ksymtab_strings." $$$$1 ") \\" }'; \
+ echo; \
+ ) > $$@
+
$(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_CONFIG) $(GENERIC_LINUX_CONFIG) $(TOPDIR)/.config
$(Kernel/Configure)
touch $$@
@@ -62,7 +84,7 @@ define BuildKernel
$(Kernel/CompileModules)
touch $$@
- $(LINUX_DIR)/.image: $(STAMP_CONFIGURED) FORCE
+ $(LINUX_DIR)/.image: $(STAMP_CONFIGURED) $(if $(CONFIG_STRIP_KERNEL_EXPORTS),$(KERNEL_BUILD_DIR)/symtab.h) FORCE
$(Kernel/CompileImage)
touch $$@
diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk
index f20555358..0ba1e056a 100644
--- a/include/kernel-defaults.mk
+++ b/include/kernel-defaults.mk
@@ -22,6 +22,11 @@ KERNEL_MAKEOPTS := -C $(LINUX_DIR) \
KBUILD_HAVE_NLS=no \
CONFIG_SHELL="$(BASH)"
+ifdef CONFIG_STRIP_KERNEL_EXPORTS
+ KERNEL_MAKEOPTS += \
+ EXTRA_LDSFLAGS="-I$(KERNEL_BUILD_DIR) -include symtab.h"
+endif
+
INITRAMFS_EXTRA_FILES ?= $(GENERIC_PLATFORM_DIR)/image/initramfs-base-files.txt
ifneq (,$(KERNEL_CC))