1 //===-- StopInfoMachException.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_StopInfoMachException_h_
11 #define liblldb_StopInfoMachException_h_
12 
13 // C Includes
14 // C++ Includes
15 #include <string>
16 
17 // Other libraries and framework includes
18 // Project includes
19 #include "lldb/Target/StopInfo.h"
20 
21 namespace lldb_private {
22 
23 class StopInfoMachException : public StopInfo
24 {
25 public:
26     //------------------------------------------------------------------
27     // Constructors and Destructors
28     //------------------------------------------------------------------
StopInfoMachException(Thread & thread,uint32_t exc_type,uint32_t exc_data_count,uint64_t exc_code,uint64_t exc_subcode)29     StopInfoMachException (Thread &thread,
30                            uint32_t exc_type,
31                            uint32_t exc_data_count,
32                            uint64_t exc_code,
33                            uint64_t exc_subcode) :
34         StopInfo (thread, exc_type),
35         m_exc_data_count (exc_data_count),
36         m_exc_code (exc_code),
37         m_exc_subcode (exc_subcode)
38     {
39     }
40 
~StopInfoMachException()41     virtual ~StopInfoMachException()
42     {
43     }
44 
45 
46     virtual lldb::StopReason
GetStopReason()47     GetStopReason () const
48     {
49         return lldb::eStopReasonException;
50     }
51 
52     virtual const char *
53     GetDescription ();
54 
55     // Since some mach exceptions will be reported as breakpoints, signals,
56     // or trace, we use this static accessor which will translate the mach
57     // exception into the correct StopInfo.
58     static lldb::StopInfoSP
59     CreateStopReasonWithMachException (Thread &thread,
60                                        uint32_t exc_type,
61                                        uint32_t exc_data_count,
62                                        uint64_t exc_code,
63                                        uint64_t exc_sub_code,
64                                        uint64_t exc_sub_sub_code,
65                                        bool pc_already_adjusted = true,
66                                        bool adjust_pc_if_needed = false);
67 
68 protected:
69     uint32_t m_exc_data_count;
70     uint64_t m_exc_code;
71     uint64_t m_exc_subcode;
72 };
73 
74 
75 } // namespace lldb_private
76 
77 #endif  // liblldb_StopInfoMachException_h_
78