Subversion Repositories HelenOS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2774 cejka 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
/** @addtogroup ia32   
30
 * @{
31
 */
32
/** @file
33
 */
34
 
35
#ifndef KERN_ia32_CONTEXT_OFFSET_H_
36
#define KERN_ia32_CONTEXT_OFFSET_H_
37
 
38
#define OFFSET_SP  0x0
39
#define OFFSET_PC  0x4
40
#define OFFSET_EBX 0x8
41
#define OFFSET_ESI 0xC
42
#define OFFSET_EDI 0x10
43
#define OFFSET_EBP 0x14
44
 
45
#ifdef KERNEL 
46
# define OFFSET_IPL 0x18
47
#else
48
# define OFFSET_TLS 0x18
49
#endif
50
 
51
 
52
#ifdef __ASM__ 
53
 
54
# ctx: address of the structure with saved context 
55
# pc: return address
56
 
57
.macro CONTEXT_SAVE_ARCH_CORE ctx:req pc:req
58
    movl %esp,OFFSET_SP(\ctx)   # %esp -> ctx->sp   
59
    movl \pc,OFFSET_PC(\ctx)    # %eip -> ctx->pc
60
    movl %ebx,OFFSET_EBX(\ctx)  # %ebx -> ctx->ebx  
61
    movl %esi,OFFSET_ESI(\ctx)  # %esi -> ctx->esi  
62
    movl %edi,OFFSET_EDI(\ctx)  # %edi -> ctx->edi  
63
    movl %ebp,OFFSET_EBP(\ctx)  # %ebp -> ctx->ebp  
64
.endm
65
 
66
# ctx: address of the structure with saved context 
67
 
68
.macro CONTEXT_RESTORE_ARCH_CORE ctx:req pc:req
69
    movl OFFSET_SP(\ctx),%esp   # ctx->sp -> %esp
70
    movl OFFSET_PC(\ctx),\pc    # ctx->pc -> \pc
71
    movl OFFSET_EBX(\ctx),%ebx  # ctx->ebx -> %ebx
72
    movl OFFSET_ESI(\ctx),%esi  # ctx->esi -> %esi
73
    movl OFFSET_EDI(\ctx),%edi  # ctx->edi -> %edi
74
    movl OFFSET_EBP(\ctx),%ebp  # ctx->ebp -> %ebp
75
.endm
76
 
77
#endif /* __ASM__ */ 
78
 
79
#endif
80
 
81
/** @}
82
 */
83