syscall equivalent
John Coolidge
coolidge at cs.uiuc.edu
Sun Mar 10 07:07:45 AEST 1991
cstruble at 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
More information about the Comp.unix.aux
mailing list