This change brings in lldb-gdbserver (llgs) specifically for Linux x86_64. (More architectures coming soon). Not every debugserver option is covered yet. Currently the lldb-gdbserver command line can start unattached, start attached to a pid (process-name attach not supported yet), or accept lldb attaching and launching a process or connecting by process id. The history of this large change can be found here: https://github.com/tfiala/lldb/tree/dev-tfiala-native-protocol-linux-x86_64 Until mid/late April, I was not sharing the work and continued to rebase it off of head (developed via id tfiala@google.com). I switched over to user todd.fiala@gmail.com in the middle, and once I went to github, I did merges rather than rebasing so I could share with others. llvm-svn: 212069
158 lines
3.7 KiB
C++
158 lines
3.7 KiB
C++
//===-- StringExtractor.h ---------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef utility_StringExtractor_h_
|
|
#define utility_StringExtractor_h_
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
#include <string>
|
|
#include <stdint.h>
|
|
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
|
|
class StringExtractor
|
|
{
|
|
public:
|
|
|
|
enum {
|
|
BigEndian = 0,
|
|
LittleEndian = 1
|
|
};
|
|
//------------------------------------------------------------------
|
|
// Constructors and Destructors
|
|
//------------------------------------------------------------------
|
|
StringExtractor();
|
|
StringExtractor(const char *packet_cstr);
|
|
StringExtractor(const StringExtractor& rhs);
|
|
virtual ~StringExtractor();
|
|
|
|
//------------------------------------------------------------------
|
|
// Operators
|
|
//------------------------------------------------------------------
|
|
const StringExtractor&
|
|
operator=(const StringExtractor& rhs);
|
|
|
|
// Returns true if the file position is still valid for the data
|
|
// contained in this string extractor object.
|
|
bool
|
|
IsGood() const
|
|
{
|
|
return m_index != UINT64_MAX;
|
|
}
|
|
|
|
uint64_t
|
|
GetFilePos () const
|
|
{
|
|
return m_index;
|
|
}
|
|
|
|
void
|
|
SetFilePos (uint32_t idx)
|
|
{
|
|
m_index = idx;
|
|
}
|
|
|
|
void
|
|
Clear ()
|
|
{
|
|
m_packet.clear();
|
|
m_index = 0;
|
|
}
|
|
|
|
std::string &
|
|
GetStringRef ()
|
|
{
|
|
return m_packet;
|
|
}
|
|
|
|
const std::string &
|
|
GetStringRef () const
|
|
{
|
|
return m_packet;
|
|
}
|
|
|
|
bool
|
|
Empty()
|
|
{
|
|
return m_packet.empty();
|
|
}
|
|
|
|
size_t
|
|
GetBytesLeft ()
|
|
{
|
|
if (m_index < m_packet.size())
|
|
return m_packet.size() - m_index;
|
|
return 0;
|
|
}
|
|
char
|
|
GetChar (char fail_value = '\0');
|
|
|
|
uint8_t
|
|
GetHexU8 (uint8_t fail_value = 0, bool set_eof_on_fail = true);
|
|
|
|
bool
|
|
GetNameColonValue (std::string &name, std::string &value);
|
|
|
|
int32_t
|
|
GetS32 (int32_t fail_value, int base = 0);
|
|
|
|
uint32_t
|
|
GetU32 (uint32_t fail_value, int base = 0);
|
|
|
|
int64_t
|
|
GetS64 (int64_t fail_value, int base = 0);
|
|
|
|
uint64_t
|
|
GetU64 (uint64_t fail_value, int base = 0);
|
|
|
|
uint32_t
|
|
GetHexMaxU32 (bool little_endian, uint32_t fail_value);
|
|
|
|
uint64_t
|
|
GetHexMaxU64 (bool little_endian, uint64_t fail_value);
|
|
|
|
size_t
|
|
GetHexBytes (void *dst, size_t dst_len, uint8_t fail_fill_value);
|
|
|
|
uint64_t
|
|
GetHexWithFixedSize (uint32_t byte_size, bool little_endian, uint64_t fail_value);
|
|
|
|
size_t
|
|
GetHexByteString (std::string &str);
|
|
|
|
size_t
|
|
GetHexByteStringFixedLength (std::string &str, uint32_t nibble_length);
|
|
|
|
size_t
|
|
GetHexByteStringTerminatedBy (std::string &str,
|
|
char terminator);
|
|
|
|
const char *
|
|
Peek ()
|
|
{
|
|
if (m_index < m_packet.size())
|
|
return m_packet.c_str() + m_index;
|
|
return nullptr;
|
|
}
|
|
|
|
protected:
|
|
//------------------------------------------------------------------
|
|
// For StringExtractor only
|
|
//------------------------------------------------------------------
|
|
std::string m_packet; // The string in which to extract data.
|
|
uint64_t m_index; // When extracting data from a packet, this index
|
|
// will march along as things get extracted. If set
|
|
// to UINT64_MAX the end of the packet data was
|
|
// reached when decoding information
|
|
};
|
|
|
|
#endif // utility_StringExtractor_h_
|