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.

Reply via email to