diff options
Diffstat (limited to 'target/linux')
| -rw-r--r-- | target/linux/generic-2.6/patches-2.6.28/027-module_exports.patch | 117 | ||||
| -rw-r--r-- | target/linux/generic-2.6/patches-2.6.30/028-module_exports.patch | 117 | 
2 files changed, 234 insertions, 0 deletions
diff --git a/target/linux/generic-2.6/patches-2.6.28/027-module_exports.patch b/target/linux/generic-2.6/patches-2.6.28/027-module_exports.patch new file mode 100644 index 000000000..2a4483262 --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.28/027-module_exports.patch @@ -0,0 +1,117 @@ +--- a/Makefile ++++ b/Makefile +@@ -963,7 +963,7 @@ prepare: prepare0 + # Leave this as default for preprocessing vmlinux.lds.S, which is now + # done in arch/$(ARCH)/kernel/Makefile +  +-export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH) ++export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH) $(EXTRA_LDSFLAGS) +  + # The asm symlink changes when $(ARCH) changes. + # Detect this and ask user to run make mrproper +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -2,6 +2,18 @@ + #define LOAD_OFFSET 0 + #endif +  ++#ifndef SYMTAB_KEEP_STR ++#define SYMTAB_KEEP_STR *(__ksymtab_strings.*) ++#endif ++ ++#ifndef SYMTAB_KEEP ++#define SYMTAB_KEEP *(__ksymtab.*) ++#endif ++ ++#ifndef SYMTAB_KEEP_GPL ++#define SYMTAB_KEEP_GPL *(__ksymtab_gpl.*) ++#endif ++ + #ifndef VMLINUX_SYMBOL + #define VMLINUX_SYMBOL(_sym_) _sym_ + #endif +@@ -124,35 +136,35 @@ + 	/* Kernel symbol table: Normal symbols */			\ + 	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\ + 		VMLINUX_SYMBOL(__start___ksymtab) = .;			\ +-		*(__ksymtab)						\ ++		SYMTAB_KEEP						\ + 		VMLINUX_SYMBOL(__stop___ksymtab) = .;			\ + 	}								\ + 									\ + 	/* Kernel symbol table: GPL-only symbols */			\ + 	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\ + 		VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;		\ +-		*(__ksymtab_gpl)					\ ++		SYMTAB_KEEP_GPL						\ + 		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\ + 	}								\ + 									\ + 	/* Kernel symbol table: Normal unused symbols */		\ + 	__ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {	\ + 		VMLINUX_SYMBOL(__start___ksymtab_unused) = .;		\ +-		*(__ksymtab_unused)					\ ++		*(__ksymtab_unused.*)					\ + 		VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;		\ + 	}								\ + 									\ + 	/* Kernel symbol table: GPL-only unused symbols */		\ + 	__ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \ + 		VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;	\ +-		*(__ksymtab_unused_gpl)					\ ++		*(__ksymtab_unused_gpl.*)				\ + 		VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;	\ + 	}								\ + 									\ + 	/* Kernel symbol table: GPL-future-only symbols */		\ + 	__ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \ + 		VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;	\ +-		*(__ksymtab_gpl_future)					\ ++		*(__ksymtab_gpl_future.*)				\ + 		VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;	\ + 	}								\ + 									\ +@@ -193,7 +205,13 @@ + 									\ + 	/* Kernel symbol table: strings */				\ +         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\ +-		*(__ksymtab_strings)					\ ++		SYMTAB_KEEP_STR						\ ++	}								\ ++									\ ++	/DISCARD/ : {							\ ++		*(__ksymtab.*)						\ ++		*(__ksymtab_gpl.*)					\ ++		*(__ksymtab_strings.*)					\ + 	}								\ + 									\ + 	/* __*init sections */						\ +--- a/include/linux/module.h ++++ b/include/linux/module.h +@@ -187,16 +187,24 @@ void *__symbol_get_gpl(const char *symbo + #define __CRC_SYMBOL(sym, sec) + #endif +  ++#ifdef MODULE ++#define __EXPORT_SUFFIX(sym) ++#else ++#define __EXPORT_SUFFIX(sym) "." #sym ++#endif ++ + /* For every exported symbol, place a struct in the __ksymtab section */ + #define __EXPORT_SYMBOL(sym, sec)				\ + 	extern typeof(sym) sym;					\ + 	__CRC_SYMBOL(sym, sec)					\ + 	static const char __kstrtab_##sym[]			\ +-	__attribute__((section("__ksymtab_strings"), aligned(1))) \ ++	__attribute__((section("__ksymtab_strings"		\ ++	  __EXPORT_SUFFIX(sym)), aligned(1)))			\ + 	= MODULE_SYMBOL_PREFIX #sym;                    	\ + 	static const struct kernel_symbol __ksymtab_##sym	\ + 	__used							\ +-	__attribute__((section("__ksymtab" sec), unused))	\ ++	__attribute__((section("__ksymtab" sec			\ ++	  __EXPORT_SUFFIX(sym)), unused))			\ + 	= { (unsigned long)&sym, __kstrtab_##sym } +  + #define EXPORT_SYMBOL(sym)					\ diff --git a/target/linux/generic-2.6/patches-2.6.30/028-module_exports.patch b/target/linux/generic-2.6/patches-2.6.30/028-module_exports.patch new file mode 100644 index 000000000..ec037b30e --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.30/028-module_exports.patch @@ -0,0 +1,117 @@ +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -4,6 +4,18 @@ + #define LOAD_OFFSET 0 + #endif +  ++#ifndef SYMTAB_KEEP_STR ++#define SYMTAB_KEEP_STR *(__ksymtab_strings.*) ++#endif ++ ++#ifndef SYMTAB_KEEP ++#define SYMTAB_KEEP *(__ksymtab.*) ++#endif ++ ++#ifndef SYMTAB_KEEP_GPL ++#define SYMTAB_KEEP_GPL *(__ksymtab_gpl.*) ++#endif ++ + #ifndef VMLINUX_SYMBOL + #define VMLINUX_SYMBOL(_sym_) _sym_ + #endif +@@ -176,35 +188,35 @@ + 	/* Kernel symbol table: Normal symbols */			\ + 	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\ + 		VMLINUX_SYMBOL(__start___ksymtab) = .;			\ +-		*(__ksymtab)						\ ++		SYMTAB_KEEP						\ + 		VMLINUX_SYMBOL(__stop___ksymtab) = .;			\ + 	}								\ + 									\ + 	/* Kernel symbol table: GPL-only symbols */			\ + 	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\ + 		VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;		\ +-		*(__ksymtab_gpl)					\ ++		SYMTAB_KEEP_GPL						\ + 		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\ + 	}								\ + 									\ + 	/* Kernel symbol table: Normal unused symbols */		\ + 	__ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {	\ + 		VMLINUX_SYMBOL(__start___ksymtab_unused) = .;		\ +-		*(__ksymtab_unused)					\ ++		*(__ksymtab_unused.*)					\ + 		VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;		\ + 	}								\ + 									\ + 	/* Kernel symbol table: GPL-only unused symbols */		\ + 	__ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \ + 		VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;	\ +-		*(__ksymtab_unused_gpl)					\ ++		*(__ksymtab_unused_gpl.*)				\ + 		VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;	\ + 	}								\ + 									\ + 	/* Kernel symbol table: GPL-future-only symbols */		\ + 	__ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \ + 		VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;	\ +-		*(__ksymtab_gpl_future)					\ ++		*(__ksymtab_gpl_future.*)				\ + 		VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;	\ + 	}								\ + 									\ +@@ -245,7 +257,13 @@ + 									\ + 	/* Kernel symbol table: strings */				\ +         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\ +-		*(__ksymtab_strings)					\ ++		SYMTAB_KEEP_STR						\ ++	}								\ ++									\ ++	/DISCARD/ : {							\ ++		*(__ksymtab.*)						\ ++		*(__ksymtab_gpl.*)					\ ++		*(__ksymtab_strings.*)					\ + 	}								\ + 									\ + 	/* __*init sections */						\ +--- a/include/linux/module.h ++++ b/include/linux/module.h +@@ -187,16 +187,24 @@ void *__symbol_get_gpl(const char *symbo + #define __CRC_SYMBOL(sym, sec) + #endif +  ++#ifdef MODULE ++#define __EXPORT_SUFFIX(sym) ++#else ++#define __EXPORT_SUFFIX(sym) "." #sym ++#endif ++ + /* For every exported symbol, place a struct in the __ksymtab section */ + #define __EXPORT_SYMBOL(sym, sec)				\ + 	extern typeof(sym) sym;					\ + 	__CRC_SYMBOL(sym, sec)					\ + 	static const char __kstrtab_##sym[]			\ +-	__attribute__((section("__ksymtab_strings"), aligned(1))) \ ++	__attribute__((section("__ksymtab_strings"		\ ++	  __EXPORT_SUFFIX(sym)), aligned(1)))			\ + 	= MODULE_SYMBOL_PREFIX #sym;                    	\ + 	static const struct kernel_symbol __ksymtab_##sym	\ + 	__used							\ +-	__attribute__((section("__ksymtab" sec), unused))	\ ++	__attribute__((section("__ksymtab" sec			\ ++	  __EXPORT_SUFFIX(sym)), unused))			\ + 	= { (unsigned long)&sym, __kstrtab_##sym } +  + #define EXPORT_SYMBOL(sym)					\ +--- a/Makefile ++++ b/Makefile +@@ -994,7 +994,7 @@ prepare: prepare0 + # Leave this as default for preprocessing vmlinux.lds.S, which is now + # done in arch/$(ARCH)/kernel/Makefile +  +-export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH) ++export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH) $(EXTRA_LDSFLAGS) +  + # The asm symlink changes when $(ARCH) changes. + # Detect this and ask user to run make mrproper  | 
