• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- AppleObjCRuntime.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_AppleObjCRuntime_h_
11 #define liblldb_AppleObjCRuntime_h_
12 
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/lldb-private.h"
18 #include "lldb/Target/LanguageRuntime.h"
19 #include "lldb/Target/ObjCLanguageRuntime.h"
20 #include "lldb/Core/ValueObject.h"
21 #include "AppleObjCTrampolineHandler.h"
22 #include "AppleThreadPlanStepThroughObjCTrampoline.h"
23 
24 namespace lldb_private {
25 
26 class AppleObjCRuntime :
27         public lldb_private::ObjCLanguageRuntime
28 {
29 public:
30 
~AppleObjCRuntime()31     virtual ~AppleObjCRuntime() { }
32 
33     // These are generic runtime functions:
34     virtual bool
35     GetObjectDescription (Stream &str, Value &value, ExecutionContextScope *exe_scope);
36 
37     virtual bool
38     GetObjectDescription (Stream &str, ValueObject &object);
39 
40     virtual bool
41     CouldHaveDynamicValue (ValueObject &in_value);
42 
43     virtual bool
44     GetDynamicTypeAndAddress (ValueObject &in_value,
45                               lldb::DynamicValueType use_dynamic,
46                               TypeAndOrName &class_type_or_name,
47                               Address &address);
48 
49     // These are the ObjC specific functions.
50 
51     virtual bool
52     IsModuleObjCLibrary (const lldb::ModuleSP &module_sp);
53 
54     virtual bool
55     ReadObjCLibrary (const lldb::ModuleSP &module_sp);
56 
57     virtual bool
HasReadObjCLibrary()58     HasReadObjCLibrary ()
59     {
60         return m_read_objc_library;
61     }
62 
63     virtual lldb::ThreadPlanSP
64     GetStepThroughTrampolinePlan (Thread &thread, bool stop_others);
65 
66     // Get the "libobjc.A.dylib" module from the current target if we can find
67     // it, also cache it once it is found to ensure quick lookups.
68     lldb::ModuleSP
69     GetObjCModule ();
70 
71     //------------------------------------------------------------------
72     // Static Functions
73     //------------------------------------------------------------------
74     // Note there is no CreateInstance, Initialize & Terminate functions here, because
75     // you can't make an instance of this generic runtime.
76 
77 protected:
78     virtual bool
79     CalculateHasNewLiteralsAndIndexing();
80 
81     static bool
82     AppleIsModuleObjCLibrary (const lldb::ModuleSP &module_sp);
83 
84     static enum ObjCRuntimeVersions
85     GetObjCVersion (Process *process, lldb::ModuleSP &objc_module_sp);
86 
87     //------------------------------------------------------------------
88     // PluginInterface protocol
89     //------------------------------------------------------------------
90 public:
91     virtual void
92     SetExceptionBreakpoints();
93 
94     virtual void
95     ClearExceptionBreakpoints ();
96 
97     virtual bool
98     ExceptionBreakpointsExplainStop (lldb::StopInfoSP stop_reason);
99 
100     virtual lldb::SearchFilterSP
101     CreateExceptionSearchFilter ();
102 
103 protected:
104     Address *
105     GetPrintForDebuggerAddr();
106 
107     std::unique_ptr<Address>  m_PrintForDebugger_addr;
108     bool m_read_objc_library;
109     std::unique_ptr<lldb_private::AppleObjCTrampolineHandler> m_objc_trampoline_handler_ap;
110     lldb::BreakpointSP m_objc_exception_bp_sp;
111     lldb::ModuleWP m_objc_module_wp;
112 
AppleObjCRuntime(Process * process)113     AppleObjCRuntime(Process *process) :
114         lldb_private::ObjCLanguageRuntime(process),
115         m_read_objc_library (false),
116         m_objc_trampoline_handler_ap ()
117      {
118          // Call CreateInstance instead.
119      }
120 };
121 
122 } // namespace lldb_private
123 
124 #endif  // liblldb_AppleObjCRuntime_h_
125