1
/* setjmp for i386, ELF version.
2
Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
3
This file is part of the GNU C Library.
5
The GNU C Library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
8
version 2.1 of the License, or (at your option) any later version.
10
The GNU C Library is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
Lesser General Public License for more details.
15
You should have received a copy of the GNU Lesser General Public
16
License along with the GNU C Library; if not, write to the Free
17
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22
#define PJ_LINUX_KERNEL 1
23
#include <pj/compat/setjmp.h>
27
.type __sigsetjmp,%function
33
movl %ebx, (0 *4)(%eax)
34
movl %esi, (1 *4)(%eax)
35
movl %edi, (2 *4)(%eax)
36
/* Save SP as it will be after we return. */
38
movl %ecx, (4 *4)(%eax)
39
/* Save PC we are returning to now. */
41
movl %ecx, (5 *4)(%eax)
42
/* Save caller's frame pointer. */
43
movl %ebp, (3 *4)(%eax)
45
/* Make a tail call to __sigjmp_save; it takes the same args. */
47
/* We cannot use the PLT, because it requires that %ebx be set, but
48
we can't save and restore our caller's value. Instead, we do an
49
indirect jump through the GOT, using for the temporary register
50
%ecx, which is call-clobbered. */
54
addl $_GLOBAL_OFFSET_TABLE_+[.- .Lhere ], %ecx
55
movl __sigjmp_save @GOT (%ecx), %ecx
60
.size __sigsetjmp,.-__sigsetjmp