brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 3a383e4 Raw
90 lines · c
1//===-- ABISysV_msp430.h ----------------------------------------*- C++ -*-===//2//3//                     The LLVM Compiler Infrastructure4//5// This file is distributed under the University of Illinois Open Source6// License. See LICENSE.TXT for details.7//8//===----------------------------------------------------------------------===//9 10#ifndef LLDB_SOURCE_PLUGINS_ABI_MSP430_ABISYSV_MSP430_H11#define LLDB_SOURCE_PLUGINS_ABI_MSP430_ABISYSV_MSP430_H12 13#include "lldb/Target/ABI.h"14#include "lldb/lldb-private.h"15 16class ABISysV_msp430 : public lldb_private::RegInfoBasedABI {17public:18  ~ABISysV_msp430() override = default;19 20  size_t GetRedZoneSize() const override;21 22  bool PrepareTrivialCall(lldb_private::Thread &thread, lldb::addr_t sp,23                          lldb::addr_t functionAddress,24                          lldb::addr_t returnAddress,25                          llvm::ArrayRef<lldb::addr_t> args) const override;26 27  bool GetArgumentValues(lldb_private::Thread &thread,28                         lldb_private::ValueList &values) const override;29 30  lldb_private::Status31  SetReturnValueObject(lldb::StackFrameSP &frame_sp,32                       lldb::ValueObjectSP &new_value) override;33 34  lldb::ValueObjectSP35  GetReturnValueObjectImpl(lldb_private::Thread &thread,36                           lldb_private::CompilerType &type) const override;37 38  lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;39 40  lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;41 42  bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;43 44  bool CallFrameAddressIsValid(lldb::addr_t cfa) override {45    // Make sure the stack call frame addresses are 2 byte aligned46    // and not zero47    if (cfa & 0x01 || cfa == 0)48      return false;49    return true;50  }51 52  bool CodeAddressIsValid(lldb::addr_t pc) override { return true; }53 54  const lldb_private::RegisterInfo *55  GetRegisterInfoArray(uint32_t &count) override;56 57  uint64_t GetStackFrameSize() override { return 512; }58 59  //------------------------------------------------------------------60  // Static Functions61  //------------------------------------------------------------------62 63  static void Initialize();64 65  static void Terminate();66 67  static lldb::ABISP CreateInstance(lldb::ProcessSP process_sp,68                                    const lldb_private::ArchSpec &arch);69 70  static llvm::StringRef GetPluginNameStatic() { return "sysv-msp430"; }71 72  // PluginInterface protocol73 74  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }75 76protected:77  void CreateRegisterMapIfNeeded();78 79  lldb::ValueObjectSP80  GetReturnValueObjectSimple(lldb_private::Thread &thread,81                             lldb_private::CompilerType &ast_type) const;82 83  bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);84 85private:86  using lldb_private::RegInfoBasedABI::RegInfoBasedABI;87};88 89#endif // LLDB_SOURCE_PLUGINS_ABI_MSP430_ABISYSV_MSP430_H90