Module Name: src
Committed By: uebayasi
Date: Thu Oct 30 01:26:20 UTC 2014
Modified Files:
src/usr.bin/config: TODO
Log Message:
config(1): More TODO items
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/usr.bin/config/TODO
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/config/TODO
diff -u src/usr.bin/config/TODO:1.4 src/usr.bin/config/TODO:1.5
--- src/usr.bin/config/TODO:1.4 Sun Oct 12 15:54:19 2014
+++ src/usr.bin/config/TODO Thu Oct 30 01:26:20 2014
@@ -1,3 +1,14 @@
+o Call module as module.
+
+ Until now, everything is called as attribute. Separate module from it:
+
+ - Module is a collection of code (*.[cSo]), and provides a function.
+ Module can depend on other modules.
+
+ - Attribute provides metadata for modules. One module can have
+ multiple attributes. Attribute doesn't generate a module (*.o,
+ *.ko).
+
o Emit everything (ioconf.*, Makefile, ...) per-attribute.
o Generate modular(9) related information. Especially module dependency.
@@ -78,3 +89,45 @@ o Allow easier adding and removing of op
errors like "options BAR was already defined" or "options FOO
was not defined".
+o Introduce "class".
+
+ Every module should be classfied as at least one class, as modular(9)
+ modules already do. For example, filesystems are marked as "vfs", network
+ protocols are "netproto".
+
+ Consider to merge "devclass" into "class".
+
+ For syntax clarity, class names could be used as a keyword to select the
+ class's instance module:
+
+ # Define net80211 module as netproto class
+ class netproto
+ define net80211: netproto
+
+ # Select net80211 to be builtin
+ netproto net80211
+
+ Accordingly device/attach selection syntax should be revisited.
+
+o Support kernel constructor/destructor (.ctors/.dtors)
+
+ Initialization and finalization should be called via constructors and
+ destructors. Don't hardcode those sequences as sys/kern/init_main.c:main()
+ does.
+
+ The order of .ctors/.dtors is resolved by dependency. The difference from
+ userland is that in kernel depended ones are located in lower addresses;
+ "machdep" module is the lowest. Thus the lowest entry in .ctors must be
+ executed the first.
+
+o Replace linkset.
+
+ Don't allow kernel subsystems create random ELF sections (with potentially
+ long names) in the final kernel. To collect some data in statically linked
+ modules, creating intermediate sections (e.g. .data.linkset.sysctl) and
+ exporting the start/end symbols (e.g. _data_linkset_sysctl_{start,end})
+ using linker script should be fine.
+
+ Dynamically loaded modules have to register those entries via constructors
+ (functions). This means that dynamically loaded modules are flexible but
+ come with overhead.