xref: /xnu-8796.121.2/libkern/kmod/README (revision c54f35ca767986246321eb901baf8f5ff7923f6a)
1*c54f35caSApple OSS Distributions#
2*c54f35caSApple OSS Distributions# Subtle combination of files and libraries make up the C++ runtime system for
3*c54f35caSApple OSS Distributions# kernel modules.  We are dependant on the KernelModule kmod.make and
4*c54f35caSApple OSS Distributions# CreateKModInfo.perl scripts to be exactly instep with both this library
5*c54f35caSApple OSS Distributions# module and the libkmod module as well.
6*c54f35caSApple OSS Distributions#
7*c54f35caSApple OSS Distributions# If you do any maintenance on any of the following files make sure great
8*c54f35caSApple OSS Distributions# care is taken to keep them in Sync.
9*c54f35caSApple OSS Distributions#    extenTools/KernelModule.bproj/kmod.make
10*c54f35caSApple OSS Distributions#    extenTools/KernelModule.bproj/CreateKModInfo.perl
11*c54f35caSApple OSS Distributions#    IOKitUser/kmodc++/pure.c
12*c54f35caSApple OSS Distributions#    IOKitUser/kmodc++/cplus_start.c
13*c54f35caSApple OSS Distributions#    IOKitUser/kmodc++/cplus_start.c
14*c54f35caSApple OSS Distributions#    IOKitUser/kmodc/c_start.c
15*c54f35caSApple OSS Distributions#    IOKitUser/kmodc/c_stop.c
16*c54f35caSApple OSS Distributions#
17*c54f35caSApple OSS Distributions# The trick is that the linkline links all of the developers modules.
18*c54f35caSApple OSS Distributions# If any static constructors are used .constructors_used will be left as
19*c54f35caSApple OSS Distributions# an undefined symbol.  This symbol is exported by the cplus_start.c routine
20*c54f35caSApple OSS Distributions# which automatically brings in the appropriate C++ _start routine.  However
21*c54f35caSApple OSS Distributions# the actual _start symbol is only required by the kmod_info structure that
22*c54f35caSApple OSS Distributions# is created and initialized by the CreateKModInfo.perl script.  If no C++
23*c54f35caSApple OSS Distributions# was used the _start will be an undefined symbol that is finally satisfied
24*c54f35caSApple OSS Distributions# by the c_start module in the kmod library.
25*c54f35caSApple OSS Distributions#
26*c54f35caSApple OSS Distributions# The linkline must look like this.
27*c54f35caSApple OSS Distributions#    *.o -lkmodc++ kmod_info.o -lkmod
28*c54f35caSApple OSS Distributions#
29