]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / source / Plugins / ABI / MacOSX-arm / ABIMacOSX_arm.h
1 //===-- ABIMacOSX_arm.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_ABIMacOSX_arm_h_
11 #define liblldb_ABIMacOSX_arm_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/ABI.h"
19
20 class ABIMacOSX_arm : public lldb_private::ABI
21 {
22 public:
23     ~ABIMacOSX_arm() { }
24     
25     virtual size_t 
26     GetRedZoneSize () const;
27     
28     virtual bool
29     PrepareTrivialCall (lldb_private::Thread &thread, 
30                         lldb::addr_t sp,
31                         lldb::addr_t func_addr,
32                         lldb::addr_t returnAddress, 
33                         llvm::ArrayRef<lldb::addr_t> args) const;
34     
35     virtual bool
36     GetArgumentValues (lldb_private::Thread &thread,
37                        lldb_private::ValueList &values) const;
38     
39     virtual lldb_private::Error
40     SetReturnValueObject(lldb::StackFrameSP &frame_sp, lldb::ValueObjectSP &new_value);
41
42 protected:
43     virtual lldb::ValueObjectSP
44     GetReturnValueObjectImpl (lldb_private::Thread &thread,
45                     lldb_private::ClangASTType &ast_type) const;
46
47 public:
48     virtual bool
49     CreateFunctionEntryUnwindPlan (lldb_private::UnwindPlan &unwind_plan);
50     
51     virtual bool
52     CreateDefaultUnwindPlan (lldb_private::UnwindPlan &unwind_plan);
53     
54     virtual bool
55     RegisterIsVolatile (const lldb_private::RegisterInfo *reg_info);
56     
57     virtual bool
58     StackUsesFrames ()
59     {
60         return true;
61     }
62     
63     virtual bool
64     CallFrameAddressIsValid (lldb::addr_t cfa)
65     {
66         // Make sure the stack call frame addresses are are 4 byte aligned
67         if (cfa & (4ull - 1ull))
68             return false;   // Not 4 byte aligned
69         if (cfa == 0)
70             return false;   // Zero is not a valid stack address
71         return true;
72     }
73     
74     virtual bool
75     CodeAddressIsValid (lldb::addr_t pc)
76     {
77         // Just make sure the address is a valid 32 bit address. Bit zero
78         // might be set due to Thumb function calls, so don't enforce 2 byte
79         // alignment
80         return pc <= UINT32_MAX;
81     }
82     
83     virtual lldb::addr_t
84     FixCodeAddress (lldb::addr_t pc)
85     {
86         // ARM uses bit zero to signify a code address is thumb, so we must
87         // strip bit zero in any code addresses.
88         return pc & ~(lldb::addr_t)1;
89     }
90
91     virtual bool
92     FunctionCallsChangeCFA ()
93     {
94         return false;
95     }
96
97     virtual const lldb_private::RegisterInfo *
98     GetRegisterInfoArray (uint32_t &count);
99
100     //------------------------------------------------------------------
101     // Static Functions
102     //------------------------------------------------------------------
103     static void
104     Initialize();
105     
106     static void
107     Terminate();
108     
109     static lldb::ABISP
110     CreateInstance (const lldb_private::ArchSpec &arch);
111     
112     static lldb_private::ConstString
113     GetPluginNameStatic();
114     
115     //------------------------------------------------------------------
116     // PluginInterface protocol
117     //------------------------------------------------------------------
118     virtual lldb_private::ConstString
119     GetPluginName();
120     
121     virtual uint32_t
122     GetPluginVersion();
123     
124 protected:
125 private:
126     ABIMacOSX_arm() : 
127         lldb_private::ABI() 
128     {
129          // Call CreateInstance instead.
130     }
131 };
132
133 #endif  // liblldb_ABIMacOSX_arm_h_