Ver Fonte

Fixed vfork on i386. Reduced size of __uClibc_syscall.

Manuel Novoa III há 24 anos atrás
pai
commit
7be859a705

+ 2 - 2
libc/sysdeps/linux/i386/Makefile

@@ -28,13 +28,13 @@ ASFLAGS=$(CFLAGS)
 CRT0=crt0.S
 CRT0_OBJ=$(patsubst %.S,%.o, $(CRT0))
 
-SSRC=longjmp.S setjmp.S #_start.S #clone.S
+SSRC=longjmp.S setjmp.S vfork.S #_start.S #clone.S
 ifeq ($(UNIFIED_SYSCALL),true)
 	SSRC += __uClibc_syscall.S
 endif
 SOBJS=$(patsubst %.S,%.o, $(SSRC))
 
-CSRC=fork.c vfork.c __init_brk.c brk.c sbrk.c
+CSRC=fork.c __init_brk.c brk.c sbrk.c
 COBJS=$(patsubst %.c,%.o, $(CSRC))
 
 OBJS=$(SOBJS) $(COBJS)

+ 14 - 21
libc/sysdeps/linux/i386/__uClibc_syscall.S

@@ -1,39 +1,32 @@
-.globl __uClibc_syscall
-
 .text
 	.align 4
+.globl __uClibc_syscall
+	.type	 __uClibc_syscall,@function
 __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
+	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
-	movl %eax,-4(%ebp)
-	.p2align 4,,7
-	cmpl $-126,-4(%ebp)
+	cmpl $-4095,%eax
+	/* jae .L5 */
+	/* cmpl $-126,%eax */
 	jbe .L5
-	movl -4(%ebp),%eax
 	negl %eax
 	movl %eax,errno
-	movl $-1,-4(%ebp)
+	movl $-1,%eax
+	.p2align 4,,7
 .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
+.Lfe1:
+	.size	 __uClibc_syscall,.Lfe1-__uClibc_syscall

+ 22 - 0
libc/sysdeps/linux/i386/vfork.S

@@ -0,0 +1,22 @@
+.text
+	.align 4
+.globl vfork
+	.type	 vfork,@function
+vfork:
+	popl %ecx
+	movl $190,%eax
+#APP
+	int $0x80
+#NO_APP
+	cmpl $-4095,%eax
+	jae .L5
+	jmp *%ecx
+	.p2align 4,,7
+.L5:
+	pushl %ecx
+	negl %eax
+	movl %eax,errno
+	movl $-1,%eax
+	ret
+.Lfe1:
+	.size	 vfork,.Lfe1-vfork