]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - source/Plugins/ABI/SysV-mips/ABISysV_mips.h
Vendor import of lldb release_39 branch r276489:
[FreeBSD/FreeBSD.git] / source / Plugins / ABI / SysV-mips / ABISysV_mips.h
1 //===-- ABISysV_mips.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_ABISysV_mips_h_
11 #define liblldb_ABISysV_mips_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 ABISysV_mips :
21     public lldb_private::ABI
22 {
23 public:
24     ~ABISysV_mips() override = default;
25
26     size_t
27     GetRedZoneSize() const override;
28
29     bool
30     PrepareTrivialCall(lldb_private::Thread &thread,
31                        lldb::addr_t sp,
32                        lldb::addr_t functionAddress,
33                        lldb::addr_t returnAddress,
34                        llvm::ArrayRef<lldb::addr_t> args) const override;
35
36     bool
37     GetArgumentValues(lldb_private::Thread &thread,
38                       lldb_private::ValueList &values) const override;
39
40     lldb_private::Error
41     SetReturnValueObject(lldb::StackFrameSP &frame_sp, lldb::ValueObjectSP &new_value) override;
42
43     lldb::ValueObjectSP
44     GetReturnValueObjectImpl(lldb_private::Thread &thread,
45                              lldb_private::CompilerType &type) const override;
46
47     bool
48     CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
49
50     bool
51     CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
52
53     bool
54     RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
55
56     bool
57     IsSoftFloat(uint32_t fp_flag) const;
58
59     bool
60     CallFrameAddressIsValid(lldb::addr_t cfa) override
61     {
62         // Make sure the stack call frame addresses are 8 byte aligned
63         if (cfa & (8ull - 1ull))
64             return false;   // Not 8 byte aligned
65         if (cfa == 0)
66             return false;   // Zero is not a valid stack address
67         return true;
68     }
69
70     bool
71     CodeAddressIsValid(lldb::addr_t pc) override
72     {
73         // Just make sure the address is a valid 32 bit address. Bit zero
74         // might be set due to MicroMIPS function calls, so don't enforce alignment.
75         return (pc <= UINT32_MAX);
76     }
77
78     const lldb_private::RegisterInfo *
79     GetRegisterInfoArray(uint32_t &count) override;
80
81     //------------------------------------------------------------------
82     // Static Functions
83     //------------------------------------------------------------------
84
85     static void
86     Initialize();
87
88     static void
89     Terminate();
90
91     static lldb::ABISP
92     CreateInstance (const lldb_private::ArchSpec &arch);
93
94     static lldb_private::ConstString
95     GetPluginNameStatic();
96     
97     //------------------------------------------------------------------
98     // PluginInterface protocol
99     //------------------------------------------------------------------
100
101     lldb_private::ConstString
102     GetPluginName() override;
103
104     uint32_t
105     GetPluginVersion() override;
106
107 protected:
108     void
109     CreateRegisterMapIfNeeded ();
110
111     lldb::ValueObjectSP
112     GetReturnValueObjectSimple(lldb_private::Thread &thread,
113                                lldb_private::CompilerType &ast_type) const;
114
115     bool
116     RegisterIsCalleeSaved (const lldb_private::RegisterInfo *reg_info);
117
118 private:
119     ABISysV_mips() : 
120         lldb_private::ABI() 
121     {
122          // Call CreateInstance instead.
123     }
124 };
125
126 #endif // liblldb_ABISysV_mips_h_