cstruble@geech.ai.mit.edu (Craig Struble) (03/09/91)
I'm working on compiling SB prolog for A/UX 2.0 so the students at Va. Tech aren't forced into using a VAX VMS machine to do their prolog work. Much to my dismay, SB Prolog uses syscall and I don't know what the A/UX equivalent would be. Does anyone out there know what the equivalent for syscall is for A/UX 2.0? See ya later, Craig cstruble@pogo.ai.mit.edu -- Craig Struble Sysop of The Toaster (703)951-4308 Va. Tech student Mac and A/UX support cstruble@vttcf.cc.vt.edu Fidonet (1:151/118.1) cstruble@pogo.ai.mit.edu
coolidge@cs.uiuc.edu (John Coolidge) (03/10/91)
cstruble@geech.ai.mit.edu (Craig Struble) writes: >I'm working on compiling SB prolog for A/UX 2.0 so the students at Va. Tech >aren't forced into using a VAX VMS machine to do their prolog work. Much to >my dismay, SB Prolog uses syscall and I don't know what the A/UX equivalent >would be. Does anyone out there know what the equivalent for syscall is for >A/UX 2.0? The good news: syscall() _is_ included in libc.a on A/UX 2.0 (and it seems to work, too, based on a few tests I just ran). The bad news: A/UX does not include syscall.h, which is necessary to use syscall. So, needing syscall, I went out and built a working syscall.h (:-)) which I'll append to this posting. For those who don't know, syscall(2) is a way to make a given system call without going through the normal interface; it's useful if you want to override a given system call (for instrumentation, adding a wrapper, etc). I know at least xview and, now, SB Prolog need it; perl will use it if you've got it. Notes on syscall under A/UX: there are two major methods of getting parameters into the kernel --- stack-based parameter passing and register parameters. As far as I can tell, these use different traps and are thus distinguishable; therefore, those that use regparms in the standard libc can go through the syscall that's in libc (which only does stack parameters) and still work. I'm not sure why there's a difference, unless regparms are faster and someone has half-switched libc over. At any rate, I've tried several of the regparm-style syscalls with syscall() from libc and they work correctly. My syscall.h is annotated with which sort of parameter passing a given routine uses (well, it's actually cryptic: "normal" means stack-based, "regparm x y" means register parameters with x arguments and y registers needing saving before they're clobbered with a parameter, and "strange" can mean just about anything :-)). There are several traps used for more than one syscall; these are marked "also" --- at the moment I haven't added extra #defines for them, although I probably should. As a challenge to myself, and to help prove that I've figured out how libc is passing things, I've got a complete reimplementation of all the section 2 calls except the shm/sem/mem calls written (assembly source and all that); I'll probably put it out Real Soon Now (it's really not much use since you've already got libc, unless you want to hack some strange low-level behavior or are interested in how Unix passes things into the kernel). Believe it or not, almost all this is actually useful for my thesis research :-). --John --------------------------------- syscall.h --------------------------------- #ifndef _sys_syscall_h #define _sys_syscall_h #define SYS_exit 1 /* Strange */ #define SYS_fork 2 /* Strange */ #define SYS_read 3 /* Normal */ #define SYS_write 4 /* Normal */ #define SYS_open 5 /* Normal */ #define SYS_close 6 /* Strange */ #define SYS_wait 7 /* Strange */ /* Also wait3 */ #define SYS_creat 8 /* Normal */ #define SYS_link 9 /* Normal */ #define SYS_unlink 10 /* Normal */ #define SYS_chdir 12 /* Normal */ #define SYS_time 13 /* Strange */ #define SYS_mknod 14 /* Normal */ #define SYS_chmod 15 /* Normal */ #define SYS_chown 16 /* Normal */ #define SYS_brk 17 /* Strange */ /* Also sbrk */ #define SYS_lseek 19 /* Normal */ #define SYS_getpid 20 /* Strange */ /* Also getppid */ #define SYS_unmount 22 /* Normal */ #define SYS_getuid 24 /* Strange */ /* Also geteuid */ #define SYS_stime 25 /* Strange */ #define SYS_ptrace 26 /* Normal */ #define SYS_alarm 27 /* Normal */ #define SYS_pause 29 /* Normal */ #define SYS_utime 30 /* Normal */ #define SYS_access 33 /* Normal */ #define SYS_nice 34 /* Normal */ #define SYS_sync 36 /* Strange */ #define SYS_kill 37 /* Normal */ #define SYS_setpgrp 39 /* Strange */ /* Also getpgrp */ #define SYS_dup 41 /* Normal */ #define SYS_pipe 42 /* Strange */ #define SYS_times 43 /* Normal */ #define SYS_profil 44 /* Normal */ #define SYS_plock 45 /* Normal */ #define SYS_getgid 47 /* Strange */ /* Also getegid */ #define SYS_signal 48 /* Normal */ #define SYS_msgsys 49 /* Strange */ /*FIX*/ #define SYS_acct 51 /* Normal */ #define SYS_shmsys 52 /* Strange */ /*FIX*/ #define SYS_semsys 53 /* Strange */ /*FIX*/ #define SYS_ioctl 54 /* Normal */ #define SYS_phys 55 /* Normal */ #define SYS_locking 56 /* Normal */ #define SYS_uinfo 57 /* Strange */ /* Handles ustat uname uvar */ #define SYS_execve 59 /* Strange */ #define SYS_umask 60 /* Normal */ #define SYS_chroot 61 /* Normal */ #define SYS_fcntl 62 /* Normal */ #define SYS_ulimit 63 /* Normal */ #define SYS_reboot 64 /* Normal */ #define SYS_slotmgr 66 /* Strange */ #define SYS_swapmmumode 67 /* Normal */ #define SYS_accept 70 /* Regparm - 3 0 */ #define SYS_bind 71 /* Regparm - 3 0 */ #define SYS_connect 72 /* Regparm - 3 0 */ #define SYS_gethostid 73 /* Regparm - 0 0 */ #define SYS_gethostname 74 /* Regparm - 2 0 */ #define SYS_getpeername 75 /* Regparm - 3 0 */ #define SYS_getsockname 76 /* Regparm - 2 0 */ #define SYS_getsockopt 77 /* Regparm - 5 2 */ #define SYS_listen 78 /* Regparm - 2 0 */ #define SYS_recv 79 /* Regparm - 4 1 */ #define SYS_recvfrom 80 /* Regparm - 6 3 */ #define SYS_recvmsg 81 /* Regparm - 3 0 */ #define SYS_select 82 /* Regparm - 5 2 */ #define SYS_send 83 /* Regparm - 4 1 */ #define SYS_sendmsg 84 /* Regparm - 3 0 */ #define SYS_sendto 85 /* Regparm - 6 3 */ #define SYS_sethostid 86 /* Regparm - 1 0 */ #define SYS_sethostname 87 /* Regparm - 2 0 */ #define SYS_setregid 88 /* Regparm - 2 0 */ #define SYS_setreuid 89 /* Regparm - 2 0 */ #define SYS_setsockopt 90 /* Regparm - 5 2 */ #define SYS_shutdown 91 /* Regparm - 2 0 */ #define SYS_socket 92 /* Regparm - 3 0 */ #define SYS_socketpair 93 /* Regparm - 4 1 */ #define SYS_getdomainname 100 /* Regparm - 2 0 */ #define SYS_setdomainname 101 /* Regparm - 2 0 */ #define SYS_getgroups 102 /* Regparm - 2 0 */ #define SYS_setgroups 103 /* Regparm - 2 0 */ #define SYS_getdtablesize 104 /* Regparm - 0 0 */ #define SYS_flock 105 /* Regparm - 2 0 */ #define SYS_readv 106 /* Regparm - 3 0 */ #define SYS_writev 107 /* Regparm - 3 0 */ #define SYS_mkdir 108 /* Regparm - 2 0 */ #define SYS_rmdir 109 /* Regparm - 1 0 */ #define SYS_getdirentries 110 /* Regparm - 4 1 */ #define SYS_lstat 111 /* Regparm - 2 0 */ #define SYS_symlink 112 /* Regparm - 2 0 */ #define SYS_readlink 113 /* Regparm - 3 0 */ #define SYS_truncate 114 /* Regparm - 2 0 */ #define SYS_ftruncate 115 /* Regparm - 2 0 */ #define SYS_fsync 116 /* Regparm - 1 0 */ #define SYS_statfs 117 /* Regparm - 2 0 */ #define SYS_fstatfs 118 /* Regparm - 2 0 */ #define SYS_async_daemon 119 /* Regparm - 0 0 */ #define SYS_nfs_svc 121 /* Regparm - 1 0 */ #define SYS_nfs_getfh 122 /* Regparm - 2 0 */ #define SYS_rename 123 /* Regparm - 2 0 */ #define SYS_fstat 124 /* Regparm - 2 0 */ #define SYS_stat 125 /* Regparm - 2 0 */ #define SYS_getcompat 127 /* Regparm - 0 0 */ #define SYS_setcompat 128 /* Strange (1 0 + set42sig) */ #define SYS_vtrace 128 /* Regparm - 2 0 */ #define SYS_sigvec 129 /* Regparm - 3 0 */ #define SYS_sigblock 130 /* Regparm - 1 0 */ #define SYS_sigsetmask 131 /* Regparm - 1 0 */ #define SYS_sigpause 132 /* Regparm - 1 0 */ #define SYS_sigstack 133 /* Regparm - 2 0 */ #define SYS_getitimer 134 /* Regparm - 2 0 */ #define SYS_setitimer 135 /* Regparm - 3 0 */ #define SYS_gettimeofday 136 /* Regparm - 1 0 */ #define SYS_settimeofday 137 /* Regparm - 1 0 */ #define SYS_adjtime 138 /* Regparm - 2 0 */ #define SYS_fsmount 141 /* Regparm - 4 1 */ #define SYS_umount 142 /* Normal */ #define SYS_fchmod 143 /* Regparm - 2 0 */ #define SYS_fchown 144 /* Regparm - 3 0 */ #define SYS_setsid 145 /* Regparm - 0 0 */ #define SYS_utimes 145 /* Regparm - 2 0 */ #define SYS_setpgid 147 /* Regparm - 2 0 */ #define SYS_getcterm 148 /* Regparm - 0 0 */ #define SYS_sigpending 149 /* Regparm - 1 0 */ #define SYS_waitpid 151 /* Strange (3 0 + status stuff) */ #endif _sys_syscall_h