--- mit-pthreads/machdep/syscall-i386-freebsd-2.0.S.orig	Mon Oct 20 03:35:30 1997
+++ mit-pthreads/machdep/syscall-i386-freebsd-2.0.S	Sat Oct 10 17:20:22 1998
@@ -51,30 +51,29 @@
 
 #ifdef __STDC__
 
-#define	SYSCALL(x)					\
-	.globl _machdep_sys_##x##;		\
-									\
-_machdep_sys_##x##:;				\
-									\
-	movl $(SYS_##x##), %eax;		\
-	.byte 0x9a; .long 0; .word 7;	\
-	jb	1b;							\
-	ret;							
+#ifdef __ELF__
+#define NAME(X)		machdep_sys_##X
+#else
+#define NAME(X)		_machdep_sys_##X
+#endif
 
 #else
 
-#define	SYSCALL(x)					\
-	.globl _machdep_sys_/**/x;		\
-									\
-_machdep_sys_/**/x:;				\
-									\
-	movl $(SYS_/**/x), %eax;		\
-	.byte 0x9a; .long 0; .word 7;	\
-	jb	1b;							\
-	ret;							
+#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
 
 /*
  * Initial asm stuff for all functions.
@@ -95,17 +94,18 @@
 /* ==========================================================================
  * machdep_sys_fork()
  */
-	.globl _machdep_sys_fork;		
+	.globl NAME(fork);		
 									
-_machdep_sys_fork:;				
+NAME(fork):;				
 									
 	movl $(SYS_fork), %eax;		
-	.byte 0x9a; .long 0; .word 7;	
+	KERNCALL;
 	cmpl $0, %edx
 	je	2f
 	movl $0, %eax
 2:	
 	ret;							
+	END(fork)
 
 /* ==========================================================================
  * machdep_sys___syscall()
@@ -114,57 +114,56 @@
 _machdep_sys___syscall:;				
 
 	movl $(SYS___syscall), %eax;		
-	.byte 0x9a; .long 0; .word 7;	
+	KERNCALL;
 	jb 3f;
 	ret
 
 /* ==========================================================================
  * machdep_sys_sigsuspend()
  */
-	.globl _machdep_sys_sigsuspend;		
+	.globl NAME(sigsuspend);		
 
-_machdep_sys_sigsuspend:;
+NAME(sigsuspend):;
 
 	movl    4(%esp),%eax            # fetch mask arg
-    movl    (%eax),%eax             # indirect to mask arg
-    movl    %eax,4(%esp)
+	movl    (%eax),%eax             # indirect to mask arg
+	movl    %eax,4(%esp)
 	movl $(SYS_sigsuspend), %eax;		
-	.byte 0x9a; .long 0; .word 7;	
+	KERNCALL;
 	jb 3f;
 	ret
-
 3:
-	
 	neg		%eax
 	movl	$0xffffffff,%edx
 	ret
+	END(sigsuspend)
 
 /* ==========================================================================
  * machdep_sys_sigprocmask()
  */
-	.globl _machdep_sys_sigprocmask;		
+	.globl NAME(sigprocmask);		
 
-_machdep_sys_sigprocmask:;
+NAME(sigprocmask):;
 
 	movl    8(%esp),%ecx
 	movl    (%ecx),%ecx
 	movl    %ecx,8(%esp)
 	movl    $ SYS_sigprocmask , %eax
-	.byte 0x9a; .long 0; .word 7;
+	KERNCALL;
 	jb 4f;
 	ret
-
 4:
 	neg     %eax
 	movl    $0xffffffff,%edx
 	ret
+	END(sigprocmask)
 
 /* ==========================================================================
  * machdep_sys_lseek()
  */
-	.globl _machdep_sys_lseek;		
+	.globl NAME(lseek);		
 
-_machdep_sys_lseek:;				
+NAME(lseek):;				
 									
 	pushl  %ebp;
 	movl   %esp,%ebp;
@@ -178,13 +177,14 @@
 	call _machdep_sys___syscall;
 	leave
 	ret
+	END(lseek)
 
 /* ==========================================================================
  * machdep_sys_ftruncate() ; Added by Monty
  */
-        .globl _machdep_sys_ftruncate;
+        .globl NAME(ftruncate);
  
-_machdep_sys_ftruncate:;
+NAME(ftruncate):;
  
         pushl  %ebp; 
         movl   %esp,%ebp;
@@ -197,41 +197,44 @@
         call _machdep_sys___syscall;
         leave
         ret  
+	END(ftruncate)
 
 /* ==========================================================================
  * machdep_sys_setjmp()
  */
-	.globl _machdep_sys_setjmp;		
+	.globl NAME(setjmp);		
 
-_machdep_sys_setjmp:;				
-    movl    4(%esp),%eax
-    movl    0(%esp),%edx
-    movl    %edx, 0(%eax)       /* rta */
-    movl    %ebx, 4(%eax)
-    movl    %esp, 8(%eax)
-    movl    %ebp,12(%eax)
-    movl    %esi,16(%eax)
-    movl    %edi,20(%eax)
-    xorl    %eax,%eax
-    ret
+NAME(setjmp):;				
+	movl    4(%esp),%eax
+	movl    0(%esp),%edx
+	movl    %edx, 0(%eax)       /* rta */
+	movl    %ebx, 4(%eax)
+	movl    %esp, 8(%eax)
+	movl    %ebp,12(%eax)
+	movl    %esi,16(%eax)
+	movl    %edi,20(%eax)
+	xorl    %eax,%eax
+	ret
+	END(setjmp)
 
 /* ==========================================================================
  * machdep_sys_longjmp()
  */
-    .globl _machdep_sys_longjmp;
+    .globl NAME(longjmp);
     
-_machdep_sys_longjmp:;
-    movl    4(%esp),%edx
-    movl    8(%esp),%eax
-    movl    0(%edx),%ecx
-    movl    4(%edx),%ebx
-    movl    8(%edx),%esp
-    movl    12(%edx),%ebp
-    movl    16(%edx),%esi
-    movl    20(%edx),%edi
-    testl   %eax,%eax
-    jnz 1f
-    incl    %eax
-1:  movl    %ecx,0(%esp)
-    ret
-
+NAME(longjmp):;
+	movl    4(%esp),%edx
+	movl    8(%esp),%eax
+	movl    0(%edx),%ecx
+	movl    4(%edx),%ebx
+	movl    8(%edx),%esp
+	movl    12(%edx),%ebp
+	movl    16(%edx),%esi
+	movl    20(%edx),%edi
+	testl   %eax,%eax
+	jnz 1f
+	incl    %eax
+1:
+	movl    %ecx,0(%esp)
+	ret
+	END(longjmp)
