xref: /NextBSD/contrib/llvm/tools/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h (revision 287e3b14e9552995def1802ec9c5034f4adf28ec)
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:
~ABIMacOSX_arm()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
CallFrameAddressIsValid(lldb::addr_t cfa)58     CallFrameAddressIsValid (lldb::addr_t cfa)
59     {
60         // Make sure the stack call frame addresses are are 4 byte aligned
61         if (cfa & (4ull - 1ull))
62             return false;   // Not 4 byte aligned
63         if (cfa == 0)
64             return false;   // Zero is not a valid stack address
65         return true;
66     }
67 
68     virtual bool
CodeAddressIsValid(lldb::addr_t pc)69     CodeAddressIsValid (lldb::addr_t pc)
70     {
71         // Just make sure the address is a valid 32 bit address. Bit zero
72         // might be set due to Thumb function calls, so don't enforce 2 byte
73         // alignment
74         return pc <= UINT32_MAX;
75     }
76 
77     virtual lldb::addr_t
FixCodeAddress(lldb::addr_t pc)78     FixCodeAddress (lldb::addr_t pc)
79     {
80         // ARM uses bit zero to signify a code address is thumb, so we must
81         // strip bit zero in any code addresses.
82         return pc & ~(lldb::addr_t)1;
83     }
84 
85     virtual const lldb_private::RegisterInfo *
86     GetRegisterInfoArray (uint32_t &count);
87 
88     //------------------------------------------------------------------
89     // Static Functions
90     //------------------------------------------------------------------
91     static void
92     Initialize();
93 
94     static void
95     Terminate();
96 
97     static lldb::ABISP
98     CreateInstance (const lldb_private::ArchSpec &arch);
99 
100     static lldb_private::ConstString
101     GetPluginNameStatic();
102 
103     //------------------------------------------------------------------
104     // PluginInterface protocol
105     //------------------------------------------------------------------
106     virtual lldb_private::ConstString
107     GetPluginName();
108 
109     virtual uint32_t
110     GetPluginVersion();
111 
112 protected:
113 private:
ABIMacOSX_arm()114     ABIMacOSX_arm() :
115         lldb_private::ABI()
116     {
117          // Call CreateInstance instead.
118     }
119 };
120 
121 #endif  // liblldb_ABIMacOSX_arm_h_
122