I've looked in the 2.4.0-pre10 source tree and found it defined as
extern struct module __this_module;
in module.h (among other files), but where is it actually defined?
TIA,
Naren
On Sun, 5 Nov 2000, Naren Devaiah wrote:
>
> I've looked in the 2.4.0-pre10 source tree and found it defined as
> extern struct module __this_module;
> in module.h (among other files), but where is it actually defined?
>
it isn't -- it's magic, of course :). The way it works is for insmod to
arrange things in such a manner that &__this_module resolves to point to
the beginning of module's address space, which happens to contain 'struct
module' at the beginning.
Regards,
Tigran
Does this mean that the module structure (struct module) and it's various
substructures are filled in by insmod?
Regards,
Naren
On Sun, 5 Nov 2000, Tigran Aivazian wrote:
> On Sun, 5 Nov 2000, Naren Devaiah wrote:
>
> >
> > I've looked in the 2.4.0-pre10 source tree and found it defined as
> > extern struct module __this_module;
> > in module.h (among other files), but where is it actually defined?
> >
>
> it isn't -- it's magic, of course :). The way it works is for insmod to
> arrange things in such a manner that &__this_module resolves to point to
> the beginning of module's address space, which happens to contain 'struct
> module' at the beginning.
>
> Regards,
> Tigran
>
On Sun, 5 Nov 2000, Naren Devaiah wrote:
>
> Does this mean that the module structure (struct module) and it's various
> substructures are filled in by insmod?
>
> Regards,
> Naren
Yes, partially, i.e. have a look at sys_create_module() and
sys_init_module() system calls, they are in kernel/module.c
sys_create_module() just allocates the space and links the module into the
list but sys_init_module() is passed a 'struct module' from userspace
whose content is harshly validated (trust no one!) and then installed into
a real kernel 'struct module' and module's init_module() routine is
invoked.
Regards,
Tigran