source: mainline/uspace/lib/libc/arch/ia32/src/setjmp.S@ 8ccd2ea

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 8ccd2ea was 6cbed012, checked in by Josef Cejka <malyzelenyhnus@…>, 17 years ago

Added setjmp and longjmp functions for ia32 architecture.

  • Property mode set to 100644
File size: 2.1 KB
Line 
1#
2# Copyright (c) 2008 Josef Cejka
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29.text
30.global setjmp
31.global longjmp
32
33.type setjmp,@function
34setjmp:
35 movl 0(%esp), %ecx # save current pc
36 leal 4(%esp), %edx # save stack pointer
37 movl (%edx), %eax # get jmp_buf pointer
38
39 # Save registers
40 movl %ebx, 0(%eax)
41 movl %esi, 4(%eax)
42 movl %edi, 8(%eax)
43 movl %ebp, 12(%eax)
44 movl %edx, 16(%eax)
45
46 movl %ecx, 20(%eax) # save pc
47 ret
48
49.type longjmp,@function
50longjmp:
51
52 movl 4(%esp), %ecx # put address of jmp_buf into ecx
53 movl 8(%esp), %eax # put return value into eax
54
55 # restore all registers
56 movl 0(%ecx), %ebx
57 movl 4(%ecx), %esi
58 movl 8(%ecx), %edi
59 movl 12(%ecx), %ebp
60 movl 16(%ecx), %esp
61
62 movl 20(%ecx), %edx # saved return address
63 jmp *%edx
Note: See TracBrowser for help on using the repository browser.