blob: b13321ef6f5394d7e6d7a03f9b07508d04db2a64 [file] [log] [blame]
Stephen Wilsonf6f40332010-07-24 02:19:04 +00001//===-- ProcessMessage.h ----------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef liblldb_ProcessMessage_H_
11#define liblldb_ProcessMessage_H_
12
13#include <cassert>
14
15#include "lldb/lldb-defines.h"
16#include "lldb/lldb-types.h"
17
18class ProcessMessage
19{
20public:
21
22 /// The type of signal this message can correspond to.
23 enum Kind
24 {
25 eInvalidMessage,
26 eExitMessage,
27 eLimboMessage,
28 eSignalMessage,
29 eTraceMessage,
30 eBreakpointMessage
31 };
32
33 ProcessMessage()
34 : m_kind(eInvalidMessage),
35 m_tid(LLDB_INVALID_PROCESS_ID),
36 m_data(0) { }
37
38 Kind GetKind() const { return m_kind; }
39
40 lldb::tid_t GetTID() const { return m_tid; }
41
42 static ProcessMessage Exit(lldb::tid_t tid, int status) {
43 return ProcessMessage(tid, eExitMessage, status);
44 }
45
46 static ProcessMessage Limbo(lldb::tid_t tid, int status) {
47 return ProcessMessage(tid, eLimboMessage, status);
48 }
49
50 static ProcessMessage Signal(lldb::tid_t tid, int signum) {
51 return ProcessMessage(tid, eSignalMessage, signum);
52 }
53
54 static ProcessMessage Trace(lldb::tid_t tid) {
55 return ProcessMessage(tid, eTraceMessage);
56 }
57
58 static ProcessMessage Break(lldb::tid_t tid) {
59 return ProcessMessage(tid, eBreakpointMessage);
60 }
61
62 int GetExitStatus() const {
63 assert(GetKind() == eExitMessage || GetKind() == eLimboMessage);
64 return m_data;
65 }
66
67 int GetSignal() const {
68 assert(GetKind() == eSignalMessage);
69 return m_data;
70 }
71
72 int GetStopStatus() const {
73 assert(GetKind() == eSignalMessage);
74 return m_data;
75 }
76
77private:
78 ProcessMessage(lldb::tid_t tid, Kind kind, int data = 0)
79 : m_kind(kind),
80 m_tid(tid),
81 m_data(data) { }
82
83 Kind m_kind;
84 lldb::tid_t m_tid;
85 int m_data;
86};
87
88#endif // #ifndef liblldb_ProcessMessage_H_