Blame view
include/linux/module.h
18.7 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> |
1da177e4c Linux-2.6.12-rc2 |
19 |
|
e1783a240 module: Use this_... |
20 |
#include <linux/percpu.h> |
1da177e4c Linux-2.6.12-rc2 |
21 |
#include <asm/module.h> |
7ead8b831 tracing/events: A... |
22 |
#include <trace/events/module.h> |
1da177e4c Linux-2.6.12-rc2 |
23 24 |
/* Not Yet Implemented */ #define MODULE_SUPPORTED_DEVICE(name) |
9e1b9b807 module: make MODU... |
25 26 27 28 |
/* Some toolchains use a `_' prefix for all user symbols. */ #ifdef CONFIG_SYMBOL_PREFIX #define MODULE_SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX #else |
1da177e4c Linux-2.6.12-rc2 |
29 30 |
#define MODULE_SYMBOL_PREFIX "" #endif |
730b69d22 module: check ker... |
31 |
#define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN |
1da177e4c Linux-2.6.12-rc2 |
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
struct kernel_symbol { unsigned long value; const char *name; }; struct modversion_info { unsigned long crc; char name[MODULE_NAME_LEN]; }; struct module; struct module_attribute { struct attribute attr; ssize_t (*show)(struct module_attribute *, struct module *, char *); ssize_t (*store)(struct module_attribute *, struct module *, const char *, size_t count); |
c988d2b28 [PATCH] modules: ... |
52 53 54 |
void (*setup)(struct module *, const char *); int (*test)(struct module *); void (*free)(struct module *); |
1da177e4c Linux-2.6.12-rc2 |
55 56 57 58 59 60 |
}; struct module_kobject { struct kobject kobj; struct module *mod; |
f30c53a87 MODULES: add the ... |
61 |
struct kobject *drivers_dir; |
9b473de87 param: Fix duplic... |
62 |
struct module_param_attrs *mp; |
1da177e4c Linux-2.6.12-rc2 |
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
}; /* 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... |
79 |
void trim_init_extable(struct module *m); |
1da177e4c Linux-2.6.12-rc2 |
80 |
|
1da177e4c Linux-2.6.12-rc2 |
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
#ifdef MODULE #define MODULE_GENERIC_TABLE(gtype,name) \ extern const struct gtype##_id __mod_##gtype##_table \ __attribute__ ((unused, alias(__stringify(name)))) extern struct module __this_module; #define THIS_MODULE (&__this_module) #else /* !MODULE */ #define MODULE_GENERIC_TABLE(gtype,name) #define THIS_MODULE ((struct module *)0) #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:... |
108 109 |
* "Dual MIT/GPL" [GNU Public License v2 * or MIT license choice] |
1da177e4c Linux-2.6.12-rc2 |
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
* "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... |
128 129 130 131 |
/* * Author(s), use "Name <email>" or just "Name", for multiple * authors use multiple MODULE_AUTHOR() statements/lines. */ |
1da177e4c Linux-2.6.12-rc2 |
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) /* What your module does. */ #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description) /* One for each parameter, describing how to use it. Some files do multiple of these per line, so can't just use MODULE_INFO. */ #define MODULE_PARM_DESC(_parm, desc) \ __MODULE_INFO(parm, _parm, #_parm ":" desc) #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". */ #define MODULE_VERSION(_version) MODULE_INFO(version, _version) |
187afbed1 [SCSI] MODULE_FIR... |
160 161 162 163 |
/* 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 |
164 165 166 167 168 169 |
/* 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... |
170 |
extern int modules_disabled; /* for sysctl */ |
1da177e4c Linux-2.6.12-rc2 |
171 172 173 174 |
/* 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... |
175 176 177 178 179 180 |
/* 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 |
181 182 183 184 185 186 187 |
#ifndef __GENKSYMS__ #ifdef CONFIG_MODVERSIONS /* Mark the CRC weak since genksyms apparently decides not to * generate a checksums for some symbols */ #define __CRC_SYMBOL(sym, sec) \ extern void *__crc_##sym __attribute__((weak)); \ static const unsigned long __kcrctab_##sym \ |
3ff6eecca remove __attribut... |
188 |
__used \ |
1da177e4c Linux-2.6.12-rc2 |
189 190 191 192 193 194 195 196 |
__attribute__((section("__kcrctab" sec), unused)) \ = (unsigned long) &__crc_##sym; #else #define __CRC_SYMBOL(sym, sec) #endif /* For every exported symbol, place a struct in the __ksymtab section */ #define __EXPORT_SYMBOL(sym, sec) \ |
a1a8feed1 [MODULES]: Don't ... |
197 |
extern typeof(sym) sym; \ |
1da177e4c Linux-2.6.12-rc2 |
198 199 |
__CRC_SYMBOL(sym, sec) \ static const char __kstrtab_##sym[] \ |
ea01e798e module: reduce mo... |
200 |
__attribute__((section("__ksymtab_strings"), aligned(1))) \ |
1da177e4c Linux-2.6.12-rc2 |
201 202 |
= MODULE_SYMBOL_PREFIX #sym; \ static const struct kernel_symbol __ksymtab_##sym \ |
3ff6eecca remove __attribut... |
203 |
__used \ |
1da177e4c Linux-2.6.12-rc2 |
204 205 206 207 208 209 210 211 |
__attribute__((section("__ksymtab" sec), unused)) \ = { (unsigned long)&sym, __kstrtab_##sym } #define EXPORT_SYMBOL(sym) \ __EXPORT_SYMBOL(sym, "") #define EXPORT_SYMBOL_GPL(sym) \ __EXPORT_SYMBOL(sym, "_gpl") |
9f28bb7e1 [PATCH] add EXPOR... |
212 213 |
#define EXPORT_SYMBOL_GPL_FUTURE(sym) \ __EXPORT_SYMBOL(sym, "_gpl_future") |
f71d20e96 [PATCH] Add EXPOR... |
214 215 216 217 218 219 220 221 |
#ifdef CONFIG_UNUSED_SYMBOLS #define EXPORT_UNUSED_SYMBOL(sym) __EXPORT_SYMBOL(sym, "_unused") #define EXPORT_UNUSED_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_unused_gpl") #else #define EXPORT_UNUSED_SYMBOL(sym) #define EXPORT_UNUSED_SYMBOL_GPL(sym) #endif |
1da177e4c Linux-2.6.12-rc2 |
222 |
#endif |
1da177e4c Linux-2.6.12-rc2 |
223 224 225 226 227 228 |
enum module_state { MODULE_STATE_LIVE, MODULE_STATE_COMING, MODULE_STATE_GOING, }; |
1da177e4c Linux-2.6.12-rc2 |
229 230 231 232 233 234 235 236 237 238 239 240 |
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... |
241 |
struct module_attribute *modinfo_attrs; |
c988d2b28 [PATCH] modules: ... |
242 243 |
const char *version; const char *srcversion; |
270a6c4ca /sys/modules/*/ho... |
244 |
struct kobject *holders_dir; |
1da177e4c Linux-2.6.12-rc2 |
245 246 247 |
/* Exported symbols */ const struct kernel_symbol *syms; |
1da177e4c Linux-2.6.12-rc2 |
248 |
const unsigned long *crcs; |
af5406895 module: reorder s... |
249 |
unsigned int num_syms; |
1da177e4c Linux-2.6.12-rc2 |
250 |
|
e180a6b77 param: fix charp ... |
251 252 253 |
/* Kernel parameters. */ struct kernel_param *kp; unsigned int num_kp; |
1da177e4c Linux-2.6.12-rc2 |
254 |
/* GPL-only exported symbols. */ |
1da177e4c Linux-2.6.12-rc2 |
255 |
unsigned int num_gpl_syms; |
af5406895 module: reorder s... |
256 |
const struct kernel_symbol *gpl_syms; |
1da177e4c Linux-2.6.12-rc2 |
257 |
const unsigned long *gpl_crcs; |
f7f5b6755 Shrink struct mod... |
258 |
#ifdef CONFIG_UNUSED_SYMBOLS |
f71d20e96 [PATCH] Add EXPOR... |
259 260 |
/* unused exported symbols. */ const struct kernel_symbol *unused_syms; |
f71d20e96 [PATCH] Add EXPOR... |
261 |
const unsigned long *unused_crcs; |
af5406895 module: reorder s... |
262 |
unsigned int num_unused_syms; |
f71d20e96 [PATCH] Add EXPOR... |
263 |
/* GPL-only, unused exported symbols. */ |
f71d20e96 [PATCH] Add EXPOR... |
264 |
unsigned int num_unused_gpl_syms; |
af5406895 module: reorder s... |
265 |
const struct kernel_symbol *unused_gpl_syms; |
f71d20e96 [PATCH] Add EXPOR... |
266 |
const unsigned long *unused_gpl_crcs; |
f7f5b6755 Shrink struct mod... |
267 |
#endif |
f71d20e96 [PATCH] Add EXPOR... |
268 |
|
9f28bb7e1 [PATCH] add EXPOR... |
269 270 |
/* symbols that will be GPL-only in the near future. */ const struct kernel_symbol *gpl_future_syms; |
9f28bb7e1 [PATCH] add EXPOR... |
271 |
const unsigned long *gpl_future_crcs; |
af5406895 module: reorder s... |
272 |
unsigned int num_gpl_future_syms; |
9f28bb7e1 [PATCH] add EXPOR... |
273 |
|
1da177e4c Linux-2.6.12-rc2 |
274 275 |
/* Exception table */ unsigned int num_exentries; |
5e458cc0f module: simplify ... |
276 |
struct exception_table_entry *extable; |
1da177e4c Linux-2.6.12-rc2 |
277 278 279 280 281 282 283 284 285 286 287 |
/* 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... |
288 |
unsigned int init_size, core_size; |
1da177e4c Linux-2.6.12-rc2 |
289 290 |
/* The size of the executable code in each section. */ |
2f0f2a334 module: turn long... |
291 |
unsigned int init_text_size, core_text_size; |
1da177e4c Linux-2.6.12-rc2 |
292 293 294 |
/* Arch-specific module values */ struct mod_arch_specific arch; |
2bc2d61a9 [PATCH] list modu... |
295 |
unsigned int taints; /* same bits as kernel:tainted */ |
7664c5a1d [PATCH] Generic B... |
296 297 |
#ifdef CONFIG_GENERIC_BUG /* Support for BUG */ |
af5406895 module: reorder s... |
298 |
unsigned num_bugs; |
7664c5a1d [PATCH] Generic B... |
299 300 |
struct list_head bug_list; struct bug_entry *bug_table; |
1da177e4c Linux-2.6.12-rc2 |
301 302 303 |
#endif #ifdef CONFIG_KALLSYMS |
4a4962263 module: reduce sy... |
304 305 306 307 308 309 310 |
/* * 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... |
311 |
char *strtab, *core_strtab; |
1da177e4c Linux-2.6.12-rc2 |
312 313 314 |
/* Section attributes */ struct module_sect_attrs *sect_attrs; |
6d7601338 Add /sys/module/n... |
315 316 317 |
/* Notes attributes */ struct module_notes_attrs *notes_attrs; |
1da177e4c Linux-2.6.12-rc2 |
318 |
#endif |
259354dea module: encapsula... |
319 |
#ifdef CONFIG_SMP |
1da177e4c Linux-2.6.12-rc2 |
320 |
/* Per-cpu data. */ |
259354dea module: encapsula... |
321 322 323 |
void __percpu *percpu; unsigned int percpu_size; #endif |
1da177e4c Linux-2.6.12-rc2 |
324 325 326 327 |
/* The command line arguments (may be mangled). People like keeping pointers to this stuff */ char *args; |
97e1c18e8 tracing: Kernel T... |
328 329 330 331 |
#ifdef CONFIG_TRACEPOINTS struct tracepoint *tracepoints; unsigned int num_tracepoints; #endif |
af5406895 module: reorder s... |
332 |
|
769b0441f tracing/core: dro... |
333 |
#ifdef CONFIG_TRACING |
1ba28e02a tracing: add trac... |
334 335 336 |
const char **trace_bprintk_fmt_start; unsigned int num_trace_bprintk_fmt; #endif |
6d723736e tracing/events: a... |
337 338 339 340 |
#ifdef CONFIG_EVENT_TRACING struct ftrace_event_call *trace_events; unsigned int num_trace_events; #endif |
93eb677d7 ftrace: use modul... |
341 342 343 344 |
#ifdef CONFIG_FTRACE_MCOUNT_RECORD unsigned long *ftrace_callsites; unsigned int num_ftrace_callsites; #endif |
1ba28e02a tracing: add trac... |
345 |
|
af5406895 module: reorder s... |
346 347 |
#ifdef CONFIG_MODULE_UNLOAD /* What modules depend on me? */ |
2c02dfe7f module: Make the ... |
348 349 350 |
struct list_head source_list; /* What modules do I depend on? */ struct list_head target_list; |
af5406895 module: reorder s... |
351 352 353 354 355 356 |
/* Who is waiting for us to be unloaded */ struct task_struct *waiter; /* Destruction function. */ void (*exit)(void); |
e1783a240 module: Use this_... |
357 |
struct module_ref { |
5fbfb18d7 Fix up possibly r... |
358 359 |
unsigned int incs; unsigned int decs; |
43cf38eb5 percpu: add __per... |
360 |
} __percpu *refptr; |
af5406895 module: reorder s... |
361 |
#endif |
b99b87f70 kernel: construct... |
362 363 364 365 366 367 |
#ifdef CONFIG_CONSTRUCTORS /* Constructor functions. */ ctor_fn_t *ctors; unsigned int num_ctors; #endif |
1da177e4c Linux-2.6.12-rc2 |
368 |
}; |
e61a1c1c4 Allow arch to ini... |
369 370 371 |
#ifndef MODULE_ARCH_INIT #define MODULE_ARCH_INIT {} #endif |
1da177e4c Linux-2.6.12-rc2 |
372 |
|
c6b378019 module: Export sy... |
373 |
extern struct mutex module_mutex; |
1da177e4c Linux-2.6.12-rc2 |
374 375 376 377 378 379 380 |
/* 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 |
381 |
struct module *__module_text_address(unsigned long addr); |
e610499e2 module: __module_... |
382 383 |
struct module *__module_address(unsigned long addr); bool is_module_address(unsigned long addr); |
10fad5e46 percpu, module: i... |
384 |
bool is_module_percpu_address(unsigned long addr); |
e610499e2 module: __module_... |
385 |
bool is_module_text_address(unsigned long addr); |
1da177e4c Linux-2.6.12-rc2 |
386 |
|
a06f6211e module: add withi... |
387 388 389 390 391 392 393 394 395 396 397 |
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... |
398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 |
/* 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 */ bool each_symbol(bool (*fn)(const struct symsearch *arr, struct module *owner, unsigned int symnum, void *data), void *data); |
ea07890a6 Fix race between ... |
422 |
/* Returns 0 and fills in value, defined and namebuf, or -ERANGE if |
1da177e4c Linux-2.6.12-rc2 |
423 |
symnum out of range. */ |
ea07890a6 Fix race between ... |
424 425 |
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 |
426 427 428 |
/* Look for this name: can be of form module:name. */ unsigned long module_kallsyms_lookup_name(const char *name); |
75a66614d Ksplice: Add func... |
429 430 431 |
int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *, unsigned long), void *data); |
1da177e4c Linux-2.6.12-rc2 |
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 |
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 unsigned int module_refcount(struct module *mod); 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_... |
447 |
preempt_disable(); |
5fbfb18d7 Fix up possibly r... |
448 |
__this_cpu_inc(module->refptr->incs); |
ae832d1e0 tracing: Remove s... |
449 |
trace_module_get(module, _THIS_IP_); |
e1783a240 module: Use this_... |
450 |
preempt_enable(); |
1da177e4c Linux-2.6.12-rc2 |
451 452 453 454 455 456 457 458 |
} } static inline int try_module_get(struct module *module) { int ret = 1; if (module) { |
e1783a240 module: Use this_... |
459 |
preempt_disable(); |
7ead8b831 tracing/events: A... |
460 |
if (likely(module_is_live(module))) { |
5fbfb18d7 Fix up possibly r... |
461 |
__this_cpu_inc(module->refptr->incs); |
ae832d1e0 tracing: Remove s... |
462 |
trace_module_get(module, _THIS_IP_); |
5fbfb18d7 Fix up possibly r... |
463 |
} else |
1da177e4c Linux-2.6.12-rc2 |
464 |
ret = 0; |
e1783a240 module: Use this_... |
465 466 |
preempt_enable(); |
1da177e4c Linux-2.6.12-rc2 |
467 468 469 |
} return ret; } |
f6a570333 [PATCH] severing ... |
470 |
extern void module_put(struct module *module); |
1da177e4c Linux-2.6.12-rc2 |
471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 |
#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 */ |
c6b378019 module: Export sy... |
487 |
int use_module(struct module *a, struct module *b); |
1da177e4c Linux-2.6.12-rc2 |
488 489 490 491 492 493 494 |
/* 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... |
495 496 497 |
/* 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... |
498 |
const char *module_address_lookup(unsigned long addr, |
6dd06c9fb module: make modu... |
499 500 501 502 |
unsigned long *symbolsize, unsigned long *offset, char **modname, char *namebuf); |
9d65cb4a1 Fix race between ... |
503 |
int lookup_module_symbol_name(unsigned long addr, char *symname); |
a5c43dae7 Fix race between ... |
504 |
int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name); |
1da177e4c Linux-2.6.12-rc2 |
505 506 507 508 509 510 511 512 |
/* 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); |
97e1c18e8 tracing: Kernel T... |
513 514 |
extern void module_update_tracepoints(void); extern int module_get_iter_tracepoints(struct tracepoint_iter *iter); |
1da177e4c Linux-2.6.12-rc2 |
515 516 517 |
#else /* !CONFIG_MODULES... */ #define EXPORT_SYMBOL(sym) #define EXPORT_SYMBOL_GPL(sym) |
9f28bb7e1 [PATCH] add EXPOR... |
518 |
#define EXPORT_SYMBOL_GPL_FUTURE(sym) |
f71d20e96 [PATCH] Add EXPOR... |
519 520 |
#define EXPORT_UNUSED_SYMBOL(sym) #define EXPORT_UNUSED_SYMBOL_GPL(sym) |
1da177e4c Linux-2.6.12-rc2 |
521 522 523 524 525 526 527 |
/* 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_... |
528 529 530 531 |
static inline struct module *__module_address(unsigned long addr) { return NULL; } |
1da177e4c Linux-2.6.12-rc2 |
532 533 534 535 |
static inline struct module *__module_text_address(unsigned long addr) { return NULL; } |
e610499e2 module: __module_... |
536 537 538 539 |
static inline bool is_module_address(unsigned long addr) { return false; } |
d5e50daf9 module: add stub ... |
540 541 542 543 |
static inline bool is_module_percpu_address(unsigned long addr) { return false; } |
e610499e2 module: __module_... |
544 |
static inline bool is_module_text_address(unsigned long addr) |
4d435f9d8 [PATCH] lockdep: ... |
545 |
{ |
e610499e2 module: __module_... |
546 |
return false; |
4d435f9d8 [PATCH] lockdep: ... |
547 |
} |
1da177e4c Linux-2.6.12-rc2 |
548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 |
/* 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 |
567 |
/* For kallsyms to ask for address resolution. NULL means not found. */ |
92dfc9dc7 fix "modules: mak... |
568 |
static inline const char *module_address_lookup(unsigned long addr, |
6dd06c9fb module: make modu... |
569 570 571 572 |
unsigned long *symbolsize, unsigned long *offset, char **modname, char *namebuf) |
1da177e4c Linux-2.6.12-rc2 |
573 574 575 |
{ return NULL; } |
9d65cb4a1 Fix race between ... |
576 577 578 579 |
static inline int lookup_module_symbol_name(unsigned long addr, char *symname) { return -ERANGE; } |
a5c43dae7 Fix race between ... |
580 581 582 583 |
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 ... |
584 585 586 |
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 |
587 |
{ |
ea07890a6 Fix race between ... |
588 |
return -ERANGE; |
1da177e4c Linux-2.6.12-rc2 |
589 590 591 592 593 594 |
} static inline unsigned long module_kallsyms_lookup_name(const char *name) { return 0; } |
75a66614d Ksplice: Add func... |
595 596 597 598 599 600 601 |
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 |
602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 |
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) { } |
97e1c18e8 tracing: Kernel T... |
618 619 620 621 622 623 624 625 |
static inline void module_update_tracepoints(void) { } static inline int module_get_iter_tracepoints(struct tracepoint_iter *iter) { return 0; } |
ef665c1a0 sysfs: fix build ... |
626 |
#endif /* CONFIG_MODULES */ |
ef665c1a0 sysfs: fix build ... |
627 |
#ifdef CONFIG_SYSFS |
7405c1e15 kset: convert /sy... |
628 629 630 |
extern struct kset *module_kset; extern struct kobj_type module_ktype; extern int module_sysfs_initialized; |
ef665c1a0 sysfs: fix build ... |
631 |
#endif /* CONFIG_SYSFS */ |
1da177e4c Linux-2.6.12-rc2 |
632 633 634 |
#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 |
635 |
#define __MODULE_STRING(x) __stringify(x) |
0d9c25dde headers: move mod... |
636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 |
#ifdef CONFIG_GENERIC_BUG int module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *, struct module *); void module_bug_cleanup(struct module *); #else /* !CONFIG_GENERIC_BUG */ static inline int module_bug_finalize(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs, struct module *mod) { return 0; } static inline void module_bug_cleanup(struct module *mod) {} #endif /* CONFIG_GENERIC_BUG */ |
1da177e4c Linux-2.6.12-rc2 |
652 |
#endif /* _LINUX_MODULE_H */ |