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()25 ~ABISysV_mips() 26 { 27 } 28 29 virtual size_t 30 GetRedZoneSize () const; 31 32 virtual bool 33 PrepareTrivialCall (lldb_private::Thread &thread, 34 lldb::addr_t sp, 35 lldb::addr_t functionAddress, 36 lldb::addr_t returnAddress, 37 llvm::ArrayRef<lldb::addr_t> args) const; 38 39 virtual bool 40 GetArgumentValues (lldb_private::Thread &thread, 41 lldb_private::ValueList &values) const; 42 43 virtual lldb_private::Error 44 SetReturnValueObject(lldb::StackFrameSP &frame_sp, lldb::ValueObjectSP &new_value); 45 46 protected: 47 lldb::ValueObjectSP 48 GetReturnValueObjectSimple (lldb_private::Thread &thread, 49 lldb_private::ClangASTType &ast_type) const; 50 51 public: 52 virtual lldb::ValueObjectSP 53 GetReturnValueObjectImpl (lldb_private::Thread &thread, 54 lldb_private::ClangASTType &type) const; 55 56 virtual bool 57 CreateFunctionEntryUnwindPlan (lldb_private::UnwindPlan &unwind_plan); 58 59 virtual bool 60 CreateDefaultUnwindPlan (lldb_private::UnwindPlan &unwind_plan); 61 62 virtual bool 63 RegisterIsVolatile (const lldb_private::RegisterInfo *reg_info); 64 65 virtual bool CallFrameAddressIsValid(lldb::addr_t cfa)66 CallFrameAddressIsValid (lldb::addr_t cfa) 67 { 68 // Make sure the stack call frame addresses are 8 byte aligned 69 if (cfa & (8ull - 1ull)) 70 return false; // Not 8 byte aligned 71 if (cfa == 0) 72 return false; // Zero is not a valid stack address 73 return true; 74 } 75 76 virtual bool CodeAddressIsValid(lldb::addr_t pc)77 CodeAddressIsValid (lldb::addr_t pc)//must- check 78 { 79 if (pc & (4ull - 1ull)) 80 return false; // Not 4 byte aligned 81 82 // Anything else if fair game.. 83 return true; 84 } 85 86 virtual const lldb_private::RegisterInfo * 87 GetRegisterInfoArray (uint32_t &count); 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 void 114 CreateRegisterMapIfNeeded (); 115 116 bool 117 RegisterIsCalleeSaved (const lldb_private::RegisterInfo *reg_info); 118 119 private: ABISysV_mips()120 ABISysV_mips() : lldb_private::ABI() { } // Call CreateInstance instead. 121 }; 122 123 #endif // liblldb_ABI_h_ 124