URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [sysdeps/] [linux/] [i386/] [setjmp.S] - Rev 1765
Compare with Previous | Blame | View Log
/* setjmp for i386, ELF version.Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc.This file is part of the GNU C Library.The GNU C Library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.The GNU C Library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with the GNU C Library; if not, write to the FreeSoftware Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307 USA. */#define _ASM#define _SETJMP_H#include <bits/setjmp.h>.globl __sigsetjmp;.type __sigsetjmp,@function.align 4;__sigsetjmp:movl 4 (%esp), %eax/* Save registers. */movl %ebx, (0 *4)(%eax)movl %esi, (1 *4)(%eax)movl %edi, (2 *4)(%eax)/* Save SP as it will be after we return. */leal 4(%esp), %ecxmovl %ecx, (4 *4)(%eax)/* Save PC we are returning to now. */movl 0(%esp), %ecxmovl %ecx, (5 *4)(%eax)/* Save caller's frame pointer. */movl %ebp, (3 *4)(%eax)/* Make a tail call to __sigjmp_save; it takes the same args. */#ifdef __PIC__/* We cannot use the PLT, because it requires that %ebx be set, butwe can't save and restore our caller's value. Instead, we do anindirect jump through the GOT, using for the temporary register%ecx, which is call-clobbered. */call .Lhere.Lhere:popl %ecxaddl $_GLOBAL_OFFSET_TABLE_+[.- .Lhere ], %ecxmovl __sigjmp_save @GOT (%ecx), %ecxjmp *%ecx#elsejmp __sigjmp_save#endif.size __sigsetjmp,.-__sigsetjmp;
