NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/50489: non-default emulations lack extensability via syscall_establish



>Number:         50489
>Category:       kern
>Synopsis:       non-default emulations lack extensability via syscall_establish
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Mon Nov 30 02:15:00 +0000 2015
>Originator:     paul%whooppee.com@localhost
>Release:        NetBSD 7.99.21
>Organization:
+------------------+--------------------------+-------------------------+
| Paul Goyette     | PGP Key fingerprint:     | E-mail addresses:       |
| (Retired)        | FA29 0E3B 35AF E8AE 6651 | paul at whooppee.com    |
| Kernel Developer | 0786 F758 55DE 53BA 7731 | pgoyette at netbsd.org  |
+------------------+--------------------------+-------------------------+
>Environment:
	
	
System: NetBSD pokey.whooppee.com 7.99.21 NetBSD 7.99.21 (POKEY 2015-11-22 01:39:12) #1: Sun Nov 22 11:03:58 PHT 2015 paul%pokey.whooppee.com@localhost:/build/netbsd-local/obj/amd64/sys/arch/amd64/compile/POKEY amd64
Architecture: x86_64
Machine: amd64
>Description:
	
	Currently, the capabilities of the default emulation can be
	enhanced by dynamic loading of modules which install new
	syscalls (via syscall_{,dis}establish in kern/kern_syscall.c).

	But this extensibility feature is only available in the default
	emulation.  For other emulations, particularly compat_netbsd32,
	the emulation's cabilities need to be built-in to the relevant
	module, so the module becomes an all-or-nothing.

	Additionally, the compat_netbsd32 module ends up with potentially
	lots of dependencies on other modules, and convoluted #ifdef
	blocks to determine availability of the dependencies in built-in
	version.  This also restricts the ability of the compat module
	to gain capabilities if underlying default-emulation modules are
	loaded to provide the back-end capabilities.
>How-To-Repeat:
	
>Fix:
	
	* Modify the 'struct emul' to contain a pointer to a per-emulation
	  list of syscalls which can be resolved by a module auto-load
	  (currently, only the default emulation has such a list)
	* Modify the sys_nomodule() routine (in kern/kern_syscall.h) to
	  reference the per-emulation list, and remove the restriction on
	  (em == &emul_netbsd)
	* Move the current list of autoloadable syscalls to kern/kern_exec.c
	  where it can be included in the initialization of the default
	  emulations' 'struct emul emul_netbsd'
	* Update the syscall list(s) in the various compat modules to have
	  their own list of autoloadable syscalls
	* Split the existing compat modules into multiple modules, and
	  update the new modules to call syscall_{,dis}establish as
	  appropriate

	(There might be other details I haven't included above, but this
	should be a pretty good start on design spec.)

>Unformatted:
 	
 	


Home | Main Index | Thread Index | Old Index