16
16
#include <linux/kobject.h>
17
17
#include <linux/moduleparam.h>
18
18
#include <linux/tracepoint.h>
19
#include <linux/export.h>
20
21
#include <linux/percpu.h>
21
22
#include <asm/module.h>
25
26
/* Not Yet Implemented */
26
27
#define MODULE_SUPPORTED_DEVICE(name)
28
/* Some toolchains use a `_' prefix for all user symbols. */
29
#ifdef CONFIG_SYMBOL_PREFIX
30
#define MODULE_SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX
32
#define MODULE_SYMBOL_PREFIX ""
35
29
#define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN
43
31
struct modversion_info
39
struct module_kobject {
42
struct kobject *drivers_dir;
43
struct module_param_attrs *mp;
51
46
struct module_attribute {
52
struct attribute attr;
53
ssize_t (*show)(struct module_attribute *, struct module *, char *);
54
ssize_t (*store)(struct module_attribute *, struct module *,
47
struct attribute attr;
48
ssize_t (*show)(struct module_attribute *, struct module_kobject *,
50
ssize_t (*store)(struct module_attribute *, struct module_kobject *,
55
51
const char *, size_t count);
56
52
void (*setup)(struct module *, const char *);
57
53
int (*test)(struct module *);
65
61
} __attribute__ ((__aligned__(sizeof(void *))));
67
63
extern ssize_t __modver_version_show(struct module_attribute *,
68
struct module *, char *);
64
struct module_kobject *, char *);
74
struct kobject *drivers_dir;
75
struct module_param_attrs *mp;
66
extern struct module_attribute module_uevent;
78
68
/* These are either module local, or the kernel's dummy ones. */
79
69
extern int init_module(void);
96
86
extern const struct gtype##_id __mod_##gtype##_table \
97
87
__attribute__ ((unused, alias(__stringify(name))))
99
extern struct module __this_module;
100
#define THIS_MODULE (&__this_module)
101
89
#else /* !MODULE */
102
90
#define MODULE_GENERIC_TABLE(gtype,name)
103
#define THIS_MODULE ((struct module *)0)
106
93
/* Generic info of form tag = "info" */
148
135
/* What your module does. */
149
136
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
151
/* One for each parameter, describing how to use it. Some files do
152
multiple of these per line, so can't just use MODULE_INFO. */
153
#define MODULE_PARM_DESC(_parm, desc) \
154
__MODULE_INFO(parm, _parm, #_parm ":" desc)
156
138
#define MODULE_DEVICE_TABLE(type,name) \
157
139
MODULE_GENERIC_TABLE(type##_device,name)
216
198
struct module *source, *target;
220
#ifdef CONFIG_MODVERSIONS
221
/* Mark the CRC weak since genksyms apparently decides not to
222
* generate a checksums for some symbols */
223
#define __CRC_SYMBOL(sym, sec) \
224
extern void *__crc_##sym __attribute__((weak)); \
225
static const unsigned long __kcrctab_##sym \
227
__attribute__((section("___kcrctab" sec "+" #sym), unused)) \
228
= (unsigned long) &__crc_##sym;
230
#define __CRC_SYMBOL(sym, sec)
233
/* For every exported symbol, place a struct in the __ksymtab section */
234
#define __EXPORT_SYMBOL(sym, sec) \
235
extern typeof(sym) sym; \
236
__CRC_SYMBOL(sym, sec) \
237
static const char __kstrtab_##sym[] \
238
__attribute__((section("__ksymtab_strings"), aligned(1))) \
239
= MODULE_SYMBOL_PREFIX #sym; \
240
static const struct kernel_symbol __ksymtab_##sym \
242
__attribute__((section("___ksymtab" sec "+" #sym), unused)) \
243
= { (unsigned long)&sym, __kstrtab_##sym }
245
#define EXPORT_SYMBOL(sym) \
246
__EXPORT_SYMBOL(sym, "")
248
#define EXPORT_SYMBOL_GPL(sym) \
249
__EXPORT_SYMBOL(sym, "_gpl")
251
#define EXPORT_SYMBOL_GPL_FUTURE(sym) \
252
__EXPORT_SYMBOL(sym, "_gpl_future")
255
#ifdef CONFIG_UNUSED_SYMBOLS
256
#define EXPORT_UNUSED_SYMBOL(sym) __EXPORT_SYMBOL(sym, "_unused")
257
#define EXPORT_UNUSED_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_unused_gpl")
259
#define EXPORT_UNUSED_SYMBOL(sym)
260
#define EXPORT_UNUSED_SYMBOL_GPL(sym)
265
201
enum module_state
267
203
MODULE_STATE_LIVE,
579
515
extern void print_modules(void);
581
extern void module_update_tracepoints(void);
582
extern int module_get_iter_tracepoints(struct tracepoint_iter *iter);
584
517
#else /* !CONFIG_MODULES... */
585
#define EXPORT_SYMBOL(sym)
586
#define EXPORT_SYMBOL_GPL(sym)
587
#define EXPORT_SYMBOL_GPL_FUTURE(sym)
588
#define EXPORT_UNUSED_SYMBOL(sym)
589
#define EXPORT_UNUSED_SYMBOL_GPL(sym)
591
519
/* Given an address, look for it in the exception tables. */
592
520
static inline const struct exception_table_entry *