aboutsummaryrefslogtreecommitdiff
path: root/unittests/tools/lldb-server/tests/MessageObjects.h
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/tools/lldb-server/tests/MessageObjects.h')
-rw-r--r--unittests/tools/lldb-server/tests/MessageObjects.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/unittests/tools/lldb-server/tests/MessageObjects.h b/unittests/tools/lldb-server/tests/MessageObjects.h
new file mode 100644
index 000000000..82551e2bb
--- /dev/null
+++ b/unittests/tools/lldb-server/tests/MessageObjects.h
@@ -0,0 +1,102 @@
+//===-- MessageObjects.h ----------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/lldb-types.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Support/Endian.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FormatVariadic.h"
+#include <string>
+
+namespace llgs_tests {
+class ThreadInfo;
+typedef llvm::DenseMap<uint64_t, ThreadInfo> ThreadInfoMap;
+typedef llvm::DenseMap<uint64_t, uint64_t> U64Map;
+typedef llvm::DenseMap<unsigned int, std::string> RegisterMap;
+
+class ProcessInfo {
+public:
+ static llvm::Expected<ProcessInfo> Create(llvm::StringRef response);
+ lldb::pid_t GetPid() const;
+ llvm::support::endianness GetEndian() const;
+
+private:
+ ProcessInfo() = default;
+ lldb::pid_t m_pid;
+ lldb::pid_t m_parent_pid;
+ uint32_t m_real_uid;
+ uint32_t m_real_gid;
+ uint32_t m_effective_uid;
+ uint32_t m_effective_gid;
+ std::string m_triple;
+ llvm::SmallString<16> m_ostype;
+ llvm::support::endianness m_endian;
+ unsigned int m_ptrsize;
+};
+
+class ThreadInfo {
+public:
+ ThreadInfo() = default;
+ ThreadInfo(llvm::StringRef name, llvm::StringRef reason,
+ const RegisterMap &registers, unsigned int signal);
+
+ llvm::StringRef ReadRegister(unsigned int register_id) const;
+ bool ReadRegisterAsUint64(unsigned int register_id, uint64_t &value) const;
+
+private:
+ std::string m_name;
+ std::string m_reason;
+ RegisterMap m_registers;
+ unsigned int m_signal;
+};
+
+class JThreadsInfo {
+public:
+ static llvm::Expected<JThreadsInfo> Create(llvm::StringRef response,
+ llvm::support::endianness endian);
+
+ const ThreadInfoMap &GetThreadInfos() const;
+
+private:
+ JThreadsInfo() = default;
+ ThreadInfoMap m_thread_infos;
+};
+
+class StopReply {
+public:
+ static llvm::Expected<StopReply> Create(llvm::StringRef response,
+ llvm::support::endianness endian);
+ const U64Map &GetThreadPcs() const;
+
+private:
+ StopReply() = default;
+ void ParseResponse(llvm::StringRef response,
+ llvm::support::endianness endian);
+ unsigned int m_signal;
+ lldb::tid_t m_thread;
+ std::string m_name;
+ U64Map m_thread_pcs;
+ RegisterMap m_registers;
+ std::string m_reason;
+};
+
+// Common functions for parsing packet data.
+llvm::Expected<llvm::StringMap<llvm::StringRef>>
+SplitPairList(llvm::StringRef caller, llvm::StringRef s);
+
+template <typename... Args>
+llvm::Error make_parsing_error(llvm::StringRef format, Args &&... args) {
+ std::string error =
+ "Unable to parse " +
+ llvm::formatv(format.data(), std::forward<Args>(args)...).str();
+ return llvm::make_error<llvm::StringError>(error,
+ llvm::inconvertibleErrorCode());
+}
+} // namespace llgs_tests