LLDB  mainline
ABISysV_hexagon.h
Go to the documentation of this file.
1 //===-- ABISysV_hexagon.h ----------------------------------------*- C++
2 //-*-===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef liblldb_ABISysV_hexagon_h_
11 #define liblldb_ABISysV_hexagon_h_
12 
13 #include "lldb/Target/ABI.h"
14 #include "lldb/lldb-private.h"
15 
17 public:
18  ~ABISysV_hexagon() override = default;
19 
20  size_t GetRedZoneSize() const override;
21 
23  lldb::addr_t functionAddress,
24  lldb::addr_t returnAddress,
25  llvm::ArrayRef<lldb::addr_t> args) const override;
26 
27  // special thread plan for GDB style non-jit function calls
28  bool
30  lldb::addr_t functionAddress, lldb::addr_t returnAddress,
31  llvm::Type &prototype,
32  llvm::ArrayRef<ABI::CallArgument> args) const override;
33 
35  lldb_private::ValueList &values) const override;
36 
38  SetReturnValueObject(lldb::StackFrameSP &frame_sp,
39  lldb::ValueObjectSP &new_value) override;
40 
41  lldb::ValueObjectSP
43  lldb_private::CompilerType &type) const override;
44 
45  // specialized to work with llvm IR types
46  lldb::ValueObjectSP GetReturnValueObjectImpl(lldb_private::Thread &thread,
47  llvm::Type &type) const override;
48 
49  bool
51 
52  bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
53 
54  bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
55 
57  // Make sure the stack call frame addresses are 8 byte aligned
58  if (cfa & 0x07)
59  return false; // Not 8 byte aligned
60  if (cfa == 0)
61  return false; // Zero is not a valid stack address
62  return true;
63  }
64 
66  // We have a 64 bit address space, so anything is valid as opcodes
67  // aren't fixed width...
68  return true;
69  }
70 
71  const lldb_private::RegisterInfo *
72  GetRegisterInfoArray(uint32_t &count) override;
73 
74  // Static Functions
75 
76  static void Initialize();
77 
78  static void Terminate();
79 
80  static lldb::ABISP CreateInstance(lldb::ProcessSP process_sp, const lldb_private::ArchSpec &arch);
81 
83 
84  // PluginInterface protocol
85 
87 
88  uint32_t GetPluginVersion() override;
89 
90 protected:
92 
93  lldb::ValueObjectSP
95  lldb_private::CompilerType &ast_type) const;
96 
97  bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
98 
99 private:
100  ABISysV_hexagon(lldb::ProcessSP process_sp) : lldb_private::ABI(process_sp) {
101  // Call CreateInstance instead.
102  }
103 };
104 
105 #endif // liblldb_ABISysV_hexagon_h_
~ABISysV_hexagon() override=default
lldb_private::Status SetReturnValueObject(lldb::StackFrameSP &frame_sp, lldb::ValueObjectSP &new_value) override
static void Initialize()
lldb::ValueObjectSP GetReturnValueObjectImpl(lldb_private::Thread &thread, lldb_private::CompilerType &type) const override
static void Terminate()
lldb::ValueObjectSP GetReturnValueObjectSimple(lldb_private::Thread &thread, lldb_private::CompilerType &ast_type) const
const lldb_private::RegisterInfo * GetRegisterInfoArray(uint32_t &count) override
An architecture specification class.
Definition: ArchSpec.h:32
bool CodeAddressIsValid(lldb::addr_t pc) override
bool CallFrameAddressIsValid(lldb::addr_t cfa) override
lldb_private::ConstString GetPluginName() override
static lldb_private::ConstString GetPluginNameStatic()
size_t GetRedZoneSize() const override
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info)
static lldb::ABISP CreateInstance(lldb::ProcessSP process_sp, const lldb_private::ArchSpec &arch)
bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override
uint32_t GetPluginVersion() override
bool GetArgumentValues(lldb_private::Thread &thread, lldb_private::ValueList &values) const override
uint64_t addr_t
Definition: lldb-types.h:83
A uniqued constant string class.
Definition: ConstString.h:38
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 RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override
void CreateRegisterMapIfNeeded()
bool CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override
An error handling class.
Definition: Status.h:44