| //===-- ABISysV_msp430.h ----------------------------------------*- C++ -*-===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef LLDB_SOURCE_PLUGINS_ABI_MSP430_ABISYSV_MSP430_H | 
 | #define LLDB_SOURCE_PLUGINS_ABI_MSP430_ABISYSV_MSP430_H | 
 |  | 
 | #include "lldb/Target/ABI.h" | 
 | #include "lldb/lldb-private.h" | 
 |  | 
 | class ABISysV_msp430 : public lldb_private::RegInfoBasedABI { | 
 | public: | 
 |   ~ABISysV_msp430() override = default; | 
 |  | 
 |   size_t GetRedZoneSize() const override; | 
 |  | 
 |   bool PrepareTrivialCall(lldb_private::Thread &thread, lldb::addr_t sp, | 
 |                           lldb::addr_t functionAddress, | 
 |                           lldb::addr_t returnAddress, | 
 |                           llvm::ArrayRef<lldb::addr_t> args) const override; | 
 |  | 
 |   bool GetArgumentValues(lldb_private::Thread &thread, | 
 |                          lldb_private::ValueList &values) const override; | 
 |  | 
 |   lldb_private::Status | 
 |   SetReturnValueObject(lldb::StackFrameSP &frame_sp, | 
 |                        lldb::ValueObjectSP &new_value) override; | 
 |  | 
 |   lldb::ValueObjectSP | 
 |   GetReturnValueObjectImpl(lldb_private::Thread &thread, | 
 |                            lldb_private::CompilerType &type) const override; | 
 |  | 
 |   bool | 
 |   CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override; | 
 |  | 
 |   bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override; | 
 |  | 
 |   bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override; | 
 |  | 
 |   bool CallFrameAddressIsValid(lldb::addr_t cfa) override { | 
 |     // Make sure the stack call frame addresses are 2 byte aligned | 
 |     // and not zero | 
 |     if (cfa & 0x01 || cfa == 0) | 
 |       return false; | 
 |     return true; | 
 |   } | 
 |  | 
 |   bool CodeAddressIsValid(lldb::addr_t pc) override { return true; } | 
 |  | 
 |   const lldb_private::RegisterInfo * | 
 |   GetRegisterInfoArray(uint32_t &count) override; | 
 |  | 
 |   uint64_t GetStackFrameSize() override { return 512; } | 
 |  | 
 |   //------------------------------------------------------------------ | 
 |   // Static Functions | 
 |   //------------------------------------------------------------------ | 
 |  | 
 |   static void Initialize(); | 
 |  | 
 |   static void Terminate(); | 
 |  | 
 |   static lldb::ABISP CreateInstance(lldb::ProcessSP process_sp, | 
 |                                     const lldb_private::ArchSpec &arch); | 
 |  | 
 |   static llvm::StringRef GetPluginNameStatic() { return "sysv-msp430"; } | 
 |  | 
 |   // PluginInterface protocol | 
 |  | 
 |   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } | 
 |  | 
 | protected: | 
 |   void CreateRegisterMapIfNeeded(); | 
 |  | 
 |   lldb::ValueObjectSP | 
 |   GetReturnValueObjectSimple(lldb_private::Thread &thread, | 
 |                              lldb_private::CompilerType &ast_type) const; | 
 |  | 
 |   bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); | 
 |  | 
 | private: | 
 |   using lldb_private::RegInfoBasedABI::RegInfoBasedABI; | 
 | }; | 
 |  | 
 | #endif // LLDB_SOURCE_PLUGINS_ABI_MSP430_ABISYSV_MSP430_H |