Blame view
include/linux/module.h
18 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 |
#ifndef _LINUX_MODULE_H #define _LINUX_MODULE_H /* * Dynamic loading of modules into the kernel. * * Rewritten by Richard Henderson <rth@tamu.edu> Dec 1996 * Rewritten again by Rusty Russell, 2002 */ |
1da177e4c Linux-2.6.12-rc2 |
9 10 11 12 13 14 15 16 17 |
#include <linux/list.h> #include <linux/stat.h> #include <linux/compiler.h> #include <linux/cache.h> #include <linux/kmod.h> #include <linux/elf.h> #include <linux/stringify.h> #include <linux/kobject.h> #include <linux/moduleparam.h> |
97e1c18e8 tracing: Kernel T... |
18 |
#include <linux/tracepoint.h> |
f50169324 module.h: split o... |
19 |
#include <linux/export.h> |
1da177e4c Linux-2.6.12-rc2 |
20 |
|
e1783a240 module: Use this_... |
21 |
#include <linux/percpu.h> |
1da177e4c Linux-2.6.12-rc2 |
22 |
#include <asm/module.h> |
7ead8b831 tracing/events: A... |
23 |
#include <trace/events/module.h> |
1da177e4c Linux-2.6.12-rc2 |
24 25 |
/* Not Yet Implemented */ #define MODULE_SUPPORTED_DEVICE(name) |
730b69d22 module: check ker... |
26 |
#define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN |
1da177e4c Linux-2.6.12-rc2 |
27 |
|
1da177e4c Linux-2.6.12-rc2 |
28 29 30 31 32 33 34 |
struct modversion_info { unsigned long crc; char name[MODULE_NAME_LEN]; }; struct module; |
4befb026c module: change at... |
35 36 37 38 39 40 |
struct module_kobject { struct kobject kobj; struct module *mod; struct kobject *drivers_dir; struct module_param_attrs *mp; }; |
1da177e4c Linux-2.6.12-rc2 |
41 |
struct module_attribute { |
4befb026c module: change at... |
42 43 44 45 |
struct attribute attr; ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *); ssize_t (*store)(struct module_attribute *, struct module_kobject *, |
1da177e4c Linux-2.6.12-rc2 |
46 |
const char *, size_t count); |
c988d2b28 [PATCH] modules: ... |
47 48 49 |
void (*setup)(struct module *, const char *); int (*test)(struct module *); void (*free)(struct module *); |
1da177e4c Linux-2.6.12-rc2 |
50 |
}; |
e94965ed5 module: show vers... |
51 52 53 54 |
struct module_version_attribute { struct module_attribute mattr; const char *module_name; const char *version; |
98562ad8c module: explicitl... |
55 |
} __attribute__ ((__aligned__(sizeof(void *)))); |
e94965ed5 module: show vers... |
56 |
|
9b73a5840 module: do not hi... |
57 |
extern ssize_t __modver_version_show(struct module_attribute *, |
4befb026c module: change at... |
58 |
struct module_kobject *, char *); |
9b73a5840 module: do not hi... |
59 |
|
88bfa3247 module: add /sys/... |
60 |
extern struct module_attribute module_uevent; |
1da177e4c Linux-2.6.12-rc2 |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
/* These are either module local, or the kernel's dummy ones. */ extern int init_module(void); extern void cleanup_module(void); /* Archs provide a method of finding the correct exception table. */ struct exception_table_entry; const struct exception_table_entry * search_extable(const struct exception_table_entry *first, const struct exception_table_entry *last, unsigned long value); void sort_extable(struct exception_table_entry *start, struct exception_table_entry *finish); void sort_main_extable(void); |
ad6561dff module: trim exce... |
76 |
void trim_init_extable(struct module *m); |
1da177e4c Linux-2.6.12-rc2 |
77 |
|
1da177e4c Linux-2.6.12-rc2 |
78 79 80 81 |
#ifdef MODULE #define MODULE_GENERIC_TABLE(gtype,name) \ extern const struct gtype##_id __mod_##gtype##_table \ __attribute__ ((unused, alias(__stringify(name)))) |
1da177e4c Linux-2.6.12-rc2 |
82 83 |
#else /* !MODULE */ #define MODULE_GENERIC_TABLE(gtype,name) |
1da177e4c Linux-2.6.12-rc2 |
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
#endif /* Generic info of form tag = "info" */ #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info) /* For userspace: you can also call me... */ #define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias) /* * The following license idents are currently accepted as indicating free * software modules * * "GPL" [GNU Public License v2 or later] * "GPL v2" [GNU Public License v2] * "GPL and additional rights" [GNU Public License v2 rights and more] * "Dual BSD/GPL" [GNU Public License v2 * or BSD license choice] |
8d27e9084 [PATCH] module.h:... |
101 102 |
* "Dual MIT/GPL" [GNU Public License v2 * or MIT license choice] |
1da177e4c Linux-2.6.12-rc2 |
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
* "Dual MPL/GPL" [GNU Public License v2 * or Mozilla license choice] * * The following other idents are available * * "Proprietary" [Non free products] * * There are dual licensed components, but when running with Linux it is the * GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL * is a GPL combined work. * * This exists for several reasons * 1. So modinfo can show license info for users wanting to vet their setup * is free * 2. So the community can ignore bug reports including proprietary modules * 3. So vendors can do likewise based on their own policies */ #define MODULE_LICENSE(_license) MODULE_INFO(license, _license) |
1d7015caa module: preferred... |
121 122 123 124 |
/* * Author(s), use "Name <email>" or just "Name", for multiple * authors use multiple MODULE_AUTHOR() statements/lines. */ |
1da177e4c Linux-2.6.12-rc2 |
125 126 127 128 |
#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) /* What your module does. */ #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description) |
1da177e4c Linux-2.6.12-rc2 |
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
#define MODULE_DEVICE_TABLE(type,name) \ MODULE_GENERIC_TABLE(type##_device,name) /* Version of form [<epoch>:]<version>[-<extra-version>]. Or for CVS/RCS ID version, everything but the number is stripped. <epoch>: A (small) unsigned integer which allows you to start versions anew. If not mentioned, it's zero. eg. "2:1.0" is after "1:2.0". <version>: The <version> may contain only alphanumerics and the character `.'. Ordered by numeric sort for numeric parts, ascii sort for ascii parts (as per RPM or DEB algorithm). <extraversion>: Like <version>, but inserted for local customizations, eg "rh3" or "rusty1". Using this automatically adds a checksum of the .c files and the local headers in "srcversion". */ |
e94965ed5 module: show vers... |
146 |
|
3b90a5b29 module: fix linke... |
147 |
#if defined(MODULE) || !defined(CONFIG_SYSFS) |
1da177e4c Linux-2.6.12-rc2 |
148 |
#define MODULE_VERSION(_version) MODULE_INFO(version, _version) |
e94965ed5 module: show vers... |
149 150 |
#else #define MODULE_VERSION(_version) \ |
b4bc84280 module: deal with... |
151 |
static struct module_version_attribute ___modver_attr = { \ |
e94965ed5 module: show vers... |
152 153 154 155 156 157 158 159 160 |
.mattr = { \ .attr = { \ .name = "version", \ .mode = S_IRUGO, \ }, \ .show = __modver_version_show, \ }, \ .module_name = KBUILD_MODNAME, \ .version = _version, \ |
b4bc84280 module: deal with... |
161 162 163 164 |
}; \ static const struct module_version_attribute \ __used __attribute__ ((__section__ ("__modver"))) \ * __moduleparam_const __modver_attr = &___modver_attr |
e94965ed5 module: show vers... |
165 |
#endif |
1da177e4c Linux-2.6.12-rc2 |
166 |
|
187afbed1 [SCSI] MODULE_FIR... |
167 168 169 170 |
/* Optional firmware file (or files) needed by the module * format is simply firmware file name. Multiple firmware * files require multiple MODULE_FIRMWARE() specifiers */ #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) |
1da177e4c Linux-2.6.12-rc2 |
171 172 173 174 175 176 |
/* Given an address, look for it in the exception tables */ const struct exception_table_entry *search_exception_tables(unsigned long add); struct notifier_block; #ifdef CONFIG_MODULES |
5ed109103 sysctl extern cle... |
177 |
extern int modules_disabled; /* for sysctl */ |
1da177e4c Linux-2.6.12-rc2 |
178 179 180 181 |
/* Get/put a kernel symbol (calls must be symmetric) */ void *__symbol_get(const char *symbol); void *__symbol_get_gpl(const char *symbol); #define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x))) |
c8e21ced0 module: fix kdb's... |
182 183 184 185 186 187 |
/* modules using other modules: kdb wants to see this. */ struct module_use { struct list_head source_list; struct list_head target_list; struct module *source, *target; }; |
1da177e4c Linux-2.6.12-rc2 |
188 189 190 191 192 193 |
enum module_state { MODULE_STATE_LIVE, MODULE_STATE_COMING, MODULE_STATE_GOING, }; |
bd77c0477 module: struct mo... |
194 195 196 197 198 199 200 201 202 203 204 205 206 |
/** * struct module_ref - per cpu module reference counts * @incs: number of module get on this cpu * @decs: number of module put on this cpu * * We force an alignment on 8 or 16 bytes, so that alloc_percpu() * put @incs/@decs in same cache line, with no extra memory cost, * since alloc_percpu() is fine grained. */ struct module_ref { unsigned long incs; unsigned long decs; } __attribute((aligned(2 * sizeof(unsigned long)))); |
1da177e4c Linux-2.6.12-rc2 |
207 208 209 210 211 212 213 214 215 216 217 218 |
struct module { enum module_state state; /* Member of list of modules */ struct list_head list; /* Unique handle for this module */ char name[MODULE_NAME_LEN]; /* Sysfs stuff. */ struct module_kobject mkobj; |
03e88ae1b [PATCH] fix modul... |
219 |
struct module_attribute *modinfo_attrs; |
c988d2b28 [PATCH] modules: ... |
220 221 |
const char *version; const char *srcversion; |
270a6c4ca /sys/modules/*/ho... |
222 |
struct kobject *holders_dir; |
1da177e4c Linux-2.6.12-rc2 |
223 224 225 |
/* Exported symbols */ const struct kernel_symbol *syms; |
1da177e4c Linux-2.6.12-rc2 |
226 |
const unsigned long *crcs; |
af5406895 module: reorder s... |
227 |
unsigned int num_syms; |
1da177e4c Linux-2.6.12-rc2 |
228 |
|
e180a6b77 param: fix charp ... |
229 230 231 |
/* Kernel parameters. */ struct kernel_param *kp; unsigned int num_kp; |
1da177e4c Linux-2.6.12-rc2 |
232 |
/* GPL-only exported symbols. */ |
1da177e4c Linux-2.6.12-rc2 |
233 |
unsigned int num_gpl_syms; |
af5406895 module: reorder s... |
234 |
const struct kernel_symbol *gpl_syms; |
1da177e4c Linux-2.6.12-rc2 |
235 |
const unsigned long *gpl_crcs; |
f7f5b6755 Shrink struct mod... |
236 |
#ifdef CONFIG_UNUSED_SYMBOLS |
f71d20e96 [PATCH] Add EXPOR... |
237 238 |
/* unused exported symbols. */ const struct kernel_symbol *unused_syms; |
f71d20e96 [PATCH] Add EXPOR... |
239 |
const unsigned long *unused_crcs; |
af5406895 module: reorder s... |
240 |
unsigned int num_unused_syms; |
f71d20e96 [PATCH] Add EXPOR... |
241 |
/* GPL-only, unused exported symbols. */ |
f71d20e96 [PATCH] Add EXPOR... |
242 |
unsigned int num_unused_gpl_syms; |
af5406895 module: reorder s... |
243 |
const struct kernel_symbol *unused_gpl_syms; |
f71d20e96 [PATCH] Add EXPOR... |
244 |
const unsigned long *unused_gpl_crcs; |
f7f5b6755 Shrink struct mod... |
245 |
#endif |
f71d20e96 [PATCH] Add EXPOR... |
246 |
|
9f28bb7e1 [PATCH] add EXPOR... |
247 248 |
/* symbols that will be GPL-only in the near future. */ const struct kernel_symbol *gpl_future_syms; |
9f28bb7e1 [PATCH] add EXPOR... |
249 |
const unsigned long *gpl_future_crcs; |
af5406895 module: reorder s... |
250 |
unsigned int num_gpl_future_syms; |
9f28bb7e1 [PATCH] add EXPOR... |
251 |
|
1da177e4c Linux-2.6.12-rc2 |
252 253 |
/* Exception table */ unsigned int num_exentries; |
5e458cc0f module: simplify ... |
254 |
struct exception_table_entry *extable; |
1da177e4c Linux-2.6.12-rc2 |
255 256 257 258 259 260 261 262 263 264 265 |
/* Startup function. */ int (*init)(void); /* If this is non-NULL, vfree after init() returns */ void *module_init; /* Here is the actual code + data, vfree'd on unload. */ void *module_core; /* Here are the sizes of the init and core sections */ |
2f0f2a334 module: turn long... |
266 |
unsigned int init_size, core_size; |
1da177e4c Linux-2.6.12-rc2 |
267 268 |
/* The size of the executable code in each section. */ |
2f0f2a334 module: turn long... |
269 |
unsigned int init_text_size, core_text_size; |
1da177e4c Linux-2.6.12-rc2 |
270 |
|
84e1c6bb3 x86: Add RO/NX pr... |
271 272 |
/* Size of RO sections of the module (text+rodata) */ unsigned int init_ro_size, core_ro_size; |
1da177e4c Linux-2.6.12-rc2 |
273 274 |
/* Arch-specific module values */ struct mod_arch_specific arch; |
2bc2d61a9 [PATCH] list modu... |
275 |
unsigned int taints; /* same bits as kernel:tainted */ |
7664c5a1d [PATCH] Generic B... |
276 277 |
#ifdef CONFIG_GENERIC_BUG /* Support for BUG */ |
af5406895 module: reorder s... |
278 |
unsigned num_bugs; |
7664c5a1d [PATCH] Generic B... |
279 280 |
struct list_head bug_list; struct bug_entry *bug_table; |
1da177e4c Linux-2.6.12-rc2 |
281 282 283 |
#endif #ifdef CONFIG_KALLSYMS |
4a4962263 module: reduce sy... |
284 285 286 287 288 289 290 |
/* * We keep the symbol and string tables for kallsyms. * The core_* fields below are temporary, loader-only (they * could really be discarded after module init). */ Elf_Sym *symtab, *core_symtab; unsigned int num_symtab, core_num_syms; |
554bdfe5a module: reduce st... |
291 |
char *strtab, *core_strtab; |
1da177e4c Linux-2.6.12-rc2 |
292 293 294 |
/* Section attributes */ struct module_sect_attrs *sect_attrs; |
6d7601338 Add /sys/module/n... |
295 296 297 |
/* Notes attributes */ struct module_notes_attrs *notes_attrs; |
1da177e4c Linux-2.6.12-rc2 |
298 |
#endif |
a288bd651 module: remove 64... |
299 300 301 |
/* The command line arguments (may be mangled). People like keeping pointers to this stuff */ char *args; |
259354dea module: encapsula... |
302 |
#ifdef CONFIG_SMP |
1da177e4c Linux-2.6.12-rc2 |
303 |
/* Per-cpu data. */ |
259354dea module: encapsula... |
304 305 306 |
void __percpu *percpu; unsigned int percpu_size; #endif |
1da177e4c Linux-2.6.12-rc2 |
307 |
|
97e1c18e8 tracing: Kernel T... |
308 |
#ifdef CONFIG_TRACEPOINTS |
97e1c18e8 tracing: Kernel T... |
309 |
unsigned int num_tracepoints; |
a288bd651 module: remove 64... |
310 |
struct tracepoint * const *tracepoints_ptrs; |
97e1c18e8 tracing: Kernel T... |
311 |
#endif |
bf5438fca jump label: Base ... |
312 313 314 315 |
#ifdef HAVE_JUMP_LABEL struct jump_entry *jump_entries; unsigned int num_jump_entries; #endif |
769b0441f tracing/core: dro... |
316 |
#ifdef CONFIG_TRACING |
1ba28e02a tracing: add trac... |
317 |
unsigned int num_trace_bprintk_fmt; |
a288bd651 module: remove 64... |
318 |
const char **trace_bprintk_fmt_start; |
1ba28e02a tracing: add trac... |
319 |
#endif |
6d723736e tracing/events: a... |
320 |
#ifdef CONFIG_EVENT_TRACING |
e4a9ea5ee tracing: Replace ... |
321 |
struct ftrace_event_call **trace_events; |
6d723736e tracing/events: a... |
322 323 |
unsigned int num_trace_events; #endif |
93eb677d7 ftrace: use modul... |
324 |
#ifdef CONFIG_FTRACE_MCOUNT_RECORD |
93eb677d7 ftrace: use modul... |
325 |
unsigned int num_ftrace_callsites; |
a288bd651 module: remove 64... |
326 |
unsigned long *ftrace_callsites; |
93eb677d7 ftrace: use modul... |
327 |
#endif |
1ba28e02a tracing: add trac... |
328 |
|
af5406895 module: reorder s... |
329 330 |
#ifdef CONFIG_MODULE_UNLOAD /* What modules depend on me? */ |
2c02dfe7f module: Make the ... |
331 332 333 |
struct list_head source_list; /* What modules do I depend on? */ struct list_head target_list; |
af5406895 module: reorder s... |
334 335 336 337 338 339 |
/* Who is waiting for us to be unloaded */ struct task_struct *waiter; /* Destruction function. */ void (*exit)(void); |
bd77c0477 module: struct mo... |
340 |
struct module_ref __percpu *refptr; |
af5406895 module: reorder s... |
341 |
#endif |
b99b87f70 kernel: construct... |
342 343 344 345 346 347 |
#ifdef CONFIG_CONSTRUCTORS /* Constructor functions. */ ctor_fn_t *ctors; unsigned int num_ctors; #endif |
1da177e4c Linux-2.6.12-rc2 |
348 |
}; |
e61a1c1c4 Allow arch to ini... |
349 350 351 |
#ifndef MODULE_ARCH_INIT #define MODULE_ARCH_INIT {} #endif |
1da177e4c Linux-2.6.12-rc2 |
352 |
|
c6b378019 module: Export sy... |
353 |
extern struct mutex module_mutex; |
1da177e4c Linux-2.6.12-rc2 |
354 355 356 357 358 359 360 |
/* FIXME: It'd be nice to isolate modules during init, too, so they aren't used before they (may) fail. But presently too much code (IDE & SCSI) require entry into the module during init.*/ static inline int module_is_live(struct module *mod) { return mod->state != MODULE_STATE_GOING; } |
1da177e4c Linux-2.6.12-rc2 |
361 |
struct module *__module_text_address(unsigned long addr); |
e610499e2 module: __module_... |
362 363 |
struct module *__module_address(unsigned long addr); bool is_module_address(unsigned long addr); |
10fad5e46 percpu, module: i... |
364 |
bool is_module_percpu_address(unsigned long addr); |
e610499e2 module: __module_... |
365 |
bool is_module_text_address(unsigned long addr); |
1da177e4c Linux-2.6.12-rc2 |
366 |
|
a06f6211e module: add withi... |
367 368 369 370 371 372 373 374 375 376 377 |
static inline int within_module_core(unsigned long addr, struct module *mod) { return (unsigned long)mod->module_core <= addr && addr < (unsigned long)mod->module_core + mod->core_size; } static inline int within_module_init(unsigned long addr, struct module *mod) { return (unsigned long)mod->module_init <= addr && addr < (unsigned long)mod->module_init + mod->init_size; } |
c6b378019 module: Export sy... |
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 |
/* Search for module by name: must hold module_mutex. */ struct module *find_module(const char *name); struct symsearch { const struct kernel_symbol *start, *stop; const unsigned long *crcs; enum { NOT_GPL_ONLY, GPL_ONLY, WILL_BE_GPL_ONLY, } licence; bool unused; }; /* Search for an exported symbol by name. */ const struct kernel_symbol *find_symbol(const char *name, struct module **owner, const unsigned long **crc, bool gplok, bool warn); /* Walk the exported symbol table */ |
de4d8d534 module: each_symb... |
400 401 402 |
bool each_symbol_section(bool (*fn)(const struct symsearch *arr, struct module *owner, void *data), void *data); |
c6b378019 module: Export sy... |
403 |
|
ea07890a6 Fix race between ... |
404 |
/* Returns 0 and fills in value, defined and namebuf, or -ERANGE if |
1da177e4c Linux-2.6.12-rc2 |
405 |
symnum out of range. */ |
ea07890a6 Fix race between ... |
406 407 |
int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type, char *name, char *module_name, int *exported); |
1da177e4c Linux-2.6.12-rc2 |
408 409 410 |
/* Look for this name: can be of form module:name. */ unsigned long module_kallsyms_lookup_name(const char *name); |
75a66614d Ksplice: Add func... |
411 412 413 |
int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *, unsigned long), void *data); |
1da177e4c Linux-2.6.12-rc2 |
414 415 416 417 418 |
extern void __module_put_and_exit(struct module *mod, long code) __attribute__((noreturn)); #define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code); #ifdef CONFIG_MODULE_UNLOAD |
bd77c0477 module: struct mo... |
419 |
unsigned long module_refcount(struct module *mod); |
1da177e4c Linux-2.6.12-rc2 |
420 421 422 423 424 425 426 427 428 |
void __symbol_put(const char *symbol); #define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x) void symbol_put_addr(void *addr); /* Sometimes we know we already have a refcount, and it's easier not to handle the error case (which only happens with rmmod --wait). */ static inline void __module_get(struct module *module) { if (module) { |
e1783a240 module: Use this_... |
429 |
preempt_disable(); |
5fbfb18d7 Fix up possibly r... |
430 |
__this_cpu_inc(module->refptr->incs); |
ae832d1e0 tracing: Remove s... |
431 |
trace_module_get(module, _THIS_IP_); |
e1783a240 module: Use this_... |
432 |
preempt_enable(); |
1da177e4c Linux-2.6.12-rc2 |
433 434 435 436 437 438 439 440 |
} } static inline int try_module_get(struct module *module) { int ret = 1; if (module) { |
e1783a240 module: Use this_... |
441 |
preempt_disable(); |
7ead8b831 tracing/events: A... |
442 |
if (likely(module_is_live(module))) { |
5fbfb18d7 Fix up possibly r... |
443 |
__this_cpu_inc(module->refptr->incs); |
ae832d1e0 tracing: Remove s... |
444 |
trace_module_get(module, _THIS_IP_); |
5fbfb18d7 Fix up possibly r... |
445 |
} else |
1da177e4c Linux-2.6.12-rc2 |
446 |
ret = 0; |
e1783a240 module: Use this_... |
447 448 |
preempt_enable(); |
1da177e4c Linux-2.6.12-rc2 |
449 450 451 |
} return ret; } |
f6a570333 [PATCH] severing ... |
452 |
extern void module_put(struct module *module); |
1da177e4c Linux-2.6.12-rc2 |
453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 |
#else /*!CONFIG_MODULE_UNLOAD*/ static inline int try_module_get(struct module *module) { return !module || module_is_live(module); } static inline void module_put(struct module *module) { } static inline void __module_get(struct module *module) { } #define symbol_put(x) do { } while(0) #define symbol_put_addr(p) do { } while(0) #endif /* CONFIG_MODULE_UNLOAD */ |
dfd62d1d8 module: Update pr... |
469 |
int ref_module(struct module *a, struct module *b); |
1da177e4c Linux-2.6.12-rc2 |
470 471 472 473 474 475 476 |
/* This is a #define so the string doesn't get put in every .o file */ #define module_name(mod) \ ({ \ struct module *__mod = (mod); \ __mod ? __mod->name : "kernel"; \ }) |
6dd06c9fb module: make modu... |
477 478 479 |
/* For kallsyms to ask for address resolution. namebuf should be at * least KSYM_NAME_LEN long: a pointer to namebuf is returned if * found, otherwise NULL. */ |
92dfc9dc7 fix "modules: mak... |
480 |
const char *module_address_lookup(unsigned long addr, |
6dd06c9fb module: make modu... |
481 482 483 484 |
unsigned long *symbolsize, unsigned long *offset, char **modname, char *namebuf); |
9d65cb4a1 Fix race between ... |
485 |
int lookup_module_symbol_name(unsigned long addr, char *symname); |
a5c43dae7 Fix race between ... |
486 |
int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name); |
1da177e4c Linux-2.6.12-rc2 |
487 488 489 490 491 492 493 494 |
/* For extable.c to search modules' exception tables. */ const struct exception_table_entry *search_module_extables(unsigned long addr); int register_module_notifier(struct notifier_block * nb); int unregister_module_notifier(struct notifier_block * nb); extern void print_modules(void); |
1da177e4c Linux-2.6.12-rc2 |
495 |
#else /* !CONFIG_MODULES... */ |
1da177e4c Linux-2.6.12-rc2 |
496 497 498 499 500 501 502 |
/* Given an address, look for it in the exception tables. */ static inline const struct exception_table_entry * search_module_extables(unsigned long addr) { return NULL; } |
e610499e2 module: __module_... |
503 504 505 506 |
static inline struct module *__module_address(unsigned long addr) { return NULL; } |
1da177e4c Linux-2.6.12-rc2 |
507 508 509 510 |
static inline struct module *__module_text_address(unsigned long addr) { return NULL; } |
e610499e2 module: __module_... |
511 512 513 514 |
static inline bool is_module_address(unsigned long addr) { return false; } |
d5e50daf9 module: add stub ... |
515 516 517 518 |
static inline bool is_module_percpu_address(unsigned long addr) { return false; } |
e610499e2 module: __module_... |
519 |
static inline bool is_module_text_address(unsigned long addr) |
4d435f9d8 [PATCH] lockdep: ... |
520 |
{ |
e610499e2 module: __module_... |
521 |
return false; |
4d435f9d8 [PATCH] lockdep: ... |
522 |
} |
1da177e4c Linux-2.6.12-rc2 |
523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 |
/* Get/put a kernel symbol (calls should be symmetric) */ #define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); }) #define symbol_put(x) do { } while(0) #define symbol_put_addr(x) do { } while(0) static inline void __module_get(struct module *module) { } static inline int try_module_get(struct module *module) { return 1; } static inline void module_put(struct module *module) { } #define module_name(mod) "kernel" |
1da177e4c Linux-2.6.12-rc2 |
542 |
/* For kallsyms to ask for address resolution. NULL means not found. */ |
92dfc9dc7 fix "modules: mak... |
543 |
static inline const char *module_address_lookup(unsigned long addr, |
6dd06c9fb module: make modu... |
544 545 546 547 |
unsigned long *symbolsize, unsigned long *offset, char **modname, char *namebuf) |
1da177e4c Linux-2.6.12-rc2 |
548 549 550 |
{ return NULL; } |
9d65cb4a1 Fix race between ... |
551 552 553 554 |
static inline int lookup_module_symbol_name(unsigned long addr, char *symname) { return -ERANGE; } |
a5c43dae7 Fix race between ... |
555 556 557 558 |
static inline int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name) { return -ERANGE; } |
ea07890a6 Fix race between ... |
559 560 561 |
static inline int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type, char *name, char *module_name, int *exported) |
1da177e4c Linux-2.6.12-rc2 |
562 |
{ |
ea07890a6 Fix race between ... |
563 |
return -ERANGE; |
1da177e4c Linux-2.6.12-rc2 |
564 565 566 567 568 569 |
} static inline unsigned long module_kallsyms_lookup_name(const char *name) { return 0; } |
75a66614d Ksplice: Add func... |
570 571 572 573 574 575 576 |
static inline int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *, unsigned long), void *data) { return 0; } |
1da177e4c Linux-2.6.12-rc2 |
577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 |
static inline int register_module_notifier(struct notifier_block * nb) { /* no events will happen anyway, so this can always succeed */ return 0; } static inline int unregister_module_notifier(struct notifier_block * nb) { return 0; } #define module_put_and_exit(code) do_exit(code) static inline void print_modules(void) { } |
ef665c1a0 sysfs: fix build ... |
593 |
#endif /* CONFIG_MODULES */ |
ef665c1a0 sysfs: fix build ... |
594 |
#ifdef CONFIG_SYSFS |
7405c1e15 kset: convert /sy... |
595 596 597 |
extern struct kset *module_kset; extern struct kobj_type module_ktype; extern int module_sysfs_initialized; |
ef665c1a0 sysfs: fix build ... |
598 |
#endif /* CONFIG_SYSFS */ |
1da177e4c Linux-2.6.12-rc2 |
599 600 601 |
#define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x) /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */ |
1da177e4c Linux-2.6.12-rc2 |
602 |
#define __MODULE_STRING(x) __stringify(x) |
84e1c6bb3 x86: Add RO/NX pr... |
603 604 605 606 607 608 609 |
#ifdef CONFIG_DEBUG_SET_MODULE_RONX extern void set_all_modules_text_rw(void); extern void set_all_modules_text_ro(void); #else static inline void set_all_modules_text_rw(void) { } static inline void set_all_modules_text_ro(void) { } #endif |
0d9c25dde headers: move mod... |
610 611 |
#ifdef CONFIG_GENERIC_BUG |
5336377d6 modules: Fix modu... |
612 |
void module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *, |
0d9c25dde headers: move mod... |
613 614 615 616 |
struct module *); void module_bug_cleanup(struct module *); #else /* !CONFIG_GENERIC_BUG */ |
5336377d6 modules: Fix modu... |
617 |
static inline void module_bug_finalize(const Elf_Ehdr *hdr, |
0d9c25dde headers: move mod... |
618 619 620 |
const Elf_Shdr *sechdrs, struct module *mod) { |
0d9c25dde headers: move mod... |
621 622 623 |
} static inline void module_bug_cleanup(struct module *mod) {} #endif /* CONFIG_GENERIC_BUG */ |
1da177e4c Linux-2.6.12-rc2 |
624 |
#endif /* _LINUX_MODULE_H */ |