1*80814287SRaphael Isemann //===-- RegisterContextOpenBSD_i386.cpp -----------------------------------===// 212801f1eSKamil Rytarowski // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 612801f1eSKamil Rytarowski // 712801f1eSKamil Rytarowski //===---------------------------------------------------------------------===// 812801f1eSKamil Rytarowski 912801f1eSKamil Rytarowski #include "RegisterContextOpenBSD_i386.h" 1012801f1eSKamil Rytarowski #include "RegisterContextPOSIX_x86.h" 1112801f1eSKamil Rytarowski 1212801f1eSKamil Rytarowski using namespace lldb_private; 1312801f1eSKamil Rytarowski using namespace lldb; 1412801f1eSKamil Rytarowski 1512801f1eSKamil Rytarowski // /usr/include/machine/reg.h 1612801f1eSKamil Rytarowski struct GPR { 1712801f1eSKamil Rytarowski uint32_t eax; 1812801f1eSKamil Rytarowski uint32_t ecx; 1912801f1eSKamil Rytarowski uint32_t edx; 2012801f1eSKamil Rytarowski uint32_t ebx; 2112801f1eSKamil Rytarowski uint32_t esp; 2212801f1eSKamil Rytarowski uint32_t ebp; 2312801f1eSKamil Rytarowski uint32_t esi; 2412801f1eSKamil Rytarowski uint32_t edi; 2512801f1eSKamil Rytarowski uint32_t eip; 2612801f1eSKamil Rytarowski uint32_t eflags; 2712801f1eSKamil Rytarowski uint32_t cs; 2812801f1eSKamil Rytarowski uint32_t ss; 2912801f1eSKamil Rytarowski uint32_t ds; 3012801f1eSKamil Rytarowski uint32_t es; 3112801f1eSKamil Rytarowski uint32_t fs; 3212801f1eSKamil Rytarowski uint32_t gs; 3312801f1eSKamil Rytarowski }; 3412801f1eSKamil Rytarowski 3512801f1eSKamil Rytarowski struct dbreg { 3612801f1eSKamil Rytarowski uint32_t dr[8]; /* debug registers */ 3712801f1eSKamil Rytarowski /* Index 0-3: debug address registers */ 3812801f1eSKamil Rytarowski /* Index 4-5: reserved */ 3912801f1eSKamil Rytarowski /* Index 6: debug status */ 4012801f1eSKamil Rytarowski /* Index 7: debug control */ 4112801f1eSKamil Rytarowski }; 4212801f1eSKamil Rytarowski 4312801f1eSKamil Rytarowski using FPR_i386 = FXSAVE; 4412801f1eSKamil Rytarowski 4512801f1eSKamil Rytarowski struct UserArea { 4612801f1eSKamil Rytarowski GPR gpr; 4712801f1eSKamil Rytarowski FPR_i386 i387; 4812801f1eSKamil Rytarowski }; 4912801f1eSKamil Rytarowski 5012801f1eSKamil Rytarowski #define DR_SIZE sizeof(uint32_t) 5112801f1eSKamil Rytarowski #define DR_OFFSET(reg_index) (LLVM_EXTENSION offsetof(dbreg, dr[reg_index])) 5212801f1eSKamil Rytarowski 5312801f1eSKamil Rytarowski // Include RegisterInfos_i386 to declare our g_register_infos_i386 structure. 5412801f1eSKamil Rytarowski #define DECLARE_REGISTER_INFOS_I386_STRUCT 5512801f1eSKamil Rytarowski #include "RegisterInfos_i386.h" 5612801f1eSKamil Rytarowski #undef DECLARE_REGISTER_INFOS_I386_STRUCT 5712801f1eSKamil Rytarowski RegisterContextOpenBSD_i386(const ArchSpec & target_arch)5812801f1eSKamil RytarowskiRegisterContextOpenBSD_i386::RegisterContextOpenBSD_i386( 5912801f1eSKamil Rytarowski const ArchSpec &target_arch) 6012801f1eSKamil Rytarowski : RegisterInfoInterface(target_arch) {} 6112801f1eSKamil Rytarowski GetGPRSize() const6212801f1eSKamil Rytarowskisize_t RegisterContextOpenBSD_i386::GetGPRSize() const { return sizeof(GPR); } 6312801f1eSKamil Rytarowski GetRegisterInfo() const6412801f1eSKamil Rytarowskiconst RegisterInfo *RegisterContextOpenBSD_i386::GetRegisterInfo() const { 6512801f1eSKamil Rytarowski switch (m_target_arch.GetMachine()) { 6612801f1eSKamil Rytarowski case llvm::Triple::x86: 6712801f1eSKamil Rytarowski return g_register_infos_i386; 6812801f1eSKamil Rytarowski default: 6912801f1eSKamil Rytarowski assert(false && "Unhandled target architecture."); 70248a1305SKonrad Kleine return nullptr; 7112801f1eSKamil Rytarowski } 7212801f1eSKamil Rytarowski } 7312801f1eSKamil Rytarowski GetRegisterCount() const7412801f1eSKamil Rytarowskiuint32_t RegisterContextOpenBSD_i386::GetRegisterCount() const { 7512801f1eSKamil Rytarowski return static_cast<uint32_t>(sizeof(g_register_infos_i386) / 7612801f1eSKamil Rytarowski sizeof(g_register_infos_i386[0])); 7712801f1eSKamil Rytarowski } 78