diff options
Diffstat (limited to 'mit-pthreads/machdep/syscall-template-i386-freebsd-2.0.S')
-rw-r--r-- | mit-pthreads/machdep/syscall-template-i386-freebsd-2.0.S | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/mit-pthreads/machdep/syscall-template-i386-freebsd-2.0.S b/mit-pthreads/machdep/syscall-template-i386-freebsd-2.0.S new file mode 100644 index 00000000000..1906a949c8b --- /dev/null +++ b/mit-pthreads/machdep/syscall-template-i386-freebsd-2.0.S @@ -0,0 +1,59 @@ +#include <sys/syscall.h> + +#ifdef __STDC__ + +#define SYS(X) SYS_##X +#ifdef __ELF__ +#define NAME(X) machdep_sys_##X +#else +#define NAME(X) _machdep_sys_##X +#endif + +#else + +#define SYS(X) SYS_/**/X +#ifdef __ELF__ +#define NAME(X) machdep_sys_/**/X +#else +#define NAME(X) _machdep_sys_/**/X +#endif + +#endif + +#ifdef __ELF__ +#define END(X) 5: ; .type NAME(X),@function ; .size NAME(X),5b - NAME(X) +#define KERNCALL int $0x80 +#else +#define END(X) +#define KERNCALL .byte 0x9a; .long 0; .word 7; +#endif + +#define SYSCALL(x) \ + .globl NAME(x); \ + \ +NAME(x):; \ + movl $(SYS(x)), %eax; \ + KERNCALL; \ + jb 1b; \ + ret; \ + END(x) + +/* + * Initial asm stuff for all functions. + */ + .text + .align 2 + + +/* ========================================================================== + * error code for all syscalls. The error value is returned as the negative + * of the errno value. + */ + +1: + neg %eax + ret + +#define XSYSCALL(NAME) SYSCALL(NAME) + +XSYSCALL(SYSCALL_NAME) |