Date: Thu, 27 Sep 2001 00:11:46 -0700 From: Marcel Moolenaar <marcel@xcllnt.net> To: arch@FreeBSD.org Subject: makesyscalls.sh: Fix for NODEF type Message-ID: <20010927001146.A11131@athlon.pn.xcllnt.net>
next in thread | raw e-mail | index | archive | help
--n8g4imXOkfNTN/H1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, Background: The Linuxulator port for alpha has the unique problem that two syscall numbers/entries map to the same syscall function. The syscall in question is setpgid()/linux_setpgid(). One of them is nothing more than a stub to work around a limitation in our syscall table generation. The following is a way to avoid having to create a stub in this case. When two identical syscalls are defined as having type NOPROTO, the only problem that remains is the fact that there will be a duplicate definition in *syscall.h. In sys/kern/makesyscalls.sh there's a way to suppress this: mark the syscall as type NODEF. Unfortunately this breaks the declaration of the syscall in *proto.h and is therefore useless in it's current form. The attached patch makes type NODEF work in follows. Assume we have the following entry in syscalls.master: 1 NODEF BSD foobar The only code generated for syscall 1 will be an entry in the syscall table (struct sysent sysent[]): { AS(foobar_args), (sy_call_t *)foobar }, /* 1 = NODEF */ This allows syscall functions to have multiple syscall number or entries. Is this an acceptable fix and/or interpretation for NODEF? -- Marcel Moolenaar USPA: A-39004 marcel@xcllnt.net --n8g4imXOkfNTN/H1 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="nodef.diff" Index: makesyscalls.sh =================================================================== RCS file: /home/ncvs/src/sys/kern/makesyscalls.sh,v retrieving revision 1.48 diff -u -r1.48 makesyscalls.sh --- makesyscalls.sh 12 Sep 2001 08:37:45 -0000 1.48 +++ makesyscalls.sh 27 Sep 2001 06:50:59 -0000 @@ -208,6 +208,7 @@ } if ($2 == "NODEF") { funcname=$4 + argssize = "AS(" $4 "_args)" return } if ($f != "{") @@ -320,7 +321,7 @@ argalias) > sysarg } if ($2 != "NOPROTO" && (!nosys || funcname != "nosys") && \ - (!lkmnosys || funcname != "lkmnosys")) { + (!lkmnosys || funcname != "lkmnosys") && $2 != "NODEF") { printf("%s\t%s __P((struct thread *, struct %s *))", rettype, funcname, argalias) > sysdcl printf(";\n") > sysdcl --n8g4imXOkfNTN/H1-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010927001146.A11131>