File:  [DVB] / dietlibc / i386 / setjmp.S
Revision 1.7: download - view: text, annotated - select for diffs
Wed Sep 21 07:33:08 2005 UTC (18 years, 8 months ago) by leitner
Branches: MAIN
CVS tags: HEAD
  update syscalls
  lots of fixes from Markus FX Oberhumer:
    * better signal handling error detection
    * setjmp.S on i386
    * getenv on i386
    * sys/stat.h -malign-double fix
    * update fcntl.h for MIPS to 2.6.13 version
    * jmp_buf is 40*8 instead of 58*8 on ppc64.
    * This patch fixes the section of the TOC entries on ppc64
    * libstdc++ updates for gcc 4
    * remove cstddef and cwchar (no longer needed)
    * int -> ssize_t for read and write
    * sigjmp.c: __mask_was_saved was not set in all cases!
    * another round of ILP64 cleanups

#include <setjmp.h>

.text
.weak setjmp
.type setjmp,@function
setjmp:
.globl __setjmp
.type __setjmp,@function
__setjmp:
	movl	0(%esp), %ecx	/* Save PC we are returning to now.  */
	leal	4(%esp), %edx	/* Save SP as it will be after we return.  */
	movl	(%edx), %eax

	pushl	$0
	pushl	%eax
	call	__sigsetjmp_internal
	add	$8,%esp
	ret


.globl __sigsetjmp
.type __sigsetjmp,@function
__sigsetjmp:
	movl	0(%esp), %ecx	/* Save PC we are returning to now.  */
	leal	4(%esp), %edx	/* Save SP as it will be after we return.  */
	movl	(%edx), %eax

__sigsetjmp_internal:
	/* Save registers.  */
	movl %ebx, (JB_BX*4)(%eax)
	movl %esi, (JB_SI*4)(%eax)
	movl %edi, (JB_DI*4)(%eax)
	movl %ebp, (JB_BP*4)(%eax)
	movl %edx, (JB_SP*4)(%eax)
	movl %ecx, (JB_PC*4)(%eax)

	/* Make a tail call to __sigjmp_save; it takes the same args.  */
#ifdef	PIC
	call	1f
	addl	$_GLOBAL_OFFSET_TABLE_, %ecx
	jmp	*__sigjmp_save@GOT(%ecx)
1:	movl	(%esp), %ecx
	ret
#else
	jmp __sigjmp_save
#endif
.size __sigsetjmp,.-__sigsetjmp;

LinuxTV legacy CVS <linuxtv.org/cvs>