nginx/src/os/unix/rfork_thread.S
Igor Sysoev e5a222c6fe nginx-0.1.16-RELEASE import
*) Bugfix: if the response were transferred by chunks, then on the HEAD
       request the final chunk was issued.

    *) Bugfix: the "Connection: keep-alive" header were issued, even if the
       keepalive_timeout directive forbade the keep-alive use.

    *) Bugfix: the errors in the ngx_http_fastcgi_module caused the
       segmentation faults.

    *) Bugfix: the compressed response encrypted by SSL may not transferred
       complete.

    *) Bugfix: the TCP-specific TCP_NODELAY, TCP_NOPSUH, and TCP_CORK
       options, are not used for the unix domain sockets.

    *) Feature: the rewrite directive supports the arguments rewriting.

    *) Bugfix: the response code 400 was returned for the POST request with
       the "Content-Length: 0" header; the bug had appeared in 0.1.14.
2005-01-25 12:27:35 +00:00

73 lines
1021 B
ArmAsm

/*
* Copyright (C) Igor Sysoev
*/
#include <sys/syscall.h>
#include <machine/asm.h>
/*
* rfork_thread(3) - rfork_thread(flags, stack, func, arg);
*/
#define KERNCALL int $0x80
ENTRY(rfork_thread)
push %ebp
mov %esp, %ebp
push %esi
mov 12(%ebp), %esi # the thread stack address
sub $4, %esi
mov 20(%ebp), %eax # the thread argument
mov %eax, (%esi)
sub $4, %esi
mov 16(%ebp), %eax # the thread start address
mov %eax, (%esi)
push 8(%ebp) # rfork(2) flags
push $0
mov $SYS_rfork, %eax
KERNCALL
jc error
cmp $0, %edx
jne child
parent:
add $8, %esp
pop %esi
leave
ret
child:
mov %esi, %esp
pop %eax
call *%eax # call a thread start address ...
add $4, %esp
push %eax
push $0
mov $SYS_exit, %eax # ... and exit(2) after a thread would return
KERNCALL
error:
add $8, %esp
pop %esi
leave
PIC_PROLOGUE
/* libc's cerror: jmp PIC_PLT(HIDENAME(cerror)) */
push %eax
call PIC_PLT(CNAME(__error))
pop %ecx
PIC_EPILOGUE
mov %ecx, (%eax)
mov $-1, %eax
mov $-1, %edx
ret