1e4442059SWarner Losh /* 2e4442059SWarner Losh * FreeBSD i386 register structures 3e4442059SWarner Losh * 4e4442059SWarner Losh * Copyright (c) 2015 Stacey Son 5e4442059SWarner Losh * All rights reserved. 6e4442059SWarner Losh * 7e4442059SWarner Losh * This program is free software; you can redistribute it and/or modify 8e4442059SWarner Losh * it under the terms of the GNU General Public License as published by 9e4442059SWarner Losh * the Free Software Foundation; either version 2 of the License, or 10e4442059SWarner Losh * (at your option) any later version. 11e4442059SWarner Losh * 12e4442059SWarner Losh * This program is distributed in the hope that it will be useful, 13e4442059SWarner Losh * but WITHOUT ANY WARRANTY; without even the implied warranty of 14e4442059SWarner Losh * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15e4442059SWarner Losh * GNU General Public License for more details. 16e4442059SWarner Losh * 17e4442059SWarner Losh * You should have received a copy of the GNU General Public License 18e4442059SWarner Losh * along with this program; if not, see <http://www.gnu.org/licenses/>. 19e4442059SWarner Losh */ 20e4442059SWarner Losh 21*9c092804SMarkus Armbruster #ifndef TARGET_ARCH_REG_H 22*9c092804SMarkus Armbruster #define TARGET_ARCH_REG_H 23e4442059SWarner Losh 24e4442059SWarner Losh /* See sys/i386/include/reg.h */ 25e4442059SWarner Losh typedef struct target_reg { 26e4442059SWarner Losh uint32_t r_fs; 27e4442059SWarner Losh uint32_t r_es; 28e4442059SWarner Losh uint32_t r_ds; 29e4442059SWarner Losh uint32_t r_edi; 30e4442059SWarner Losh uint32_t r_esi; 31e4442059SWarner Losh uint32_t r_ebp; 32e4442059SWarner Losh uint32_t r_isp; 33e4442059SWarner Losh uint32_t r_ebx; 34e4442059SWarner Losh uint32_t r_edx; 35e4442059SWarner Losh uint32_t r_ecx; 36e4442059SWarner Losh uint32_t r_eax; 37e4442059SWarner Losh uint32_t r_trapno; 38e4442059SWarner Losh uint32_t r_err; 39e4442059SWarner Losh uint32_t r_eip; 40e4442059SWarner Losh uint32_t r_cs; 41e4442059SWarner Losh uint32_t r_eflags; 42e4442059SWarner Losh uint32_t r_esp; 43e4442059SWarner Losh uint32_t r_ss; 44e4442059SWarner Losh uint32_t r_gs; 45e4442059SWarner Losh } target_reg_t; 46e4442059SWarner Losh 47e4442059SWarner Losh typedef struct target_fpreg { 48e4442059SWarner Losh uint32_t fpr_env[7]; 49e4442059SWarner Losh uint8_t fpr_acc[8][10]; 50e4442059SWarner Losh uint32_t fpr_ex_sw; 51e4442059SWarner Losh uint8_t fpr_pad[64]; 52e4442059SWarner Losh } target_fpreg_t; 53e4442059SWarner Losh target_copy_regs(target_reg_t * regs,const CPUX86State * env)54e4442059SWarner Loshstatic inline void target_copy_regs(target_reg_t *regs, const CPUX86State *env) 55e4442059SWarner Losh { 56e4442059SWarner Losh 57e4442059SWarner Losh regs->r_fs = env->segs[R_FS].selector & 0xffff; 58e4442059SWarner Losh regs->r_es = env->segs[R_ES].selector & 0xffff; 59e4442059SWarner Losh regs->r_ds = env->segs[R_DS].selector & 0xffff; 60e4442059SWarner Losh 61e4442059SWarner Losh regs->r_edi = env->regs[R_EDI]; 62e4442059SWarner Losh regs->r_esi = env->regs[R_ESI]; 63e4442059SWarner Losh regs->r_ebp = env->regs[R_EBP]; 64e4442059SWarner Losh /* regs->r_isp = env->regs[R_ISP]; XXX */ 65e4442059SWarner Losh regs->r_ebx = env->regs[R_EBX]; 66e4442059SWarner Losh regs->r_edx = env->regs[R_EDX]; 67e4442059SWarner Losh regs->r_ecx = env->regs[R_ECX]; 68e4442059SWarner Losh regs->r_eax = env->regs[R_EAX]; 69e4442059SWarner Losh /* regs->r_trapno = env->regs[R_TRAPNO]; XXX */ 70e4442059SWarner Losh regs->r_err = env->error_code; /* XXX ? */ 71e4442059SWarner Losh regs->r_eip = env->eip; 72e4442059SWarner Losh 73e4442059SWarner Losh regs->r_cs = env->segs[R_CS].selector & 0xffff; 74e4442059SWarner Losh 75e4442059SWarner Losh regs->r_eflags = env->eflags; 76e4442059SWarner Losh regs->r_esp = env->regs[R_ESP]; 77e4442059SWarner Losh 78e4442059SWarner Losh regs->r_ss = env->segs[R_SS].selector & 0xffff; 79e4442059SWarner Losh regs->r_gs = env->segs[R_GS].selector & 0xffff; 80e4442059SWarner Losh } 81e4442059SWarner Losh 82*9c092804SMarkus Armbruster #endif /* TARGET_ARCH_REG_H */ 83