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 ...

--HPS

Reply via email to