On Mon, 13 Aug 2001 16:49:22 +0200 (MET DST),
"Maciej W. Rozycki" <macro@ds2.pg.gda.pl> wrote:
>On Tue, 14 Aug 2001, Keith Owens wrote:
>> The only other change you have to make is to init_modules(). For mips
>> you create pointers to the kernel dbe tables and fill in archdata start
>> and end in kernel_module. Since init_module is called before kmalloc
>> is ready, make the kernel dbe table a static variable.
>
> __dbe_table is initialized exactly like __ex_table, i.e. it's a separate
>ELF section with pointers to the start and the end computed in a linker
>script. Thus it is fine. The table has actually been present in the
>kernel for quite some time already.
You still need this:
struct archdata {
const struct exception_table_entry *dbe_table_start;
const struct exception_table_entry *dbe_table_end;
};
In init_module:
#ifdef __mips__
{
extern const struct exception_table_entry __start___dbe_table[];
extern const struct exception_table_entry __stop___dbe_table[];
static struct archdata archdata_mips =
{ __start___dbe_table, __end___dbe_table };
kernel_module.archdata_start = (char *)&archdata_mips;
kernel_module.archdata_end = kernel_module.archdata_start +
sizeof(archdata_mips);
}
#endif
I really need to add an arch specific init_module routine as well,
instead of conditional code in init_module, but that means changing all
architectures. Not today.
|