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
21namespace lldb_private {
22
23class StopInfoMachException : public StopInfo
24{
25public:
26    //------------------------------------------------------------------
27    // Constructors and Destructors
28    //------------------------------------------------------------------
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
41    virtual ~StopInfoMachException()
42    {
43    }
44
45
46    virtual lldb::StopReason
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
68protected:
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