diff options
| author | kaloz <kaloz@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-10-23 12:21:34 +0000 | 
|---|---|---|
| committer | kaloz <kaloz@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-10-23 12:21:34 +0000 | 
| commit | 1c3d05cf739b54cf71010bb4d3e0ec70d7811a46 (patch) | |
| tree | 413eb23081ae9b34b54a6ee479e5a2bf0085877d /target/linux/generic/patches-3.6/220-module_exports.patch | |
| parent | c373dbfcfb08c0662558cce38da2e05c7682714b (diff) | |
[generic]: linux 3.6 support (work in progress)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33897 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/patches-3.6/220-module_exports.patch')
| -rw-r--r-- | target/linux/generic/patches-3.6/220-module_exports.patch | 89 | 
1 files changed, 89 insertions, 0 deletions
| diff --git a/target/linux/generic/patches-3.6/220-module_exports.patch b/target/linux/generic/patches-3.6/220-module_exports.patch new file mode 100644 index 000000000..be6b6ff9d --- /dev/null +++ b/target/linux/generic/patches-3.6/220-module_exports.patch @@ -0,0 +1,89 @@ +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -52,6 +52,27 @@ + #define LOAD_OFFSET 0 + #endif +  ++#ifndef SYMTAB_KEEP_STR ++#define SYMTAB_KEEP_STR *(__ksymtab_strings+*) ++#define SYMTAB_DISCARD_STR ++#else ++#define SYMTAB_DISCARD_STR *(__ksymtab_strings+*) ++#endif ++ ++#ifndef SYMTAB_KEEP ++#define SYMTAB_KEEP *(SORT(___ksymtab+*)) ++#define SYMTAB_DISCARD ++#else ++#define SYMTAB_DISCARD *(SORT(___ksymtab+*)) ++#endif ++ ++#ifndef SYMTAB_KEEP_GPL ++#define SYMTAB_KEEP_GPL *(SORT(___ksymtab_gpl+*)) ++#define SYMTAB_DISCARD_GPL ++#else ++#define SYMTAB_DISCARD_GPL *(SORT(___ksymtab_gpl+*)) ++#endif ++ + #ifndef SYMBOL_PREFIX + #define VMLINUX_SYMBOL(sym) sym + #else +@@ -275,14 +296,14 @@ + 	/* Kernel symbol table: Normal symbols */			\ + 	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\ + 		VMLINUX_SYMBOL(__start___ksymtab) = .;			\ +-		*(SORT(___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) = .;		\ +-		*(SORT(___ksymtab_gpl+*))				\ ++		SYMTAB_KEEP_GPL						\ + 		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\ + 	}								\ + 									\ +@@ -344,7 +365,7 @@ + 									\ + 	/* Kernel symbol table: strings */				\ +         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\ +-		*(__ksymtab_strings)					\ ++		SYMTAB_KEEP_STR						\ + 	}								\ + 									\ + 	/* __*init sections */						\ +@@ -676,6 +697,9 @@ + 	EXIT_TEXT							\ + 	EXIT_DATA							\ + 	EXIT_CALL							\ ++	SYMTAB_DISCARD							\ ++	SYMTAB_DISCARD_GPL						\ ++	SYMTAB_DISCARD_STR						\ + 	*(.discard)							\ + 	*(.discard.*)							\ + 	} +--- a/include/linux/export.h ++++ b/include/linux/export.h +@@ -45,12 +45,19 @@ extern struct module __this_module; + #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							\ | 
