1 //===-- ABISysV_x86_64.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_x86_64_h_ 11 #define liblldb_ABISysV_x86_64_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_x86_64 : 21 public lldb_private::ABI 22 { 23 public: 24 25 ~ABISysV_x86_64() 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 lldb::addr_t *arg1_ptr = NULL, 38 lldb::addr_t *arg2_ptr = NULL, 39 lldb::addr_t *arg3_ptr = NULL, 40 lldb::addr_t *arg4_ptr = NULL, 41 lldb::addr_t *arg5_ptr = NULL, 42 lldb::addr_t *arg6_ptr = NULL) const; 43 44 virtual bool 45 GetArgumentValues (lldb_private::Thread &thread, 46 lldb_private::ValueList &values) const; 47 48 virtual lldb_private::Error 49 SetReturnValueObject(lldb::StackFrameSP &frame_sp, lldb::ValueObjectSP &new_value); 50 51 protected: 52 lldb::ValueObjectSP 53 GetReturnValueObjectSimple (lldb_private::Thread &thread, 54 lldb_private::ClangASTType &ast_type) const; 55 56 public: 57 virtual lldb::ValueObjectSP 58 GetReturnValueObjectImpl (lldb_private::Thread &thread, 59 lldb_private::ClangASTType &type) const; 60 61 virtual bool 62 CreateFunctionEntryUnwindPlan (lldb_private::UnwindPlan &unwind_plan); 63 64 virtual bool 65 CreateDefaultUnwindPlan (lldb_private::UnwindPlan &unwind_plan); 66 67 virtual bool 68 RegisterIsVolatile (const lldb_private::RegisterInfo *reg_info); 69 70 virtual bool 71 StackUsesFrames () 72 { 73 return true; 74 } 75 76 virtual bool 77 CallFrameAddressIsValid (lldb::addr_t cfa) 78 { 79 // Make sure the stack call frame addresses are are 8 byte aligned 80 if (cfa & (8ull - 1ull)) 81 return false; // Not 8 byte aligned 82 if (cfa == 0) 83 return false; // Zero is not a valid stack address 84 return true; 85 } 86 87 virtual bool 88 CodeAddressIsValid (lldb::addr_t pc) 89 { 90 // We have a 64 bit address space, so anything is valid as opcodes 91 // aren't fixed width... 92 return true; 93 } 94 95 virtual bool 96 FunctionCallsChangeCFA () 97 { 98 return true; 99 } 100 101 virtual const lldb_private::RegisterInfo * 102 GetRegisterInfoArray (uint32_t &count); 103 //------------------------------------------------------------------ 104 // Static Functions 105 //------------------------------------------------------------------ 106 static void 107 Initialize(); 108 109 static void 110 Terminate(); 111 112 static lldb::ABISP 113 CreateInstance (const lldb_private::ArchSpec &arch); 114 115 static lldb_private::ConstString 116 GetPluginNameStatic(); 117 118 //------------------------------------------------------------------ 119 // PluginInterface protocol 120 //------------------------------------------------------------------ 121 virtual lldb_private::ConstString 122 GetPluginName(); 123 124 virtual uint32_t 125 GetPluginVersion(); 126 127 protected: 128 void 129 CreateRegisterMapIfNeeded (); 130 131 bool 132 RegisterIsCalleeSaved (const lldb_private::RegisterInfo *reg_info); 133 134 private: 135 ABISysV_x86_64() : lldb_private::ABI() { } // Call CreateInstance instead. 136 }; 137 138 #endif // liblldb_ABI_h_ 139