[kernel] update to 2.6.30.9
[openwrt.git] / target / linux / generic-2.6 / patches-2.6.31 / 028-module_exports.patch
1 --- a/include/asm-generic/vmlinux.lds.h
2 +++ b/include/asm-generic/vmlinux.lds.h
3 @@ -55,6 +55,27 @@
4  #define LOAD_OFFSET 0
5  #endif
6  
7 +#ifndef SYMTAB_KEEP_STR
8 +#define SYMTAB_KEEP_STR *(__ksymtab_strings.*)
9 +#define SYMTAB_DISCARD_STR
10 +#else
11 +#define SYMTAB_DISCARD_STR *(__ksymtab_strings.*)
12 +#endif
13 +
14 +#ifndef SYMTAB_KEEP
15 +#define SYMTAB_KEEP *(__ksymtab.*)
16 +#define SYMTAB_DISCARD
17 +#else
18 +#define SYMTAB_DISCARD *(__ksymtab.*)
19 +#endif
20 +
21 +#ifndef SYMTAB_KEEP_GPL
22 +#define SYMTAB_KEEP_GPL *(__ksymtab_gpl.*)
23 +#define SYMTAB_DISCARD_GPL
24 +#else
25 +#define SYMTAB_DISCARD_GPL *(__ksymtab_gpl.*)
26 +#endif
27 +
28  #ifndef VMLINUX_SYMBOL
29  #define VMLINUX_SYMBOL(_sym_) _sym_
30  #endif
31 @@ -256,35 +277,35 @@
32         /* Kernel symbol table: Normal symbols */                       \
33         __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
34                 VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
35 -               *(__ksymtab)                                            \
36 +               SYMTAB_KEEP                                             \
37                 VMLINUX_SYMBOL(__stop___ksymtab) = .;                   \
38         }                                                               \
39                                                                         \
40         /* Kernel symbol table: GPL-only symbols */                     \
41         __ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {     \
42                 VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;              \
43 -               *(__ksymtab_gpl)                                        \
44 +               SYMTAB_KEEP_GPL                                         \
45                 VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;               \
46         }                                                               \
47                                                                         \
48         /* Kernel symbol table: Normal unused symbols */                \
49         __ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {  \
50                 VMLINUX_SYMBOL(__start___ksymtab_unused) = .;           \
51 -               *(__ksymtab_unused)                                     \
52 +               *(__ksymtab_unused.*)                                   \
53                 VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;            \
54         }                                                               \
55                                                                         \
56         /* Kernel symbol table: GPL-only unused symbols */              \
57         __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
58                 VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;       \
59 -               *(__ksymtab_unused_gpl)                                 \
60 +               *(__ksymtab_unused_gpl.*)                               \
61                 VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;        \
62         }                                                               \
63                                                                         \
64         /* Kernel symbol table: GPL-future-only symbols */              \
65         __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
66                 VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;       \
67 -               *(__ksymtab_gpl_future)                                 \
68 +               *(__ksymtab_gpl_future.*)                               \
69                 VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;        \
70         }                                                               \
71                                                                         \
72 @@ -325,7 +346,13 @@
73                                                                         \
74         /* Kernel symbol table: strings */                              \
75          __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {        \
76 -               *(__ksymtab_strings)                                    \
77 +               SYMTAB_KEEP_STR                                         \
78 +       }                                                               \
79 +                                                                       \
80 +       /DISCARD/ : {                                                   \
81 +               SYMTAB_DISCARD                                          \
82 +               SYMTAB_DISCARD_GPL                                      \
83 +               SYMTAB_DISCARD_STR                                      \
84         }                                                               \
85                                                                         \
86         /* __*init sections */                                          \
87 --- a/include/linux/module.h
88 +++ b/include/linux/module.h
89 @@ -188,16 +188,24 @@ void *__symbol_get_gpl(const char *symbo
90  #define __CRC_SYMBOL(sym, sec)
91  #endif
92  
93 +#ifdef MODULE
94 +#define __EXPORT_SUFFIX(sym)
95 +#else
96 +#define __EXPORT_SUFFIX(sym) "." #sym
97 +#endif
98 +
99  /* For every exported symbol, place a struct in the __ksymtab section */
100  #define __EXPORT_SYMBOL(sym, sec)                              \
101         extern typeof(sym) sym;                                 \
102         __CRC_SYMBOL(sym, sec)                                  \
103         static const char __kstrtab_##sym[]                     \
104 -       __attribute__((section("__ksymtab_strings"), aligned(1))) \
105 +       __attribute__((section("__ksymtab_strings"              \
106 +         __EXPORT_SUFFIX(sym)), aligned(1)))                   \
107         = MODULE_SYMBOL_PREFIX #sym;                            \
108         static const struct kernel_symbol __ksymtab_##sym       \
109         __used                                                  \
110 -       __attribute__((section("__ksymtab" sec), unused))       \
111 +       __attribute__((section("__ksymtab" sec                  \
112 +         __EXPORT_SUFFIX(sym)), unused))                       \
113         = { (unsigned long)&sym, __kstrtab_##sym }
114  
115  #define EXPORT_SYMBOL(sym)                                     \
116 --- a/Makefile
117 +++ b/Makefile
118 @@ -986,7 +986,7 @@ prepare: prepare0
119  # Leave this as default for preprocessing vmlinux.lds.S, which is now
120  # done in arch/$(ARCH)/kernel/Makefile
121  
122 -export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
123 +export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH) $(EXTRA_LDSFLAGS)
124  
125  # The asm symlink changes when $(ARCH) changes.
126  # Detect this and ask user to run make mrproper
127 --- a/arch/arm/kernel/vmlinux.lds.S
128 +++ b/arch/arm/kernel/vmlinux.lds.S
129 @@ -79,26 +79,6 @@ SECTIONS
130  #endif
131         }
132  
133 -       /DISCARD/ : {                   /* Exit code and data           */
134 -               EXIT_TEXT
135 -               EXIT_DATA
136 -               *(.exitcall.exit)
137 -               *(.ARM.exidx.exit.text)
138 -               *(.ARM.extab.exit.text)
139 -#ifndef CONFIG_HOTPLUG_CPU
140 -               *(.ARM.exidx.cpuexit.text)
141 -               *(.ARM.extab.cpuexit.text)
142 -#endif
143 -#ifndef CONFIG_HOTPLUG
144 -               *(.ARM.exidx.devexit.text)
145 -               *(.ARM.extab.devexit.text)
146 -#endif
147 -#ifndef CONFIG_MMU
148 -               *(.fixup)
149 -               *(__ex_table)
150 -#endif
151 -       }
152 -
153         .text : {                       /* Real text segment            */
154                 _text = .;              /* Text and read-only data      */
155                         __exception_text_start = .;
156 @@ -205,6 +185,28 @@ SECTIONS
157                 __bss_stop = .;
158                 _end = .;
159         }
160 +
161 +       /DISCARD/ : {                   /* Exit code and data           */
162 +               EXIT_TEXT
163 +               EXIT_DATA
164 +               *(.discard)
165 +               *(.exitcall.exit)
166 +               *(.ARM.exidx.exit.text)
167 +               *(.ARM.extab.exit.text)
168 +#ifndef CONFIG_HOTPLUG_CPU
169 +               *(.ARM.exidx.cpuexit.text)
170 +               *(.ARM.extab.cpuexit.text)
171 +#endif
172 +#ifndef CONFIG_HOTPLUG
173 +               *(.ARM.exidx.devexit.text)
174 +               *(.ARM.extab.devexit.text)
175 +#endif
176 +#ifndef CONFIG_MMU
177 +               *(.fixup)
178 +               *(__ex_table)
179 +#endif
180 +       }
181 +
182                                         /* Stabs debugging sections.    */
183         .stab 0 : { *(.stab) }
184         .stabstr 0 : { *(.stabstr) }
185 --- a/arch/powerpc/kernel/vmlinux.lds.S
186 +++ b/arch/powerpc/kernel/vmlinux.lds.S
187 @@ -37,12 +37,6 @@ jiffies = jiffies_64 + 4;
188  #endif
189  SECTIONS
190  {
191 -       /* Sections to be discarded. */
192 -       /DISCARD/ : {
193 -       *(.exitcall.exit)
194 -       EXIT_DATA
195 -       }
196 -
197         . = KERNELBASE;
198  
199  /*
200 @@ -295,6 +289,12 @@ SECTIONS
201                 __bss_stop = .;
202         }
203  
204 +       /* Sections to be discarded. */
205 +       /DISCARD/ : {
206 +       *(.exitcall.exit)
207 +       EXIT_DATA
208 +       }
209 +
210         . = ALIGN(PAGE_SIZE);
211         _end = . ;
212         PROVIDE32 (end = .);