diff options
| author | Mohit K. Bhakkad <mohit.bhakkad@gmail.com> | 2015-03-17 11:43:56 +0000 |
|---|---|---|
| committer | Mohit K. Bhakkad <mohit.bhakkad@gmail.com> | 2015-03-17 11:43:56 +0000 |
| commit | 3df471c32de4bba7395662f01e2036ff45e40e18 (patch) | |
| tree | 128d6aac13eff0431e714598dc0d7ad588f893d6 /lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp | |
| parent | 08288606942ddbcf68280cebac29d1182ac9855f (diff) | |
| download | bcm5719-llvm-3df471c32de4bba7395662f01e2036ff45e40e18.tar.gz bcm5719-llvm-3df471c32de4bba7395662f01e2036ff45e40e18.zip | |
[MIPS] - Register Context for MIPS64
Patch by Jaydeep Patil
Summery:
1. Add MIPS variants by parsing e_flags of the ELF
2. Create RegisterInfoInterface and RegisterContext for MIPS64 and MIPS64EL
Reviewers: clayborg
Subscribers: tberghammer, bhushan, mohit.bhakkad, sagar
Differential Revision: http://reviews.llvm.org/D8166
llvm-svn: 232467
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp new file mode 100644 index 00000000000..67363ca6bbc --- /dev/null +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp @@ -0,0 +1,213 @@ +//===-- NativeRegisterContextLinux_mips64.cpp ---------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "NativeRegisterContextLinux_mips64.h" + +#include "lldb/lldb-private-forward.h" +#include "lldb/Core/DataBufferHeap.h" +#include "lldb/Core/Error.h" +#include "lldb/Core/RegisterValue.h" +#include "lldb/Host/common/NativeProcessProtocol.h" +#include "lldb/Host/common/NativeThreadProtocol.h" +#include "Plugins/Process/Linux/NativeProcessLinux.h" + +using namespace lldb_private; + +// ---------------------------------------------------------------------------- +// Private namespace. +// ---------------------------------------------------------------------------- + +namespace +{ + // mips64 general purpose registers. + const uint32_t + g_gp_regnums_mips64[] = + { + gp_reg_r0_mips64, + gp_reg_r1_mips64, + gp_reg_r2_mips64, + gp_reg_r3_mips64, + gp_reg_r4_mips64, + gp_reg_r5_mips64, + gp_reg_r6_mips64, + gp_reg_r7_mips64, + gp_reg_r8_mips64, + gp_reg_r9_mips64, + gp_reg_r10_mips64, + gp_reg_r11_mips64, + gp_reg_r12_mips64, + gp_reg_r13_mips64, + gp_reg_r14_mips64, + gp_reg_r15_mips64, + gp_reg_r16_mips64, + gp_reg_r17_mips64, + gp_reg_r18_mips64, + gp_reg_r19_mips64, + gp_reg_r20_mips64, + gp_reg_r21_mips64, + gp_reg_r22_mips64, + gp_reg_r23_mips64, + gp_reg_r24_mips64, + gp_reg_r25_mips64, + gp_reg_r26_mips64, + gp_reg_r27_mips64, + gp_reg_r28_mips64, + gp_reg_r29_mips64, + gp_reg_r30_mips64, + gp_reg_r31_mips64, + gp_reg_mullo_mips64, + gp_reg_mulhi_mips64, + gp_reg_pc_mips64, + gp_reg_badvaddr_mips64, + gp_reg_sr_mips64, + gp_reg_cause_mips64, + LLDB_INVALID_REGNUM // register sets need to end with this flag + }; + + static_assert((sizeof(g_gp_regnums_mips64) / sizeof(g_gp_regnums_mips64[0])) - 1 == k_num_gp_reg_mips64, + "g_gp_regnums_mips64 has wrong number of register infos"); + + // Number of register sets provided by this context. + enum + { + k_num_register_sets = 1 + }; + + // Register sets for mips64. + static const RegisterSet + g_reg_sets_mips64[k_num_register_sets] = + { + { "General Purpose Registers", "gpr", k_num_gp_reg_mips64, g_gp_regnums_mips64 } + }; +} + +// ---------------------------------------------------------------------------- +// NativeRegisterContextLinux_mips64 members. +// ---------------------------------------------------------------------------- + +NativeRegisterContextLinux_mips64::NativeRegisterContextLinux_mips64 (NativeThreadProtocol &native_thread, + uint32_t concrete_frame_idx, RegisterInfoInterface *reg_info_interface_p) : + NativeRegisterContextRegisterInfo (native_thread, concrete_frame_idx, reg_info_interface_p) +{ +} + +uint32_t +NativeRegisterContextLinux_mips64::GetRegisterSetCount () const +{ + return k_num_register_sets; +} + +const lldb_private::RegisterSet * +NativeRegisterContextLinux_mips64::GetRegisterSet (uint32_t set_index) const +{ + if (set_index >= k_num_register_sets) + return nullptr; + + switch (GetRegisterInfoInterface ().GetTargetArchitecture ().GetMachine ()) + { + case llvm::Triple::mips64: + case llvm::Triple::mips64el: + return &g_reg_sets_mips64[set_index]; + default: + assert (false && "Unhandled target architecture."); + return nullptr; + } + + return nullptr; +} + +lldb_private::Error +NativeRegisterContextLinux_mips64::ReadRegister (const RegisterInfo *reg_info, RegisterValue ®_value) +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::ReadRegister not implemented"); + return error; +} + +lldb_private::Error +NativeRegisterContextLinux_mips64::WriteRegister (const RegisterInfo *reg_info, const RegisterValue ®_value) +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::WriteRegister not implemented"); + return error; +} + +lldb_private::Error +NativeRegisterContextLinux_mips64::ReadAllRegisterValues (lldb::DataBufferSP &data_sp) +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::ReadAllRegisterValues not implemented"); + return error; +} + +lldb_private::Error +NativeRegisterContextLinux_mips64::WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::WriteAllRegisterValues not implemented"); + return error; +} + +Error +NativeRegisterContextLinux_mips64::IsWatchpointHit (uint8_t wp_index) +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::IsWatchpointHit not implemented"); + return error; +} + +Error +NativeRegisterContextLinux_mips64::IsWatchpointVacant (uint32_t wp_index) +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::IsWatchpointVacant not implemented"); + return error; +} + +bool +NativeRegisterContextLinux_mips64::ClearHardwareWatchpoint (uint32_t wp_index) +{ + return false; +} + +Error +NativeRegisterContextLinux_mips64::ClearAllHardwareWatchpoints () +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::ClearAllHardwareWatchpoints not implemented"); + return error; +} + +Error +NativeRegisterContextLinux_mips64::SetHardwareWatchpointWithIndex ( + lldb::addr_t addr, size_t size, uint32_t watch_flags, uint32_t wp_index) +{ + Error error; + error.SetErrorString ("MIPS TODO: NativeRegisterContextLinux_mips64::SetHardwareWatchpointWithIndex not implemented"); + return error; +} + +uint32_t +NativeRegisterContextLinux_mips64::SetHardwareWatchpoint ( + lldb::addr_t addr, size_t size, uint32_t watch_flags) +{ + return LLDB_INVALID_INDEX32; +} + +lldb::addr_t +NativeRegisterContextLinux_mips64::GetWatchpointAddress (uint32_t wp_index) +{ + return LLDB_INVALID_ADDRESS; +} + +uint32_t +NativeRegisterContextLinux_mips64::NumSupportedHardwareWatchpoints () +{ + return 0; +} |

