cope with FreeBSD compatability syscalls
diff --git a/ChangeLog b/ChangeLog
index dc83121..872a7de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2001-03-08  John Hughes <john@Calva.COM>
 
+  * freebsd/syscalls.pl: On FreeBSD we must cope with COMPATibility syscalls,
+    pretend they have names ending with "?" so that -e trace=stat (for
+    example) will work.
+  * freebsd/i386/syscallent.h: add ? to compatability syscalls.
+  * freebsd/i386/syscall.h: consistency.
+
+2001-03-08  John Hughes <john@Calva.COM>
+
   * acconfig.h: add new ST_xxx defines.
   * aclocal.m4: macros to check for more fields in struct stat.
   * configure.in: use new macros to check for fields in struct stat.
diff --git a/freebsd/i386/syscall.h b/freebsd/i386/syscall.h
index a902072..9b60900 100644
--- a/freebsd/i386/syscall.h
+++ b/freebsd/i386/syscall.h
@@ -1,5 +1,5 @@
 /*
- * Automatically generated by ./../syscalls.pl on Thu Mar  8 11:47:44 2001
+ * Automatically generated by ./../syscalls.pl on Thu Mar  8 18:14:07 2001
  */
 
 #define sys_syscall printargs
diff --git a/freebsd/i386/syscallent.h b/freebsd/i386/syscallent.h
index a8fb64e..67e45d0 100644
--- a/freebsd/i386/syscallent.h
+++ b/freebsd/i386/syscallent.h
@@ -1,5 +1,5 @@
 /*
- * Automatically generated by ./../syscalls.pl on Thu Mar  8 11:47:44 2001
+ * Automatically generated by ./../syscalls.pl on Thu Mar  8 18:14:07 2001
  */
 
   { 1,	0,	sys_syscall,	"syscall"	}, /* 0 */
@@ -10,7 +10,7 @@
   { 3,	TF,	sys_open,	"open"	}, /* 5 */
   { 1,	TF,	sys_close,	"close"	}, /* 6 */
   { 4,	TP,	sys_wait4,	"wait4"	}, /* 7 */
-  { 2,	TF,	sys_creat,	"creat"	}, /* 8 */
+  { 2,	TF,	sys_creat,	"creat?"	}, /* 8 */
   { 2,	TF,	sys_link,	"link"	}, /* 9 */
   { 1,	TF,	sys_unlink,	"unlink"	}, /* 10 */
   { -1,	0,	printargs,	"SYS_11"	}, /* 11 */
@@ -21,7 +21,7 @@
   { 3,	TF,	sys_chown,	"chown"	}, /* 16 */
   { 1,	0,	sys_break,	"break"	}, /* 17 */
   { 3,	0,	sys_getfsstat,	"getfsstat"	}, /* 18 */
-  { 3,	0,	sys_lseek,	"lseek"	}, /* 19 */
+  { 3,	0,	sys_lseek,	"lseek?"	}, /* 19 */
   { 1,	0,	sys_getpid,	"getpid"	}, /* 20 */
   { 4,	TF,	sys_mount,	"mount"	}, /* 21 */
   { 2,	TF,	sys_unmount,	"unmount"	}, /* 22 */
@@ -40,21 +40,21 @@
   { 2,	TF,	sys_fchflags,	"fchflags"	}, /* 35 */
   { 1,	0,	sys_sync,	"sync"	}, /* 36 */
   { 2,	TS,	sys_kill,	"kill"	}, /* 37 */
-  { 2,	TF,	sys_stat,	"stat"	}, /* 38 */
+  { 2,	TF,	sys_stat,	"stat?"	}, /* 38 */
   { 1,	0,	sys_getppid,	"getppid"	}, /* 39 */
-  { 2,	TF,	sys_lstat,	"lstat"	}, /* 40 */
+  { 2,	TF,	sys_lstat,	"lstat?"	}, /* 40 */
   { 1,	0,	sys_dup,	"dup"	}, /* 41 */
   { 1,	0,	sys_pipe,	"pipe"	}, /* 42 */
   { 1,	0,	sys_getegid,	"getegid"	}, /* 43 */
   { 4,	0,	sys_profil,	"profil"	}, /* 44 */
   { 4,	0,	sys_ktrace,	"ktrace"	}, /* 45 */
-  { 3,	TS,	sys_sigaction,	"sigaction"	}, /* 46 */
+  { 3,	TS,	sys_sigaction,	"sigaction?"	}, /* 46 */
   { 1,	0,	sys_getgid,	"getgid"	}, /* 47 */
-  { 2,	TS,	sys_sigprocmask,	"sigprocmask"	}, /* 48 */
+  { 2,	TS,	sys_sigprocmask,	"sigprocmask?"	}, /* 48 */
   { 2,	0,	sys_getlogin,	"getlogin"	}, /* 49 */
   { 1,	0,	sys_setlogin,	"setlogin"	}, /* 50 */
   { 1,	TF,	sys_acct,	"acct"	}, /* 51 */
-  { 1,	TS,	sys_sigpending,	"sigpending"	}, /* 52 */
+  { 1,	TS,	sys_sigpending,	"sigpending?"	}, /* 52 */
   { 2,	TS,	sys_sigaltstack,	"sigaltstack"	}, /* 53 */
   { 3,	0,	sys_ioctl,	"ioctl"	}, /* 54 */
   { 1,	0,	sys_reboot,	"reboot"	}, /* 55 */
@@ -64,16 +64,16 @@
   { 3,	TF|TP,	sys_execve,	"execve"	}, /* 59 */
   { 1,	0,	sys_umask,	"umask"	}, /* 60 */
   { 1,	TF,	sys_chroot,	"chroot"	}, /* 61 */
-  { 2,	TF,	sys_fstat,	"fstat"	}, /* 62 */
-  { 4,	0,	sys_getkerninfo,	"getkerninfo"	}, /* 63 */
-  { 1,	0,	sys_getpagesize,	"getpagesize"	}, /* 64 */
+  { 2,	TF,	sys_fstat,	"fstat?"	}, /* 62 */
+  { 4,	0,	sys_getkerninfo,	"getkerninfo?"	}, /* 63 */
+  { 1,	0,	sys_getpagesize,	"getpagesize?"	}, /* 64 */
   { 3,	0,	sys_msync,	"msync"	}, /* 65 */
   { 1,	TP,	sys_vfork,	"vfork"	}, /* 66 */
   { -1,	0,	printargs,	"SYS_67"	}, /* 67 */
   { -1,	0,	printargs,	"SYS_68"	}, /* 68 */
   { 1,	0,	sys_sbrk,	"sbrk"	}, /* 69 */
   { 1,	0,	sys_sstk,	"sstk"	}, /* 70 */
-  { 6,	0,	sys_mmap,	"mmap"	}, /* 71 */
+  { 6,	0,	sys_mmap,	"mmap?"	}, /* 71 */
   { 1,	0,	sys_vadvise,	"vadvise"	}, /* 72 */
   { 2,	0,	sys_munmap,	"munmap"	}, /* 73 */
   { 3,	0,	sys_mprotect,	"mprotect"	}, /* 74 */
@@ -86,11 +86,11 @@
   { 1,	0,	sys_getpgrp,	"getpgrp"	}, /* 81 */
   { 2,	0,	sys_setpgid,	"setpgid"	}, /* 82 */
   { 3,	0,	sys_setitimer,	"setitimer"	}, /* 83 */
-  { 1,	TP,	sys_wait,	"wait"	}, /* 84 */
+  { 1,	TP,	sys_wait,	"wait?"	}, /* 84 */
   { 1,	TF,	sys_swapon,	"swapon"	}, /* 85 */
   { 2,	0,	sys_getitimer,	"getitimer"	}, /* 86 */
-  { 2,	0,	sys_gethostname,	"gethostname"	}, /* 87 */
-  { 2,	0,	sys_sethostname,	"sethostname"	}, /* 88 */
+  { 2,	0,	sys_gethostname,	"gethostname?"	}, /* 87 */
+  { 2,	0,	sys_sethostname,	"sethostname?"	}, /* 88 */
   { 1,	0,	sys_getdtablesize,	"getdtablesize"	}, /* 89 */
   { 2,	0,	sys_dup2,	"dup2"	}, /* 90 */
   { -1,	0,	printargs,	"SYS_91"	}, /* 91 */
@@ -103,20 +103,20 @@
   { 3,	TN,	sys_connect,	"connect"	}, /* 98 */
   { 3,	TN,	sys_accept,	"accept"	}, /* 99 */
   { 2,	0,	sys_getpriority,	"getpriority"	}, /* 100 */
-  { 4,	TN,	sys_send,	"send"	}, /* 101 */
-  { 4,	TN,	sys_recv,	"recv"	}, /* 102 */
-  { 1,	TS,	sys_sigreturn,	"sigreturn"	}, /* 103 */
+  { 4,	TN,	sys_send,	"send?"	}, /* 101 */
+  { 4,	TN,	sys_recv,	"recv?"	}, /* 102 */
+  { 1,	TS,	sys_sigreturn,	"sigreturn?"	}, /* 103 */
   { 3,	TN,	sys_bind,	"bind"	}, /* 104 */
   { 5,	TN,	sys_setsockopt,	"setsockopt"	}, /* 105 */
   { 2,	TN,	sys_listen,	"listen"	}, /* 106 */
   { -1,	0,	printargs,	"SYS_107"	}, /* 107 */
-  { 3,	TS,	sys_sigvec,	"sigvec"	}, /* 108 */
-  { 1,	TS,	sys_sigblock,	"sigblock"	}, /* 109 */
-  { 1,	TS,	sys_sigsetmask,	"sigsetmask"	}, /* 110 */
-  { 1,	TS,	sys_sigsuspend,	"sigsuspend"	}, /* 111 */
-  { 2,	TS,	sys_sigstack,	"sigstack"	}, /* 112 */
-  { 3,	TN,	sys_recvmsg,	"recvmsg"	}, /* 113 */
-  { 3,	TN,	sys_sendmsg,	"sendmsg"	}, /* 114 */
+  { 3,	TS,	sys_sigvec,	"sigvec?"	}, /* 108 */
+  { 1,	TS,	sys_sigblock,	"sigblock?"	}, /* 109 */
+  { 1,	TS,	sys_sigsetmask,	"sigsetmask?"	}, /* 110 */
+  { 1,	TS,	sys_sigsuspend,	"sigsuspend?"	}, /* 111 */
+  { 2,	TS,	sys_sigstack,	"sigstack?"	}, /* 112 */
+  { 3,	TN,	sys_recvmsg,	"recvmsg?"	}, /* 113 */
+  { 3,	TN,	sys_sendmsg,	"sendmsg?"	}, /* 114 */
   { -1,	0,	printargs,	"SYS_115"	}, /* 115 */
   { 2,	0,	sys_gettimeofday,	"gettimeofday"	}, /* 116 */
   { 2,	0,	sys_getrusage,	"getrusage"	}, /* 117 */
@@ -131,8 +131,8 @@
   { 2,	0,	sys_setreuid,	"setreuid"	}, /* 126 */
   { 2,	0,	sys_setregid,	"setregid"	}, /* 127 */
   { 2,	TF,	sys_rename,	"rename"	}, /* 128 */
-  { 2,	TF,	sys_truncate,	"truncate"	}, /* 129 */
-  { 2,	0,	sys_ftruncate,	"ftruncate"	}, /* 130 */
+  { 2,	TF,	sys_truncate,	"truncate?"	}, /* 129 */
+  { 2,	0,	sys_ftruncate,	"ftruncate?"	}, /* 130 */
   { 2,	0,	sys_flock,	"flock"	}, /* 131 */
   { 2,	0,	sys_mkfifo,	"mkfifo"	}, /* 132 */
   { 6,	TN,	sys_sendto,	"sendto"	}, /* 133 */
@@ -143,22 +143,22 @@
   { 2,	TF,	sys_utimes,	"utimes"	}, /* 138 */
   { -1,	0,	printargs,	"SYS_139"	}, /* 139 */
   { 2,	0,	sys_adjtime,	"adjtime"	}, /* 140 */
-  { 3,	TN,	sys_getpeername,	"getpeername"	}, /* 141 */
-  { 1,	0,	sys_gethostid,	"gethostid"	}, /* 142 */
-  { 1,	0,	sys_sethostid,	"sethostid"	}, /* 143 */
-  { 2,	0,	sys_getrlimit,	"getrlimit"	}, /* 144 */
-  { 2,	0,	sys_setrlimit,	"setrlimit"	}, /* 145 */
-  { 2,	TS,	sys_killpg,	"killpg"	}, /* 146 */
+  { 3,	TN,	sys_getpeername,	"getpeername?"	}, /* 141 */
+  { 1,	0,	sys_gethostid,	"gethostid?"	}, /* 142 */
+  { 1,	0,	sys_sethostid,	"sethostid?"	}, /* 143 */
+  { 2,	0,	sys_getrlimit,	"getrlimit?"	}, /* 144 */
+  { 2,	0,	sys_setrlimit,	"setrlimit?"	}, /* 145 */
+  { 2,	TS,	sys_killpg,	"killpg?"	}, /* 146 */
   { 1,	0,	sys_setsid,	"setsid"	}, /* 147 */
   { 4,	0,	sys_quotactl,	"quotactl"	}, /* 148 */
-  { 1,	0,	sys_quota,	"quota"	}, /* 149 */
+  { 1,	0,	sys_quota,	"quota?"	}, /* 149 */
   { 3,	TN,	sys_getsockname,	"getsockname"	}, /* 150 */
   { -1,	0,	printargs,	"SYS_151"	}, /* 151 */
   { -1,	0,	printargs,	"SYS_152"	}, /* 152 */
   { -1,	0,	printargs,	"SYS_153"	}, /* 153 */
   { -1,	0,	printargs,	"SYS_154"	}, /* 154 */
   { 2,	0,	sys_nfssvc,	"nfssvc"	}, /* 155 */
-  { 4,	0,	sys_getdirentries,	"getdirentries"	}, /* 156 */
+  { 4,	0,	sys_getdirentries,	"getdirentries?"	}, /* 156 */
   { 2,	TF,	sys_statfs,	"statfs"	}, /* 157 */
   { 2,	0,	sys_fstatfs,	"fstatfs"	}, /* 158 */
   { -1,	0,	printargs,	"SYS_159"	}, /* 159 */
diff --git a/freebsd/syscalls.pl b/freebsd/syscalls.pl
index 0dc389a..84fd811 100644
--- a/freebsd/syscalls.pl
+++ b/freebsd/syscalls.pl
@@ -110,11 +110,15 @@
 	$_ = "$_$line";
     }
 
-    if (/^(\d+)\s+(?:MPSAFE\s+)?\w+\s+\w+\s+\{\s*([^}]+)\s*\}([^}]*)$/) {
-	my($proto, $ext, $name, $nargs, @args, $pfunc, $cat);
-	
-	$proto = $2;
-	$ext = $3;
+    if (/^(\d+)\s+(?:MPSAFE\s+)?(\w+)\s+\w+\s+\{\s*([^}]+)\s*\}([^}]*)$/) {
+	my($compat, $proto, $ext, $name, $nargs, @args, $pfunc, $cat);
+
+	next if $2 eq 'OBSOL' || $2 eq 'UNIMPL';
+
+	$compat = $2 eq 'COMPAT' ? '?' : "";
+
+	$proto = $3;
+	$ext = $4;
 	
 	if ($1 > $sysnum) { # syscall gap
 	    while($sysnum < $1) {
@@ -142,6 +146,7 @@
 	    } else {
 		$cat = "0";
 	    }
+	    $name .= $compat;
 	    print "  { $nargs,\t$cat,\t$pfunc,\t\"$name\"\t}, /* $sysnum */\n";
 	    $sysnum++;
 	} else {