GDBRemoteRegisterContext.h revision b344843f75ef893762c93fd0a22d2d45712ce74d
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- GDBRemoteRegisterContext.h ------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef lldb_GDBRemoteRegisterContext_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define lldb_GDBRemoteRegisterContext_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
203a4ea24572fad1e22525f8efb718d49d41e30398Jason Molenda#include "lldb/lldb-enumerations.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ConstString.h"
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h"
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/RegisterContext.h"
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ThreadGDBRemote;
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ProcessGDBRemote;
28a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Claytonclass StringExtractor;
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass GDBRemoteDynamicRegisterInfo
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GDBRemoteDynamicRegisterInfo () :
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_regs (),
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_sets (),
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_set_reg_nums (),
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_reg_names (),
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_reg_alt_names (),
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_set_names (),
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_reg_data_byte_size (0)
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~GDBRemoteDynamicRegisterInfo ()
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
49b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    AddRegister (lldb_private::RegisterInfo &reg_info,
50b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                 lldb_private::ConstString &reg_name,
51b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                 lldb_private::ConstString &reg_alt_name,
52b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                 lldb_private::ConstString &set_name)
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const uint32_t reg_num = m_regs.size();
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_reg_names.push_back (reg_name);
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_reg_alt_names.push_back (reg_alt_name);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        reg_info.name = reg_name.AsCString();
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        assert (reg_info.name);
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        reg_info.alt_name = reg_alt_name.AsCString(NULL);
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_regs.push_back (reg_info);
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint32_t set = GetRegisterSetIndexByName (set_name, true);
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        assert (set < m_sets.size());
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        assert (set < m_set_reg_nums.size());
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        assert (set < m_set_names.size());
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_set_reg_nums[set].push_back(reg_num);
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        size_t end_reg_offset = reg_info.byte_offset + reg_info.byte_size;
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (m_reg_data_byte_size < end_reg_offset)
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            m_reg_data_byte_size = end_reg_offset;
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Finalize ()
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        for (uint32_t set = 0; set < m_sets.size(); ++set)
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            assert (m_sets.size() == m_set_reg_nums.size());
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            m_sets[set].num_registers = m_set_reg_nums[set].size();
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            m_sets[set].registers = &m_set_reg_nums[set][0];
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumRegisters() const
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_regs.size();
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumRegisterSets() const
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_sets.size();
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterDataByteSize() const
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_reg_data_byte_size;
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
100b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    const lldb_private::RegisterInfo *
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterInfoAtIndex (uint32_t i) const
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (i < m_regs.size())
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            return &m_regs[i];
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return NULL;
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
108b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    const lldb_private::RegisterSet *
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterSet (uint32_t i) const
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (i < m_sets.size())
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            return &m_sets[i];
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return NULL;
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterSetIndexByName (lldb_private::ConstString &set_name, bool can_create)
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        name_collection::iterator pos, end = m_set_names.end();
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        for (pos = m_set_names.begin(); pos != end; ++pos)
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (*pos == set_name)
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                return std::distance (m_set_names.begin(), pos);
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_set_names.push_back(set_name);
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_set_reg_nums.resize(m_set_reg_nums.size()+1);
128b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton        lldb_private::RegisterSet new_set = { set_name.AsCString(), NULL, 0, NULL };
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_sets.push_back (new_set);
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_sets.size() - 1;
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ConvertRegisterKindToRegisterNumber (uint32_t kind, uint32_t num) const
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        reg_collection::const_iterator pos, end = m_regs.end();
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        for (pos = m_regs.begin(); pos != end; ++pos)
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (pos->kinds[kind] == num)
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                return std::distance (m_regs.begin(), pos);
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return LLDB_INVALID_REGNUM;
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear()
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_regs.clear();
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_sets.clear();
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_set_reg_nums.clear();
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_reg_names.clear();
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_reg_alt_names.clear();
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_set_names.clear();
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    HardcodeARMRegisters();
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Classes that inherit from GDBRemoteRegisterContext can see and modify these
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
163b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    typedef std::vector <lldb_private::RegisterInfo> reg_collection;
164b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    typedef std::vector <lldb_private::RegisterSet> set_collection;
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector <uint32_t> reg_num_collection;
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector <reg_num_collection> set_reg_num_collection;
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector <lldb_private::ConstString> name_collection;
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    reg_collection m_regs;
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    set_collection m_sets;
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    set_reg_num_collection m_set_reg_nums;
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    name_collection m_reg_names;
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    name_collection m_reg_alt_names;
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    name_collection m_set_names;
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t m_reg_data_byte_size;   // The number of bytes required to store all registers
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass GDBRemoteRegisterContext : public lldb_private::RegisterContext
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Constructors and Destructors
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GDBRemoteRegisterContext (ThreadGDBRemote &thread,
18508d7d3ae16110aa68ed40c161eac8571aeb94cd9Greg Clayton                              uint32_t concrete_frame_idx,
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                              GDBRemoteDynamicRegisterInfo &reg_info,
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                              bool read_all_at_once);
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~GDBRemoteRegisterContext ();
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Subclasses must override these functions
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual void
196a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton    InvalidateAllRegisters ();
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterCount ();
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
201b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    virtual const lldb_private::RegisterInfo *
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterInfoAtIndex (uint32_t reg);
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual size_t
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterSetCount ();
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
207b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    virtual const lldb_private::RegisterSet *
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRegisterSet (uint32_t reg_set);
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ReadRegisterValue (uint32_t reg, lldb_private::Scalar &value);
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ReadRegisterBytes (uint32_t reg, lldb_private::DataExtractor &data);
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ReadAllRegisterValues (lldb::DataBufferSP &data_sp);
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WriteRegisterValue (uint32_t reg, const lldb_private::Scalar &value);
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WriteRegisterBytes (uint32_t reg, lldb_private::DataExtractor &data, uint32_t data_offset);
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WriteAllRegisterValues (const lldb::DataBufferSP &data_sp);
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ConvertRegisterKindToRegisterNumber (uint32_t kind, uint32_t num);
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
232a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton    friend class ThreadGDBRemote;
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
234c3c4661c6a7527580e605dbb69bef7634971fe13Greg Clayton    bool
235a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton    PrivateSetRegisterValue (uint32_t reg, StringExtractor &response);
236a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton
237a875b64ab8d258b28959d05eea37cb5dfdd72730Greg Clayton    void
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetAllRegisterValid (bool b);
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ProcessGDBRemote &
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetGDBProcess();
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadGDBRemote &
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetGDBThread();
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GDBRemoteDynamicRegisterInfo &m_reg_info;
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::vector<bool> m_reg_valid;
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::DataExtractor m_reg_data;
24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool m_read_all_at_once;
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // For GDBRemoteRegisterContext only
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (GDBRemoteRegisterContext);
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // lldb_GDBRemoteRegisterContext_h_
259