1/**
2 * \file
3 * \brief Header for x86-specific GDB stub code.
4 */
5
6/*
7 * Copyright (c) 2007, 2008, ETH Zurich.
8 * All rights reserved.
9 *
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13 */
14
15#include <x86.h>
16
17/**
18 * \brief X86_64 register set
19 *
20 * As defined by GDB.
21 */
22enum gdb_x86_64_register_nums {
23    GDB_X86_64_RAX_REG, GDB_X86_64_RBX_REG, GDB_X86_64_RCX_REG, GDB_X86_64_RDX_REG,
24    GDB_X86_64_RSI_REG, GDB_X86_64_RDI_REG, GDB_X86_64_RBP_REG, GDB_X86_64_RSP_REG,
25    GDB_X86_64_R8_REG, GDB_X86_64_R9_REG, GDB_X86_64_R10_REG, GDB_X86_64_R11_REG,
26    GDB_X86_64_R12_REG, GDB_X86_64_R13_REG, GDB_X86_64_R14_REG, GDB_X86_64_R15_REG,
27    GDB_X86_64_RIP_REG, GDB_X86_64_EFLAGS_REG, GDB_X86_64_CS_REG, GDB_X86_64_SS_REG,
28
29/* these are not saved/used in 64-bit mode, and currently avoided
30    DS_REG, ES_REG, FS_REG, GS_REG,
31*/
32
33/* these are not used yet:
34    ST0_REG, ST1_REG, ST2_REG, ST3_REG, ST4_REG, ST5_REG, ST6_REG, ST7_REG,
35
36    FCTRL_REG, FSTAT_REG, FTAG_REG, FISEG_REG,
37    FIOFF_REG, FOSEG_REG, FOOFF_REG, FOP_REG,
38
39    XMM0_REG, XMM1_REG, XMM2_REG, XMM3_REG, XMM4_REG, XMM5_REG,
40    XMM6_REG, XMM7_REG, XMM8_REG, XMM9_REG, XMM10_REG, XMM11_REG,
41    XMM12_REG, XMM13_REG, XMM14_REG, XMM15_REG,
42    MXCSR_REG
43*/
44
45    GDB_X86_64_NUM_REGS /* not a real register; must be last! */
46};
47
48extern uintptr_t *gdb_arch_registers;
49
50/** Address of saved registers as void * */
51#define GDB_ARCH_REGADDR    ((void*)gdb_arch_registers)
52
53/** Number of bytes saved in GDB frame */
54#define GDB_ARCH_REGBYTES   (sizeof(uintptr_t) * GDB_X86_64_NUM_REGS)
55