syscall.9: Add a rough explanation of how a syscall ends up in the kernel.
authorSascha Wildner <saw@online.de>
Thu, 2 Jan 2014 20:30:09 +0000 (21:30 +0100)
committerSascha Wildner <saw@online.de>
Thu, 2 Jan 2014 20:30:24 +0000 (21:30 +0100)
share/man/man9/syscall.9

index 11e86ab..39f602b 100644 (file)
@@ -23,7 +23,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 25, 2009
+.Dd January 2, 2014
 .Dt SYSCALL 9
 .Os
 .Sh NAME
@@ -127,6 +127,26 @@ Last, in order to return a value to userland, the
 .Fa uap->sysmsg_result
 variable and friends of it are used, as defined in
 .Pa sys/sys/sysmsg.h .
+.Sh IMPLEMENTATION NOTES
+In the kernel, a syscall is implemented by a
+.Fn sys_syscallname
+function.
+In userspace, the function that executes a syscall is automatically generated
+using the description in
+.Pa syscalls.master .
+The symbols in the
+.Lb libc
+are assembly wrappers generated in
+.Pa lib/libc/{i386,x86_64} ,
+again using the description in
+.Pa syscalls.master .
+These wrappers use macros provided by the platform-dependent
+.In SYS.h
+header file which take care of putting the syscall arguments into registers
+(per the ABI specification) and either invoking int 0x80 (on i386) or
+inserting a
+.Li syscall
+instruction (on x86_64).
 .Sh FILES
 .Bl -tag -width sys/kern/syscalls.master -compact
 .It Pa sys/kern/makesyscalls.sh