make oldconfig will rebuild these...
[linux-2.4.21-pre4.git] / include / asm-mips / module.h
1 #ifndef _ASM_MIPS_MODULE_H
2 #define _ASM_MIPS_MODULE_H
3 /*
4  * This file contains the mips architecture specific module code.
5  */
6
7 #include <linux/module.h>
8 #include <asm/uaccess.h>
9
10 #define module_map(x)           vmalloc(x)
11 #define module_unmap(x)         vfree(x)
12 #define module_arch_init(x)     mips_module_init(x)
13 #define arch_init_modules(x)    mips_init_modules(x)
14
15 /*
16  * This must match in size and layout the data created by
17  * modutils/obj/obj-mips.c
18  */
19 struct archdata {
20         const struct exception_table_entry *dbe_table_start;
21         const struct exception_table_entry *dbe_table_end;
22 };
23
24 static inline int
25 mips_module_init(struct module *mod)
26 {
27         struct archdata *archdata;
28
29         if (!mod_member_present(mod, archdata_end))
30                 return 0;
31
32         archdata = (struct archdata *)(mod->archdata_start);
33         if (!mod_archdata_member_present(mod, struct archdata, dbe_table_end))
34                 return 0;
35
36         if (archdata->dbe_table_start > archdata->dbe_table_end ||
37             (archdata->dbe_table_start &&
38              !((unsigned long)archdata->dbe_table_start >=
39                ((unsigned long)mod + mod->size_of_struct) &&
40                ((unsigned long)archdata->dbe_table_end <
41                 (unsigned long)mod + mod->size))) ||
42             (((unsigned long)archdata->dbe_table_start -
43               (unsigned long)archdata->dbe_table_end) %
44              sizeof(struct exception_table_entry))) {
45                 printk(KERN_ERR
46                         "module_arch_init: archdata->dbe_table_* invalid.\n");
47                 return 1;
48         }
49
50         return 0;
51 }
52
53 static inline void
54 mips_init_modules(struct module *mod)
55 {
56         extern const struct exception_table_entry __start___dbe_table[];
57         extern const struct exception_table_entry __stop___dbe_table[];
58         static struct archdata archdata = {
59                 dbe_table_start:        __start___dbe_table,
60                 dbe_table_end:          __stop___dbe_table,
61         };
62
63         mod->archdata_start = (char *)&archdata;
64         mod->archdata_end = mod->archdata_start + sizeof(archdata);
65 }
66
67 #endif /* _ASM_MIPS_MODULE_H */