summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/i386/__uClibc_syscall.S
blob: ecf2d63504cb961a7c5271a2aef594a9dd14e83e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
.globl __uClibc_syscall

.text
	.align 4
__uClibc_syscall:
	pushl %ebp
	movl %esp,%ebp
	subl $8,%esp
	pushl %edi
	pushl %esi
	pushl %ebx
	/* movl $21,%eax */
	and $0xff,%eax
	movl 8(%ebp),%ebx
	movl 12(%ebp),%ecx
	movl 16(%ebp),%edx
	movl 20(%ebp),%esi
	movl 24(%ebp),%edi
#APP
	int $0x80
#NO_APP
	movl %eax,-4(%ebp)
	.p2align 4,,7
	cmpl $-126,-4(%ebp)
	jbe .L5
	movl -4(%ebp),%eax
	negl %eax
	movl %eax,errno
	movl $-1,-4(%ebp)
.L5:
	movl -4(%ebp),%edx
	movl %edx,-8(%ebp)
	movl -8(%ebp),%eax
	leal -20(%ebp),%esp
	popl %ebx
	popl %esi
	popl %edi
	leave
	ret