diff options
Diffstat (limited to 'pkgs/patches-linux-5.15/221-module_exports.patch')
| -rw-r--r-- | pkgs/patches-linux-5.15/221-module_exports.patch | 126 | 
1 files changed, 126 insertions, 0 deletions
diff --git a/pkgs/patches-linux-5.15/221-module_exports.patch b/pkgs/patches-linux-5.15/221-module_exports.patch new file mode 100644 index 0000000..204027d --- /dev/null +++ b/pkgs/patches-linux-5.15/221-module_exports.patch @@ -0,0 +1,126 @@ +From b14784e7883390c20ed3ff904892255404a5914b Mon Sep 17 00:00:00 2001 +From: Felix Fietkau <nbd@nbd.name> +Date: Fri, 7 Jul 2017 17:05:53 +0200 +Subject: add an optional config option for stripping all unnecessary symbol exports from the kernel image + +lede-commit: bb5a40c64b7c4f4848509fa0a6625055fc9e66cc +Signed-off-by: Felix Fietkau <nbd@nbd.name> +--- + include/asm-generic/vmlinux.lds.h | 18 +++++++++++++++--- + include/linux/export.h            |  9 ++++++++- + scripts/Makefile.build            |  2 +- + 3 files changed, 24 insertions(+), 5 deletions(-) + +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -81,6 +81,16 @@ + #define RO_EXCEPTION_TABLE + #endif +  ++#ifndef SYMTAB_KEEP ++#define SYMTAB_KEEP KEEP(*(SORT(___ksymtab+*))) ++#define SYMTAB_KEEP_GPL KEEP(*(SORT(___ksymtab_gpl+*))) ++#endif ++ ++#ifndef SYMTAB_DISCARD ++#define SYMTAB_DISCARD ++#define SYMTAB_DISCARD_GPL ++#endif ++ + /* Align . to a 8 byte boundary equals to maximum function alignment. */ + #define ALIGN_FUNCTION()  . = ALIGN(8) +  +@@ -484,14 +494,14 @@ + 	/* Kernel symbol table: Normal symbols */			\ + 	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\ + 		__start___ksymtab = .;					\ +-		KEEP(*(SORT(___ksymtab+*)))				\ ++		SYMTAB_KEEP						\ + 		__stop___ksymtab = .;					\ + 	}								\ + 									\ + 	/* Kernel symbol table: GPL-only symbols */			\ + 	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\ + 		__start___ksymtab_gpl = .;				\ +-		KEEP(*(SORT(___ksymtab_gpl+*)))				\ ++		SYMTAB_KEEP_GPL						\ + 		__stop___ksymtab_gpl = .;				\ + 	}								\ + 									\ +@@ -511,7 +521,7 @@ + 									\ + 	/* Kernel symbol table: strings */				\ +         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\ +-		*(__ksymtab_strings)					\ ++		*(__ksymtab_strings+*)					\ + 	}								\ + 									\ + 	/* __*init sections */						\ +@@ -1018,6 +1028,8 @@ +  + #define COMMON_DISCARDS							\ + 	SANITIZER_DISCARDS						\ ++	SYMTAB_DISCARD							\ ++	SYMTAB_DISCARD_GPL						\ + 	*(.discard)							\ + 	*(.discard.*)							\ + 	*(.modinfo)							\ +--- a/include/linux/export.h ++++ b/include/linux/export.h +@@ -84,6 +84,12 @@ struct kernel_symbol { +  + #else +  ++#ifdef MODULE ++#define __EXPORT_SUFFIX(sym) ++#else ++#define __EXPORT_SUFFIX(sym) "+" #sym ++#endif ++ + /* +  * For every exported symbol, do the following: +  * +@@ -101,7 +107,7 @@ struct kernel_symbol { + 	extern const char __kstrtab_##sym[];					\ + 	extern const char __kstrtabns_##sym[];					\ + 	__CRC_SYMBOL(sym, sec);							\ +-	asm("	.section \"__ksymtab_strings\",\"aMS\",%progbits,1	\n"	\ ++	asm("	.section \"__ksymtab_strings" __EXPORT_SUFFIX(sym) "\",\"aMS\",%progbits,1	\n"	\ + 	    "__kstrtab_" #sym ":					\n"	\ + 	    "	.asciz 	\"" #sym "\"					\n"	\ + 	    "__kstrtabns_" #sym ":					\n"	\ +--- a/include/asm-generic/export.h ++++ b/include/asm-generic/export.h +@@ -26,6 +26,12 @@ + #endif + .endm +  ++#ifdef MODULE ++#define __EXPORT_SUFFIX(name) ++#else ++#define __EXPORT_SUFFIX(name) + #name ++#endif ++ + /* +  * note on .section use: we specify progbits since usage of the "M" (SHF_MERGE) +  * section flag requires it. Use '%progbits' instead of '@progbits' since the +@@ -39,7 +45,7 @@ + __ksymtab_\name: + 	__put \val, __kstrtab_\name + 	.previous +-	.section __ksymtab_strings,"aMS",%progbits,1 ++	.section __ksymtab_strings __EXPORT_SUFFIX(name),"aMS",%progbits,1 + __kstrtab_\name: + 	.asciz "\name" + 	.previous +--- a/scripts/Makefile.build ++++ b/scripts/Makefile.build +@@ -397,7 +397,7 @@ targets += $(real-dtb-y) $(lib-y) $(alwa + # Linker scripts preprocessor (.lds.S -> .lds) + # --------------------------------------------------------------------------- + quiet_cmd_cpp_lds_S = LDS     $@ +-      cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(ARCH) \ ++      cmd_cpp_lds_S = $(CPP) $(EXTRA_LDSFLAGS) $(cpp_flags) -P -U$(ARCH) \ + 	                     -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< +  + $(obj)/%.lds: $(src)/%.lds.S FORCE  | 
