|
From: James S. <jsi...@us...> - 2001-08-21 17:21:00
|
Update of /cvsroot/linux-mips/linux/include/asm-mips
In directory usw-pr-cvs1:/tmp/cvs-serv16071
Added Files:
module.h
Log Message:
Support catching data bus errors also from withim modules.
--- NEW FILE: module.h ---
#ifndef _ASM_MIPS_MODULE_H
#define _ASM_MIPS_MODULE_H
/*
* This file contains the mips architecture specific module code.
*/
#include <linux/module.h>
#include <asm/uaccess.h>
#define module_map(x) vmalloc(x)
#define module_unmap(x) vfree(x)
#define module_arch_init(x) mips_module_init(x)
#define arch_init_modules(x) mips_init_modules(x)
/*
* This must match in size and layout the data created by
* modutils/obj/obj-mips.c
*/
struct archdata {
const struct exception_table_entry *dbe_table_start;
const struct exception_table_entry *dbe_table_end;
};
static inline int
mips_module_init(struct module *mod)
{
struct archdata *archdata;
if (!mod_member_present(mod, archdata_start) || !mod->archdata_start)
return 0;
archdata = (struct archdata *)(mod->archdata_start);
if (archdata->dbe_table_start > archdata->dbe_table_end ||
(archdata->dbe_table_start &&
!((unsigned long)archdata->dbe_table_start >=
((unsigned long)mod + mod->size_of_struct) &&
((unsigned long)archdata->dbe_table_end <
(unsigned long)mod + mod->size))) ||
(((unsigned long)archdata->dbe_table_start -
(unsigned long)archdata->dbe_table_end) %
sizeof(struct exception_table_entry))) {
printk(KERN_ERR
"arch_init_module: archdata->dbe_table_* invalid.\n");
return 1;
}
return 0;
}
static inline void
mips_init_modules(struct module *mod)
{
extern const struct exception_table_entry __start___dbe_table[];
extern const struct exception_table_entry __stop___dbe_table[];
static struct archdata archdata = {
dbe_table_start: __start___dbe_table,
dbe_table_end: __stop___dbe_table,
};
mod->archdata_start = (char *)&archdata;
mod->archdata_end = mod->archdata_start + sizeof(archdata);
}
#endif /* _ASM_MIPS_MODULE_H */
|