Re: Link modules to DYN type
- In reply to: Hans Petter Selasky : "Re: Link modules to DYN type"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 26 Apr 2023 12:15:09 UTC
On Wed, Apr 26, 2023 at 01:38:32PM +0200, Hans Petter Selasky wrote: > On 4/26/23 13:12, Konstantin Belousov wrote: > > No, in-kernel linker does not behave this way. > > Modules need to contain explicit reference to all modules they depend upon, > > using the MODULE_DEPEND() macro. Only symbols from the dependencies are > > resolved. > > > > All modules get an implicit reference to kernel. > > Hi Konstantin, > > Maybe I wasn't so clear. Trying again: > > > diff --git a/sys/tests/ktest.c b/sys/tests/ktest.c > > index 495fedf95dde..eb42cf062487 100644 > > --- a/sys/tests/ktest.c > > +++ b/sys/tests/ktest.c > > @@ -409,6 +409,12 @@ static moduledata_t ktestmod = { > > 0 > > }; > > +int > > +printf(const char *fmt, ...) > > +{ > > + return (0); > > +} > > + > > DECLARE_MODULE(ktestmod, ktestmod, SI_SUB_PSEUDO, SI_ORDER_ANY); > > MODULE_VERSION(ktestmod, 1); > > MODULE_DEPEND(ktestmod, netlink, 1, 1, 1); > > Then kldload ktest.ko . Which printf() function will be used if ktest.c > calls printf() ? My best guess is that printf is resolved locally by the static linker, even before the module is loaded. In other words, it would be ktest.c printf. > > I would expect a warning from the kernel at least ... This is not how ELF behaves, even in such not fully compliant env as kernel.