diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-01-29 06:46:14 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-01-29 06:46:14 -0500 |
commit | 5ea293a9048d3a58cb0c840fa719d85ad14cba47 (patch) | |
tree | 88d1dd1eece2cfcbd858ff2c00fb0240dcfab3c7 /include | |
parent | 03bc26cfefd6db756e6bc7fcda11dc17ada7be16 (diff) | |
parent | d3883ecebbf9e095b9e379dabbbe8b2c1ee7a41c (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild: (79 commits)
Remove references to "make dep"
kconfig: document use of HAVE_*
Introduce new section reference annotations tags: __ref, __refdata, __refconst
kbuild: warn about ld added unique sections
kbuild: add verbose option to Section mismatch reporting in modpost
kconfig: tristate choices with mixed tristate and boolean values
asm-generic/vmlix.lds.h: simplify __mem{init,exit}* dependencies
remove __attribute_used__
kbuild: support ARCH=x86 in buildtar
kconfig: remove "enable"
kbuild: simplified warning report in modpost
kbuild: introduce a few helpers in modpost
kbuild: use simpler section mismatch warnings in modpost
kbuild: link vmlinux.o before kallsyms passes
kbuild: introduce new option to enhance section mismatch analysis
Use separate sections for __dev/__cpu/__mem code/data
compiler.h: introduce __section()
all archs: consolidate init and exit sections in vmlinux.lds.h
kbuild: check section names consistently in modpost
kbuild: introduce blacklisting in modpost
...
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-avr32/setup.h | 2 | ||||
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 89 | ||||
-rw-r--r-- | include/asm-ia64/gcc_intrin.h | 2 | ||||
-rw-r--r-- | include/asm-sh/machvec.h | 2 | ||||
-rw-r--r-- | include/asm-sh/thread_info.h | 2 | ||||
-rw-r--r-- | include/asm-x86/thread_info_32.h | 2 | ||||
-rw-r--r-- | include/linux/Kbuild | 8 | ||||
-rw-r--r-- | include/linux/compiler-gcc3.h | 2 | ||||
-rw-r--r-- | include/linux/compiler-gcc4.h | 1 | ||||
-rw-r--r-- | include/linux/compiler.h | 9 | ||||
-rw-r--r-- | include/linux/elfnote.h | 2 | ||||
-rw-r--r-- | include/linux/init.h | 130 | ||||
-rw-r--r-- | include/linux/module.h | 4 | ||||
-rw-r--r-- | include/linux/moduleparam.h | 4 | ||||
-rw-r--r-- | include/linux/pci.h | 2 |
15 files changed, 181 insertions, 80 deletions
diff --git a/include/asm-avr32/setup.h b/include/asm-avr32/setup.h index b0828d43e110..ea3070ff13a5 100644 --- a/include/asm-avr32/setup.h +++ b/include/asm-avr32/setup.h | |||
@@ -110,7 +110,7 @@ struct tagtable { | |||
110 | int (*parse)(struct tag *); | 110 | int (*parse)(struct tag *); |
111 | }; | 111 | }; |
112 | 112 | ||
113 | #define __tag __attribute_used__ __attribute__((__section__(".taglist.init"))) | 113 | #define __tag __used __attribute__((__section__(".taglist.init"))) |
114 | #define __tagtable(tag, fn) \ | 114 | #define __tagtable(tag, fn) \ |
115 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | 115 | static struct tagtable __tagtable_##fn __tag = { tag, fn } |
116 | 116 | ||
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 9f584cc5c5fb..76df771be585 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -9,10 +9,46 @@ | |||
9 | /* Align . to a 8 byte boundary equals to maximum function alignment. */ | 9 | /* Align . to a 8 byte boundary equals to maximum function alignment. */ |
10 | #define ALIGN_FUNCTION() . = ALIGN(8) | 10 | #define ALIGN_FUNCTION() . = ALIGN(8) |
11 | 11 | ||
12 | /* The actual configuration determine if the init/exit sections | ||
13 | * are handled as text/data or they can be discarded (which | ||
14 | * often happens at runtime) | ||
15 | */ | ||
16 | #ifdef CONFIG_HOTPLUG | ||
17 | #define DEV_KEEP(sec) *(.dev##sec) | ||
18 | #define DEV_DISCARD(sec) | ||
19 | #else | ||
20 | #define DEV_KEEP(sec) | ||
21 | #define DEV_DISCARD(sec) *(.dev##sec) | ||
22 | #endif | ||
23 | |||
24 | #ifdef CONFIG_HOTPLUG_CPU | ||
25 | #define CPU_KEEP(sec) *(.cpu##sec) | ||
26 | #define CPU_DISCARD(sec) | ||
27 | #else | ||
28 | #define CPU_KEEP(sec) | ||
29 | #define CPU_DISCARD(sec) *(.cpu##sec) | ||
30 | #endif | ||
31 | |||
32 | #if defined(CONFIG_MEMORY_HOTPLUG) | ||
33 | #define MEM_KEEP(sec) *(.mem##sec) | ||
34 | #define MEM_DISCARD(sec) | ||
35 | #else | ||
36 | #define MEM_KEEP(sec) | ||
37 | #define MEM_DISCARD(sec) *(.mem##sec) | ||
38 | #endif | ||
39 | |||
40 | |||
12 | /* .data section */ | 41 | /* .data section */ |
13 | #define DATA_DATA \ | 42 | #define DATA_DATA \ |
14 | *(.data) \ | 43 | *(.data) \ |
15 | *(.data.init.refok) \ | 44 | *(.data.init.refok) \ |
45 | *(.ref.data) \ | ||
46 | DEV_KEEP(init.data) \ | ||
47 | DEV_KEEP(exit.data) \ | ||
48 | CPU_KEEP(init.data) \ | ||
49 | CPU_KEEP(exit.data) \ | ||
50 | MEM_KEEP(init.data) \ | ||
51 | MEM_KEEP(exit.data) \ | ||
16 | . = ALIGN(8); \ | 52 | . = ALIGN(8); \ |
17 | VMLINUX_SYMBOL(__start___markers) = .; \ | 53 | VMLINUX_SYMBOL(__start___markers) = .; \ |
18 | *(__markers) \ | 54 | *(__markers) \ |
@@ -132,6 +168,17 @@ | |||
132 | *(__ksymtab_strings) \ | 168 | *(__ksymtab_strings) \ |
133 | } \ | 169 | } \ |
134 | \ | 170 | \ |
171 | /* __*init sections */ \ | ||
172 | __init_rodata : AT(ADDR(__init_rodata) - LOAD_OFFSET) { \ | ||
173 | *(.ref.rodata) \ | ||
174 | DEV_KEEP(init.rodata) \ | ||
175 | DEV_KEEP(exit.rodata) \ | ||
176 | CPU_KEEP(init.rodata) \ | ||
177 | CPU_KEEP(exit.rodata) \ | ||
178 | MEM_KEEP(init.rodata) \ | ||
179 | MEM_KEEP(exit.rodata) \ | ||
180 | } \ | ||
181 | \ | ||
135 | /* Built-in module parameters. */ \ | 182 | /* Built-in module parameters. */ \ |
136 | __param : AT(ADDR(__param) - LOAD_OFFSET) { \ | 183 | __param : AT(ADDR(__param) - LOAD_OFFSET) { \ |
137 | VMLINUX_SYMBOL(__start___param) = .; \ | 184 | VMLINUX_SYMBOL(__start___param) = .; \ |
@@ -139,7 +186,6 @@ | |||
139 | VMLINUX_SYMBOL(__stop___param) = .; \ | 186 | VMLINUX_SYMBOL(__stop___param) = .; \ |
140 | VMLINUX_SYMBOL(__end_rodata) = .; \ | 187 | VMLINUX_SYMBOL(__end_rodata) = .; \ |
141 | } \ | 188 | } \ |
142 | \ | ||
143 | . = ALIGN((align)); | 189 | . = ALIGN((align)); |
144 | 190 | ||
145 | /* RODATA provided for backward compatibility. | 191 | /* RODATA provided for backward compatibility. |
@@ -158,8 +204,16 @@ | |||
158 | #define TEXT_TEXT \ | 204 | #define TEXT_TEXT \ |
159 | ALIGN_FUNCTION(); \ | 205 | ALIGN_FUNCTION(); \ |
160 | *(.text) \ | 206 | *(.text) \ |
207 | *(.ref.text) \ | ||
161 | *(.text.init.refok) \ | 208 | *(.text.init.refok) \ |
162 | *(.exit.text.refok) | 209 | *(.exit.text.refok) \ |
210 | DEV_KEEP(init.text) \ | ||
211 | DEV_KEEP(exit.text) \ | ||
212 | CPU_KEEP(init.text) \ | ||
213 | CPU_KEEP(exit.text) \ | ||
214 | MEM_KEEP(init.text) \ | ||
215 | MEM_KEEP(exit.text) | ||
216 | |||
163 | 217 | ||
164 | /* sched.text is aling to function alignment to secure we have same | 218 | /* sched.text is aling to function alignment to secure we have same |
165 | * address even at second ld pass when generating System.map */ | 219 | * address even at second ld pass when generating System.map */ |
@@ -183,6 +237,37 @@ | |||
183 | *(.kprobes.text) \ | 237 | *(.kprobes.text) \ |
184 | VMLINUX_SYMBOL(__kprobes_text_end) = .; | 238 | VMLINUX_SYMBOL(__kprobes_text_end) = .; |
185 | 239 | ||
240 | /* init and exit section handling */ | ||
241 | #define INIT_DATA \ | ||
242 | *(.init.data) \ | ||
243 | DEV_DISCARD(init.data) \ | ||
244 | DEV_DISCARD(init.rodata) \ | ||
245 | CPU_DISCARD(init.data) \ | ||
246 | CPU_DISCARD(init.rodata) \ | ||
247 | MEM_DISCARD(init.data) \ | ||
248 | MEM_DISCARD(init.rodata) | ||
249 | |||
250 | #define INIT_TEXT \ | ||
251 | *(.init.text) \ | ||
252 | DEV_DISCARD(init.text) \ | ||
253 | CPU_DISCARD(init.text) \ | ||
254 | MEM_DISCARD(init.text) | ||
255 | |||
256 | #define EXIT_DATA \ | ||
257 | *(.exit.data) \ | ||
258 | DEV_DISCARD(exit.data) \ | ||
259 | DEV_DISCARD(exit.rodata) \ | ||
260 | CPU_DISCARD(exit.data) \ | ||
261 | CPU_DISCARD(exit.rodata) \ | ||
262 | MEM_DISCARD(exit.data) \ | ||
263 | MEM_DISCARD(exit.rodata) | ||
264 | |||
265 | #define EXIT_TEXT \ | ||
266 | *(.exit.text) \ | ||
267 | DEV_DISCARD(exit.text) \ | ||
268 | CPU_DISCARD(exit.text) \ | ||
269 | MEM_DISCARD(exit.text) | ||
270 | |||
186 | /* DWARF debug sections. | 271 | /* DWARF debug sections. |
187 | Symbols in the DWARF debugging sections are relative to | 272 | Symbols in the DWARF debugging sections are relative to |
188 | the beginning of the section so we begin them at 0. */ | 273 | the beginning of the section so we begin them at 0. */ |
diff --git a/include/asm-ia64/gcc_intrin.h b/include/asm-ia64/gcc_intrin.h index e58d3298fa10..5b6665c754c9 100644 --- a/include/asm-ia64/gcc_intrin.h +++ b/include/asm-ia64/gcc_intrin.h | |||
@@ -24,7 +24,7 @@ | |||
24 | extern void ia64_bad_param_for_setreg (void); | 24 | extern void ia64_bad_param_for_setreg (void); |
25 | extern void ia64_bad_param_for_getreg (void); | 25 | extern void ia64_bad_param_for_getreg (void); |
26 | 26 | ||
27 | register unsigned long ia64_r13 asm ("r13") __attribute_used__; | 27 | register unsigned long ia64_r13 asm ("r13") __used; |
28 | 28 | ||
29 | #define ia64_setreg(regnum, val) \ | 29 | #define ia64_setreg(regnum, val) \ |
30 | ({ \ | 30 | ({ \ |
diff --git a/include/asm-sh/machvec.h b/include/asm-sh/machvec.h index ddb18ad23303..b2e4124070ae 100644 --- a/include/asm-sh/machvec.h +++ b/include/asm-sh/machvec.h | |||
@@ -65,6 +65,6 @@ extern struct sh_machine_vector sh_mv; | |||
65 | #define get_system_type() sh_mv.mv_name | 65 | #define get_system_type() sh_mv.mv_name |
66 | 66 | ||
67 | #define __initmv \ | 67 | #define __initmv \ |
68 | __attribute_used__ __attribute__((__section__ (".machvec.init"))) | 68 | __used __section(.machvec.init) |
69 | 69 | ||
70 | #endif /* _ASM_SH_MACHVEC_H */ | 70 | #endif /* _ASM_SH_MACHVEC_H */ |
diff --git a/include/asm-sh/thread_info.h b/include/asm-sh/thread_info.h index c6577d3dc46d..c50e5d35fe84 100644 --- a/include/asm-sh/thread_info.h +++ b/include/asm-sh/thread_info.h | |||
@@ -68,7 +68,7 @@ struct thread_info { | |||
68 | #define init_stack (init_thread_union.stack) | 68 | #define init_stack (init_thread_union.stack) |
69 | 69 | ||
70 | /* how to get the current stack pointer from C */ | 70 | /* how to get the current stack pointer from C */ |
71 | register unsigned long current_stack_pointer asm("r15") __attribute_used__; | 71 | register unsigned long current_stack_pointer asm("r15") __used; |
72 | 72 | ||
73 | /* how to get the thread information struct from C */ | 73 | /* how to get the thread information struct from C */ |
74 | static inline struct thread_info *current_thread_info(void) | 74 | static inline struct thread_info *current_thread_info(void) |
diff --git a/include/asm-x86/thread_info_32.h b/include/asm-x86/thread_info_32.h index ef58fd2a6eb0..a516e9192f11 100644 --- a/include/asm-x86/thread_info_32.h +++ b/include/asm-x86/thread_info_32.h | |||
@@ -85,7 +85,7 @@ struct thread_info { | |||
85 | 85 | ||
86 | 86 | ||
87 | /* how to get the current stack pointer from C */ | 87 | /* how to get the current stack pointer from C */ |
88 | register unsigned long current_stack_pointer asm("esp") __attribute_used__; | 88 | register unsigned long current_stack_pointer asm("esp") __used; |
89 | 89 | ||
90 | /* how to get the thread information struct from C */ | 90 | /* how to get the thread information struct from C */ |
91 | static inline struct thread_info *current_thread_info(void) | 91 | static inline struct thread_info *current_thread_info(void) |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index bd694f779346..ad99ce9f9169 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -34,7 +34,6 @@ header-y += atmsap.h | |||
34 | header-y += atmsvc.h | 34 | header-y += atmsvc.h |
35 | header-y += atm_zatm.h | 35 | header-y += atm_zatm.h |
36 | header-y += auto_fs4.h | 36 | header-y += auto_fs4.h |
37 | header-y += auxvec.h | ||
38 | header-y += ax25.h | 37 | header-y += ax25.h |
39 | header-y += b1lli.h | 38 | header-y += b1lli.h |
40 | header-y += baycom.h | 39 | header-y += baycom.h |
@@ -73,7 +72,7 @@ header-y += gen_stats.h | |||
73 | header-y += gigaset_dev.h | 72 | header-y += gigaset_dev.h |
74 | header-y += hdsmart.h | 73 | header-y += hdsmart.h |
75 | header-y += hysdn_if.h | 74 | header-y += hysdn_if.h |
76 | header-y += i2c-dev.h | 75 | header-y += i2o-dev.h |
77 | header-y += i8k.h | 76 | header-y += i8k.h |
78 | header-y += if_arcnet.h | 77 | header-y += if_arcnet.h |
79 | header-y += if_bonding.h | 78 | header-y += if_bonding.h |
@@ -158,7 +157,6 @@ header-y += veth.h | |||
158 | header-y += video_decoder.h | 157 | header-y += video_decoder.h |
159 | header-y += video_encoder.h | 158 | header-y += video_encoder.h |
160 | header-y += videotext.h | 159 | header-y += videotext.h |
161 | header-y += vt.h | ||
162 | header-y += x25.h | 160 | header-y += x25.h |
163 | 161 | ||
164 | unifdef-y += acct.h | 162 | unifdef-y += acct.h |
@@ -173,6 +171,7 @@ unifdef-y += atm.h | |||
173 | unifdef-y += atm_tcp.h | 171 | unifdef-y += atm_tcp.h |
174 | unifdef-y += audit.h | 172 | unifdef-y += audit.h |
175 | unifdef-y += auto_fs.h | 173 | unifdef-y += auto_fs.h |
174 | unifdef-y += auxvec.h | ||
176 | unifdef-y += binfmts.h | 175 | unifdef-y += binfmts.h |
177 | unifdef-y += capability.h | 176 | unifdef-y += capability.h |
178 | unifdef-y += capi.h | 177 | unifdef-y += capi.h |
@@ -214,7 +213,7 @@ unifdef-y += hdreg.h | |||
214 | unifdef-y += hiddev.h | 213 | unifdef-y += hiddev.h |
215 | unifdef-y += hpet.h | 214 | unifdef-y += hpet.h |
216 | unifdef-y += i2c.h | 215 | unifdef-y += i2c.h |
217 | unifdef-y += i2o-dev.h | 216 | unifdef-y += i2c-dev.h |
218 | unifdef-y += icmp.h | 217 | unifdef-y += icmp.h |
219 | unifdef-y += icmpv6.h | 218 | unifdef-y += icmpv6.h |
220 | unifdef-y += if_addr.h | 219 | unifdef-y += if_addr.h |
@@ -349,6 +348,7 @@ unifdef-y += videodev.h | |||
349 | unifdef-y += virtio_config.h | 348 | unifdef-y += virtio_config.h |
350 | unifdef-y += virtio_blk.h | 349 | unifdef-y += virtio_blk.h |
351 | unifdef-y += virtio_net.h | 350 | unifdef-y += virtio_net.h |
351 | unifdef-y += vt.h | ||
352 | unifdef-y += wait.h | 352 | unifdef-y += wait.h |
353 | unifdef-y += wanrouter.h | 353 | unifdef-y += wanrouter.h |
354 | unifdef-y += watchdog.h | 354 | unifdef-y += watchdog.h |
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h index 2d8c0f48f55e..e5eb795f78a1 100644 --- a/include/linux/compiler-gcc3.h +++ b/include/linux/compiler-gcc3.h | |||
@@ -7,10 +7,8 @@ | |||
7 | 7 | ||
8 | #if __GNUC_MINOR__ >= 3 | 8 | #if __GNUC_MINOR__ >= 3 |
9 | # define __used __attribute__((__used__)) | 9 | # define __used __attribute__((__used__)) |
10 | # define __attribute_used__ __used /* deprecated */ | ||
11 | #else | 10 | #else |
12 | # define __used __attribute__((__unused__)) | 11 | # define __used __attribute__((__unused__)) |
13 | # define __attribute_used__ __used /* deprecated */ | ||
14 | #endif | 12 | #endif |
15 | 13 | ||
16 | #if __GNUC_MINOR__ >= 4 | 14 | #if __GNUC_MINOR__ >= 4 |
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index ee7ca5de970c..0ab3a3232330 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
@@ -15,7 +15,6 @@ | |||
15 | #endif | 15 | #endif |
16 | 16 | ||
17 | #define __used __attribute__((__used__)) | 17 | #define __used __attribute__((__used__)) |
18 | #define __attribute_used__ __used /* deprecated */ | ||
19 | #define __must_check __attribute__((warn_unused_result)) | 18 | #define __must_check __attribute__((warn_unused_result)) |
20 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) | 19 | #define __compiler_offsetof(a,b) __builtin_offsetof(a,b) |
21 | #define __always_inline inline __attribute__((always_inline)) | 20 | #define __always_inline inline __attribute__((always_inline)) |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index c68b67b86ef1..d0e17e1657dc 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
@@ -126,10 +126,6 @@ extern void __chk_io_ptr(const volatile void __iomem *); | |||
126 | * Mark functions that are referenced only in inline assembly as __used so | 126 | * Mark functions that are referenced only in inline assembly as __used so |
127 | * the code is emitted even though it appears to be unreferenced. | 127 | * the code is emitted even though it appears to be unreferenced. |
128 | */ | 128 | */ |
129 | #ifndef __attribute_used__ | ||
130 | # define __attribute_used__ /* deprecated */ | ||
131 | #endif | ||
132 | |||
133 | #ifndef __used | 129 | #ifndef __used |
134 | # define __used /* unimplemented */ | 130 | # define __used /* unimplemented */ |
135 | #endif | 131 | #endif |
@@ -175,4 +171,9 @@ extern void __chk_io_ptr(const volatile void __iomem *); | |||
175 | #define __cold | 171 | #define __cold |
176 | #endif | 172 | #endif |
177 | 173 | ||
174 | /* Simple shorthand for a section definition */ | ||
175 | #ifndef __section | ||
176 | # define __section(S) __attribute__ ((__section__(#S))) | ||
177 | #endif | ||
178 | |||
178 | #endif /* __LINUX_COMPILER_H */ | 179 | #endif /* __LINUX_COMPILER_H */ |
diff --git a/include/linux/elfnote.h b/include/linux/elfnote.h index e831759b2fb5..278e3ef05336 100644 --- a/include/linux/elfnote.h +++ b/include/linux/elfnote.h | |||
@@ -76,7 +76,7 @@ | |||
76 | typeof(desc) _desc \ | 76 | typeof(desc) _desc \ |
77 | __attribute__((aligned(sizeof(Elf##size##_Word)))); \ | 77 | __attribute__((aligned(sizeof(Elf##size##_Word)))); \ |
78 | } _ELFNOTE_PASTE(_note_, unique) \ | 78 | } _ELFNOTE_PASTE(_note_, unique) \ |
79 | __attribute_used__ \ | 79 | __used \ |
80 | __attribute__((section(".note." name), \ | 80 | __attribute__((section(".note." name), \ |
81 | aligned(sizeof(Elf##size##_Word)), \ | 81 | aligned(sizeof(Elf##size##_Word)), \ |
82 | unused)) = { \ | 82 | unused)) = { \ |
diff --git a/include/linux/init.h b/include/linux/init.h index 5141381a7527..2efbda016741 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -40,10 +40,10 @@ | |||
40 | 40 | ||
41 | /* These are for everybody (although not all archs will actually | 41 | /* These are for everybody (although not all archs will actually |
42 | discard it in modules) */ | 42 | discard it in modules) */ |
43 | #define __init __attribute__ ((__section__ (".init.text"))) __cold | 43 | #define __init __section(.init.text) __cold |
44 | #define __initdata __attribute__ ((__section__ (".init.data"))) | 44 | #define __initdata __section(.init.data) |
45 | #define __exitdata __attribute__ ((__section__(".exit.data"))) | 45 | #define __exitdata __section(.exit.data) |
46 | #define __exit_call __attribute_used__ __attribute__ ((__section__ (".exitcall.exit"))) | 46 | #define __exit_call __used __section(.exitcall.exit) |
47 | 47 | ||
48 | /* modpost check for section mismatches during the kernel build. | 48 | /* modpost check for section mismatches during the kernel build. |
49 | * A section mismatch happens when there are references from a | 49 | * A section mismatch happens when there are references from a |
@@ -52,25 +52,81 @@ | |||
52 | * when early init has completed so all such references are potential bugs. | 52 | * when early init has completed so all such references are potential bugs. |
53 | * For exit sections the same issue exists. | 53 | * For exit sections the same issue exists. |
54 | * The following markers are used for the cases where the reference to | 54 | * The following markers are used for the cases where the reference to |
55 | * the init/exit section (code or data) is valid and will teach modpost | 55 | * the *init / *exit section (code or data) is valid and will teach |
56 | * not to issue a warning. | 56 | * modpost not to issue a warning. |
57 | * The markers follow same syntax rules as __init / __initdata. */ | 57 | * The markers follow same syntax rules as __init / __initdata. */ |
58 | #define __init_refok noinline __attribute__ ((__section__ (".text.init.refok"))) | 58 | #define __ref __section(.ref.text) noinline |
59 | #define __initdata_refok __attribute__ ((__section__ (".data.init.refok"))) | 59 | #define __refdata __section(.ref.data) |
60 | #define __exit_refok noinline __attribute__ ((__section__ (".exit.text.refok"))) | 60 | #define __refconst __section(.ref.rodata) |
61 | |||
62 | /* backward compatibility note | ||
63 | * A few places hardcode the old section names: | ||
64 | * .text.init.refok | ||
65 | * .data.init.refok | ||
66 | * .exit.text.refok | ||
67 | * They should be converted to use the defines from this file | ||
68 | */ | ||
69 | |||
70 | /* compatibility defines */ | ||
71 | #define __init_refok __ref | ||
72 | #define __initdata_refok __refdata | ||
73 | #define __exit_refok __ref | ||
74 | |||
61 | 75 | ||
62 | #ifdef MODULE | 76 | #ifdef MODULE |
63 | #define __exit __attribute__ ((__section__(".exit.text"))) __cold | 77 | #define __exitused |
64 | #else | 78 | #else |
65 | #define __exit __attribute_used__ __attribute__ ((__section__(".exit.text"))) __cold | 79 | #define __exitused __used |
66 | #endif | 80 | #endif |
67 | 81 | ||
82 | #define __exit __section(.exit.text) __exitused __cold | ||
83 | |||
84 | /* Used for HOTPLUG */ | ||
85 | #define __devinit __section(.devinit.text) __cold | ||
86 | #define __devinitdata __section(.devinit.data) | ||
87 | #define __devinitconst __section(.devinit.rodata) | ||
88 | #define __devexit __section(.devexit.text) __exitused __cold | ||
89 | #define __devexitdata __section(.devexit.data) | ||
90 | #define __devexitconst __section(.devexit.rodata) | ||
91 | |||
92 | /* Used for HOTPLUG_CPU */ | ||
93 | #define __cpuinit __section(.cpuinit.text) __cold | ||
94 | #define __cpuinitdata __section(.cpuinit.data) | ||
95 | #define __cpuinitconst __section(.cpuinit.rodata) | ||
96 | #define __cpuexit __section(.cpuexit.text) __exitused __cold | ||
97 | #define __cpuexitdata __section(.cpuexit.data) | ||
98 | #define __cpuexitconst __section(.cpuexit.rodata) | ||
99 | |||
100 | /* Used for MEMORY_HOTPLUG */ | ||
101 | #define __meminit __section(.meminit.text) __cold | ||
102 | #define __meminitdata __section(.meminit.data) | ||
103 | #define __meminitconst __section(.meminit.rodata) | ||
104 | #define __memexit __section(.memexit.text) __exitused __cold | ||
105 | #define __memexitdata __section(.memexit.data) | ||
106 | #define __memexitconst __section(.memexit.rodata) | ||
107 | |||
68 | /* For assembly routines */ | 108 | /* For assembly routines */ |
69 | #define __INIT .section ".init.text","ax" | 109 | #define __INIT .section ".init.text","ax" |
70 | #define __INIT_REFOK .section ".text.init.refok","ax" | ||
71 | #define __FINIT .previous | 110 | #define __FINIT .previous |
111 | |||
72 | #define __INITDATA .section ".init.data","aw" | 112 | #define __INITDATA .section ".init.data","aw" |
73 | #define __INITDATA_REFOK .section ".data.init.refok","aw" | 113 | |
114 | #define __DEVINIT .section ".devinit.text", "ax" | ||
115 | #define __DEVINITDATA .section ".devinit.data", "aw" | ||
116 | |||
117 | #define __CPUINIT .section ".cpuinit.text", "ax" | ||
118 | #define __CPUINITDATA .section ".cpuinit.data", "aw" | ||
119 | |||
120 | #define __MEMINIT .section ".meminit.text", "ax" | ||
121 | #define __MEMINITDATA .section ".meminit.data", "aw" | ||
122 | |||
123 | /* silence warnings when references are OK */ | ||
124 | #define __REF .section ".ref.text", "ax" | ||
125 | #define __REFDATA .section ".ref.data", "aw" | ||
126 | #define __REFCONST .section ".ref.rodata", "aw" | ||
127 | /* backward compatibility */ | ||
128 | #define __INIT_REFOK .section __REF | ||
129 | #define __INITDATA_REFOK .section __REFDATA | ||
74 | 130 | ||
75 | #ifndef __ASSEMBLY__ | 131 | #ifndef __ASSEMBLY__ |
76 | /* | 132 | /* |
@@ -108,7 +164,7 @@ void prepare_namespace(void); | |||
108 | */ | 164 | */ |
109 | 165 | ||
110 | #define __define_initcall(level,fn,id) \ | 166 | #define __define_initcall(level,fn,id) \ |
111 | static initcall_t __initcall_##fn##id __attribute_used__ \ | 167 | static initcall_t __initcall_##fn##id __used \ |
112 | __attribute__((__section__(".initcall" level ".init"))) = fn | 168 | __attribute__((__section__(".initcall" level ".init"))) = fn |
113 | 169 | ||
114 | /* | 170 | /* |
@@ -142,11 +198,11 @@ void prepare_namespace(void); | |||
142 | 198 | ||
143 | #define console_initcall(fn) \ | 199 | #define console_initcall(fn) \ |
144 | static initcall_t __initcall_##fn \ | 200 | static initcall_t __initcall_##fn \ |
145 | __attribute_used__ __attribute__((__section__(".con_initcall.init")))=fn | 201 | __used __section(.con_initcall.init) = fn |
146 | 202 | ||
147 | #define security_initcall(fn) \ | 203 | #define security_initcall(fn) \ |
148 | static initcall_t __initcall_##fn \ | 204 | static initcall_t __initcall_##fn \ |
149 | __attribute_used__ __attribute__((__section__(".security_initcall.init"))) = fn | 205 | __used __section(.security_initcall.init) = fn |
150 | 206 | ||
151 | struct obs_kernel_param { | 207 | struct obs_kernel_param { |
152 | const char *str; | 208 | const char *str; |
@@ -163,8 +219,7 @@ struct obs_kernel_param { | |||
163 | #define __setup_param(str, unique_id, fn, early) \ | 219 | #define __setup_param(str, unique_id, fn, early) \ |
164 | static char __setup_str_##unique_id[] __initdata __aligned(1) = str; \ | 220 | static char __setup_str_##unique_id[] __initdata __aligned(1) = str; \ |
165 | static struct obs_kernel_param __setup_##unique_id \ | 221 | static struct obs_kernel_param __setup_##unique_id \ |
166 | __attribute_used__ \ | 222 | __used __section(.init.setup) \ |
167 | __attribute__((__section__(".init.setup"))) \ | ||
168 | __attribute__((aligned((sizeof(long))))) \ | 223 | __attribute__((aligned((sizeof(long))))) \ |
169 | = { __setup_str_##unique_id, fn, early } | 224 | = { __setup_str_##unique_id, fn, early } |
170 | 225 | ||
@@ -242,7 +297,7 @@ void __init parse_early_param(void); | |||
242 | #endif | 297 | #endif |
243 | 298 | ||
244 | /* Data marked not to be saved by software suspend */ | 299 | /* Data marked not to be saved by software suspend */ |
245 | #define __nosavedata __attribute__ ((__section__ (".data.nosave"))) | 300 | #define __nosavedata __section(.data.nosave) |
246 | 301 | ||
247 | /* This means "can be init if no module support, otherwise module load | 302 | /* This means "can be init if no module support, otherwise module load |
248 | may call it." */ | 303 | may call it." */ |
@@ -254,43 +309,6 @@ void __init parse_early_param(void); | |||
254 | #define __initdata_or_module __initdata | 309 | #define __initdata_or_module __initdata |
255 | #endif /*CONFIG_MODULES*/ | 310 | #endif /*CONFIG_MODULES*/ |
256 | 311 | ||
257 | #ifdef CONFIG_HOTPLUG | ||
258 | #define __devinit | ||
259 | #define __devinitdata | ||
260 | #define __devexit | ||
261 | #define __devexitdata | ||
262 | #else | ||
263 | #define __devinit __init | ||
264 | #define __devinitdata __initdata | ||
265 | #define __devexit __exit | ||
266 | #define __devexitdata __exitdata | ||
267 | #endif | ||
268 | |||
269 | #ifdef CONFIG_HOTPLUG_CPU | ||
270 | #define __cpuinit | ||
271 | #define __cpuinitdata | ||
272 | #define __cpuexit | ||
273 | #define __cpuexitdata | ||
274 | #else | ||
275 | #define __cpuinit __init | ||
276 | #define __cpuinitdata __initdata | ||
277 | #define __cpuexit __exit | ||
278 | #define __cpuexitdata __exitdata | ||
279 | #endif | ||
280 | |||
281 | #if defined(CONFIG_MEMORY_HOTPLUG) || defined(CONFIG_ACPI_HOTPLUG_MEMORY) \ | ||
282 | || defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE) | ||
283 | #define __meminit | ||
284 | #define __meminitdata | ||
285 | #define __memexit | ||
286 | #define __memexitdata | ||
287 | #else | ||
288 | #define __meminit __init | ||
289 | #define __meminitdata __initdata | ||
290 | #define __memexit __exit | ||
291 | #define __memexitdata __exitdata | ||
292 | #endif | ||
293 | |||
294 | /* Functions marked as __devexit may be discarded at kernel link time, depending | 312 | /* Functions marked as __devexit may be discarded at kernel link time, depending |
295 | on config options. Newer versions of binutils detect references from | 313 | on config options. Newer versions of binutils detect references from |
296 | retained sections to discarded sections and flag an error. Pointers to | 314 | retained sections to discarded sections and flag an error. Pointers to |
diff --git a/include/linux/module.h b/include/linux/module.h index aedc06be1de8..ac481e2094fd 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -178,7 +178,7 @@ void *__symbol_get_gpl(const char *symbol); | |||
178 | #define __CRC_SYMBOL(sym, sec) \ | 178 | #define __CRC_SYMBOL(sym, sec) \ |
179 | extern void *__crc_##sym __attribute__((weak)); \ | 179 | extern void *__crc_##sym __attribute__((weak)); \ |
180 | static const unsigned long __kcrctab_##sym \ | 180 | static const unsigned long __kcrctab_##sym \ |
181 | __attribute_used__ \ | 181 | __used \ |
182 | __attribute__((section("__kcrctab" sec), unused)) \ | 182 | __attribute__((section("__kcrctab" sec), unused)) \ |
183 | = (unsigned long) &__crc_##sym; | 183 | = (unsigned long) &__crc_##sym; |
184 | #else | 184 | #else |
@@ -193,7 +193,7 @@ void *__symbol_get_gpl(const char *symbol); | |||
193 | __attribute__((section("__ksymtab_strings"))) \ | 193 | __attribute__((section("__ksymtab_strings"))) \ |
194 | = MODULE_SYMBOL_PREFIX #sym; \ | 194 | = MODULE_SYMBOL_PREFIX #sym; \ |
195 | static const struct kernel_symbol __ksymtab_##sym \ | 195 | static const struct kernel_symbol __ksymtab_##sym \ |
196 | __attribute_used__ \ | 196 | __used \ |
197 | __attribute__((section("__ksymtab" sec), unused)) \ | 197 | __attribute__((section("__ksymtab" sec), unused)) \ |
198 | = { (unsigned long)&sym, __kstrtab_##sym } | 198 | = { (unsigned long)&sym, __kstrtab_##sym } |
199 | 199 | ||
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index 13410b20600f..8126e55c5bdc 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
@@ -18,7 +18,7 @@ | |||
18 | #define __module_cat(a,b) ___module_cat(a,b) | 18 | #define __module_cat(a,b) ___module_cat(a,b) |
19 | #define __MODULE_INFO(tag, name, info) \ | 19 | #define __MODULE_INFO(tag, name, info) \ |
20 | static const char __module_cat(name,__LINE__)[] \ | 20 | static const char __module_cat(name,__LINE__)[] \ |
21 | __attribute_used__ \ | 21 | __used \ |
22 | __attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info | 22 | __attribute__((section(".modinfo"),unused)) = __stringify(tag) "=" info |
23 | #else /* !MODULE */ | 23 | #else /* !MODULE */ |
24 | #define __MODULE_INFO(tag, name, info) | 24 | #define __MODULE_INFO(tag, name, info) |
@@ -72,7 +72,7 @@ struct kparam_array | |||
72 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)); \ | 72 | BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)); \ |
73 | static const char __param_str_##name[] = prefix #name; \ | 73 | static const char __param_str_##name[] = prefix #name; \ |
74 | static struct kernel_param const __param_##name \ | 74 | static struct kernel_param const __param_##name \ |
75 | __attribute_used__ \ | 75 | __used \ |
76 | __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ | 76 | __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ |
77 | = { __param_str_##name, perm, set, get, { arg } } | 77 | = { __param_str_##name, perm, set, get, { arg } } |
78 | 78 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index 0dd93bb62fbe..ae1006322f80 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -867,7 +867,7 @@ enum pci_fixup_pass { | |||
867 | 867 | ||
868 | /* Anonymous variables would be nice... */ | 868 | /* Anonymous variables would be nice... */ |
869 | #define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, hook) \ | 869 | #define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, hook) \ |
870 | static const struct pci_fixup __pci_fixup_##name __attribute_used__ \ | 870 | static const struct pci_fixup __pci_fixup_##name __used \ |
871 | __attribute__((__section__(#section))) = { vendor, device, hook }; | 871 | __attribute__((__section__(#section))) = { vendor, device, hook }; |
872 | #define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \ | 872 | #define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \ |
873 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \ | 873 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \ |