| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | /* * June 27, 2001             Manuel Novoa III * * This is a heavily modified version of gcc's output for the syscall5 macro. * The idea (originally from dietlibc) is that all syscall functions simply * set the syscall number in %al (since <= 255) and then jump here.  All the * common work is done by __uClibc_syscall, saving a fair amount of generated * code where a number of syscalls are used.  The (potential) cost is some  * unnecessary pushes, pops, and movs but the execution time penalty should * be relatively small compared to the cost of the syscall itself. * * WARNING: If the startup code for uClibc changes, I suppose it is possible *          that this code might try to access memory under the bottom of *          the stack. * WARNING: This will need to be modified if the number of syscalls ever *          exceeds 255.  So will the associated syscall macros. */	.text	.align 4.globl __uClibc_syscall	.type	 __uClibc_syscall,@function__uClibc_syscall:	pushl %edi	pushl %esi	pushl %ebx	and $0xff,%eax	movl 16(%esp),%ebx	movl 20(%esp),%ecx	movl 24(%esp),%edx	movl 28(%esp),%esi	movl 32(%esp),%edi#APP	int $0x80#NO_APP	cmpl $-4095,%eax	jbe .Ldone#ifdef PIC	call LhereLhere:	popl %ebx	addl $_GLOBAL_OFFSET_TABLE_+[.-Lhere],%ebx	negl %eax	movl %eax,%ecx#ifdef _LIBC_REENTRANT	call __errno_location@PLT#else	movl errno@GOT(%ebx),%eax#endif /* _LIBC_REENTRANT */	movl %ecx,(%eax)#else	negl %eax#ifdef _LIBC_REENTRANT	movl %eax,%ecx	call __errno_location	movl %ecx,(%eax)#else	movl %eax,errno#endif /* _LIBC_REENTRANT */#endif /* PIC */	movl $-1,%eax	.p2align 4,,7.Ldone:	popl %ebx	popl %esi	popl %edi	ret.Lsize:	.size	 __uClibc_syscall,.Lsize-__uClibc_syscall
 |