Re: Link modules to DYN type

From: Jan Martin Mikkelsen <janm_at_transactionware.com>
Date: Wed, 26 Apr 2023 12:19:18 UTC

> On 26. Apr 2023, at 13:38, Hans Petter Selasky <hselasky@freebsd.org> 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() ?
> 
> I would expect a warning from the kernel at least …


Hi,

This looks similar to this:

https://lists.freebsd.org/pipermail/freebsd-stable/2015-July/082751.html

https://lists.freebsd.org/pipermail/freebsd-stable/2015-July/082760.html

The “not knowing” about how symbols are going to be resolved has bothered me for a while.

Regards,

Jan M.