3 * \brief UTCB definitions for amd64.
7 * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
8 * Alexander Warg <warg@os.inf.tu-dresden.de>
9 * economic rights: Technische Universität Dresden (Germany)
11 * This file is part of TUD:OS and distributed under the terms of the
12 * GNU General Public License 2.
13 * Please see the COPYING-GPL-2 file for details.
15 * As a special exception, you may use this file as part of a free software
16 * library without restriction. Specifically, if other files instantiate
17 * templates or use macros or inline functions from this file, or you compile
18 * this file and link it with other files to produce an executable, this
19 * file does not by itself cause the resulting executable to be covered by
20 * the GNU General Public License. This exception does not however
21 * invalidate any other reasons why the executable file might be covered by
22 * the GNU General Public License.
24 /*****************************************************************************/
25 #ifndef __L4_SYS__INCLUDE__ARCH_AMD64__UTCB_H__
26 #define __L4_SYS__INCLUDE__ARCH_AMD64__UTCB_H__
28 #include <l4/sys/types.h>
31 * \defgroup l4_utcb_api_amd64 amd64 Virtual Registers (UTCB)
32 * \ingroup l4_utcb_api
36 * \brief UTCB constants for AMD64
37 * \ingroup l4_utcb_api_amd64
39 enum L4_utcb_consts_amd64
41 L4_UTCB_EXCEPTION_REGS_SIZE = 23,
42 L4_UTCB_GENERIC_DATA_SIZE = 63,
43 L4_UTCB_GENERIC_BUFFERS_SIZE = 58,
45 L4_UTCB_MSG_REGS_OFFSET = 0,
46 L4_UTCB_BUF_REGS_OFFSET = 64 * sizeof(l4_umword_t),
47 L4_UTCB_THREAD_REGS_OFFSET = 123 * sizeof(l4_umword_t),
49 L4_UTCB_INHERIT_FPU = 1UL << 24,
50 L4_UTCB_OFFSET = 1024,
54 * \brief UTCB structure for exceptions.
55 * \ingroup l4_utcb_api_amd64
57 typedef struct l4_exc_regs_t
59 l4_umword_t r15; /**< r15 */
60 l4_umword_t r14; /**< r14 */
61 l4_umword_t r13; /**< r13 */
62 l4_umword_t r12; /**< r12 */
63 l4_umword_t r11; /**< r11 */
64 l4_umword_t r10; /**< r10 */
65 l4_umword_t r9; /**< r9 */
66 l4_umword_t r8; /**< r8 */
67 l4_umword_t rdi; /**< rdi */
68 l4_umword_t rsi; /**< rsi */
69 l4_umword_t rbp; /**< rbp */
70 l4_umword_t pfa; /**< page fault address */
71 l4_umword_t rbx; /**< rbx */
72 l4_umword_t rdx; /**< rdx */
73 l4_umword_t rcx; /**< rcx */
74 l4_umword_t rax; /**< rax */
76 l4_umword_t trapno; /**< trap number */
77 l4_umword_t err; /**< error code */
78 l4_umword_t ip; /**< instruction pointer */
80 l4_umword_t flags; /**< rflags */
81 l4_umword_t sp; /**< stack pointer */
82 l4_umword_t ss; /**< stack segment register */
86 #include_next <l4/sys/utcb.h>
89 * ==================================================================
93 L4_INLINE l4_utcb_t *l4_utcb_direct(void) L4_NOTHROW
96 __asm__ ( "mov %%gs:0, %0 \n" : "=r"(res));
100 L4_INLINE l4_umword_t l4_utcb_exc_pc(l4_exc_regs_t *u) L4_NOTHROW
105 L4_INLINE void l4_utcb_exc_pc_set(l4_exc_regs_t *u, l4_addr_t pc) L4_NOTHROW
110 L4_INLINE l4_umword_t l4_utcb_exc_typeval(l4_exc_regs_t *u) L4_NOTHROW
115 L4_INLINE int l4_utcb_exc_is_pf(l4_exc_regs_t *u) L4_NOTHROW
117 return u->trapno == 14;
120 L4_INLINE l4_addr_t l4_utcb_exc_pfa(l4_exc_regs_t *u) L4_NOTHROW
122 return (u->pfa & ~3) | (u->err & 2);
125 #endif /* ! __L4_SYS__INCLUDE__ARCH_AMD64__UTCB_H__ */