2000-11-05 10:36:53

by Naren Devaiah

[permalink] [raw]
Subject: Where is __this_module actually defined?


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


2000-11-05 10:43:44

by Tigran Aivazian

[permalink] [raw]
Subject: Re: Where is __this_module actually defined?

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

2000-11-05 10:48:05

by Naren Devaiah

[permalink] [raw]
Subject: Re: Where is __this_module actually defined?


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
>

2000-11-05 10:52:15

by Tigran Aivazian

[permalink] [raw]
Subject: Re: Where is __this_module actually defined?

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