RegisterContextLinux_i386.cpp revision 263363
155714Skris//===-- RegisterContextLinux_i386.cpp --------------------------*- C++ -*-===// 255714Skris// 355714Skris// The LLVM Compiler Infrastructure 455714Skris// 555714Skris// This file is distributed under the University of Illinois Open Source 655714Skris// License. See LICENSE.TXT for details. 755714Skris// 8280304Sjkim//===---------------------------------------------------------------------===// 955714Skris 1055714Skris#include "RegisterContextPOSIX_x86.h" 1155714Skris#include "RegisterContextLinux_i386.h" 1255714Skris 1355714Skrisusing namespace lldb_private; 1455714Skrisusing namespace lldb; 15280304Sjkim 1655714Skrisstruct GPR 1755714Skris{ 1855714Skris uint32_t ebx; 1955714Skris uint32_t ecx; 2055714Skris uint32_t edx; 2155714Skris uint32_t esi; 22280304Sjkim uint32_t edi; 2355714Skris uint32_t ebp; 2455714Skris uint32_t eax; 2555714Skris uint32_t ds; 2655714Skris uint32_t es; 2755714Skris uint32_t fs; 2855714Skris uint32_t gs; 2955714Skris uint32_t orig_ax; 3055714Skris uint32_t eip; 3155714Skris uint32_t cs; 3255714Skris uint32_t eflags; 3355714Skris uint32_t esp; 3455714Skris uint32_t ss; 3555714Skris}; 3655714Skris 37280304Sjkimstruct UserArea 3855714Skris{ 3955714Skris GPR regs; // General purpose registers. 40280304Sjkim int32_t fpvalid; // True if FPU is being used. 4155714Skris FXSAVE i387; // FPU registers. 4255714Skris uint32_t tsize; // Text segment size. 4355714Skris uint32_t dsize; // Data segment size. 4455714Skris uint32_t ssize; // Stack segment size. 4555714Skris uint32_t start_code; // VM address of text. 4655714Skris uint32_t start_stack; // VM address of stack bottom (top in rsp). 4755714Skris int32_t signal; // Signal causing core dump. 4855714Skris int32_t reserved; // Unused. 4955714Skris uint32_t ar0; // Location of GPR's. 5055714Skris uint32_t fpstate; // Location of FPR's. Should be a FXSTATE *, but this 5155714Skris // has to be 32-bits even on 64-bit systems. 52280304Sjkim uint32_t magic; // Identifier for core dumps. 5355714Skris char u_comm[32]; // Command causing core dump. 5455714Skris uint32_t u_debugreg[8]; // Debug registers (DR0 - DR7). 5555714Skris}; 5655714Skris 5755714Skris#define DR_SIZE sizeof(UserArea::u_debugreg[0]) 5855714Skris#define DR_OFFSET(reg_index) \ 5955714Skris (LLVM_EXTENSION offsetof(UserArea, u_debugreg[reg_index])) 6055714Skris 6155714Skris//--------------------------------------------------------------------------- 6255714Skris// Include RegisterInfos_i386 to declare our g_register_infos_i386 structure. 6355714Skris//--------------------------------------------------------------------------- 6455714Skris#define DECLARE_REGISTER_INFOS_I386_STRUCT 6555714Skris#include "RegisterInfos_i386.h" 6655714Skris#undef DECLARE_REGISTER_INFOS_I386_STRUCT 6755714Skris 6855714SkrisRegisterContextLinux_i386::RegisterContextLinux_i386(const ArchSpec &target_arch) : 6955714Skris RegisterInfoInterface(target_arch) 7055714Skris{ 7155714Skris} 7255714Skris 7355714SkrisRegisterContextLinux_i386::~RegisterContextLinux_i386() 7455714Skris{ 7555714Skris} 7655714Skris 7755714Skrissize_t 7855714SkrisRegisterContextLinux_i386::GetGPRSize() 7955714Skris{ 8055714Skris return sizeof(GPR); 8155714Skris} 8255714Skris 8355714Skrisconst RegisterInfo * 8455714SkrisRegisterContextLinux_i386::GetRegisterInfo() 8555714Skris{ 8655714Skris switch (m_target_arch.GetCore()) 8755714Skris { 8855714Skris case ArchSpec::eCore_x86_32_i386: 8955714Skris case ArchSpec::eCore_x86_32_i486: 9055714Skris case ArchSpec::eCore_x86_32_i486sx: 9155714Skris return g_register_infos_i386; 9255714Skris default: 9355714Skris assert(false && "Unhandled target architecture."); 9455714Skris return NULL; 9555714Skris } 9655714Skris} 9755714Skris