Path: blob/main/contrib/llvm-project/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h
213845 views
//===-- ABISysV_loongarch.h -------------------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLDB_SOURCE_PLUGINS_ABI_LOONGARCH_ABISYSV_LOONGARCH_H9#define LLDB_SOURCE_PLUGINS_ABI_LOONGARCH_ABISYSV_LOONGARCH_H1011// Other libraries and framework includes12#include "llvm/TargetParser/Triple.h"1314// Project includes15#include "lldb/Target/ABI.h"16#include "lldb/Target/Process.h"17#include "lldb/Utility/Flags.h"18#include "lldb/lldb-private.h"1920class ABISysV_loongarch : public lldb_private::RegInfoBasedABI {21public:22~ABISysV_loongarch() override = default;2324size_t GetRedZoneSize() const override { return 0; }2526bool PrepareTrivialCall(lldb_private::Thread &thread, lldb::addr_t sp,27lldb::addr_t functionAddress,28lldb::addr_t returnAddress,29llvm::ArrayRef<lldb::addr_t> args) const override;3031bool GetArgumentValues(lldb_private::Thread &thread,32lldb_private::ValueList &values) const override;3334lldb_private::Status35SetReturnValueObject(lldb::StackFrameSP &frame_sp,36lldb::ValueObjectSP &new_value) override;3738lldb::ValueObjectSP39GetReturnValueObjectImpl(lldb_private::Thread &thread,40lldb_private::CompilerType &type) const override;4142lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;4344lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;4546bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;4748bool CallFrameAddressIsValid(lldb::addr_t cfa) override {49// The CFA must be 16 byte aligned.50return (cfa & 0xfull) == 0;51}5253void SetIsLA64(bool is_la64) { m_is_la64 = is_la64; }5455bool CodeAddressIsValid(lldb::addr_t pc) override {56// Code address must be 4 byte aligned.57if (pc & (4ull - 1ull))58return false;5960return true;61}6263const lldb_private::RegisterInfo *64GetRegisterInfoArray(uint32_t &count) override;6566//------------------------------------------------------------------67// Static Functions68//------------------------------------------------------------------6970static void Initialize();7172static void Terminate();7374static lldb::ABISP CreateInstance(lldb::ProcessSP process_sp,75const lldb_private::ArchSpec &arch);7677static llvm::StringRef GetPluginNameStatic() { return "sysv-loongarch"; }7879//------------------------------------------------------------------80// PluginInterface protocol81//------------------------------------------------------------------8283llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }8485protected:86void AugmentRegisterInfo(87std::vector<lldb_private::DynamicRegisterInfo::Register> ®s) override;8889bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);9091private:92lldb::ValueObjectSP93GetReturnValueObjectSimple(lldb_private::Thread &thread,94lldb_private::CompilerType &ast_type) const;9596using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance97// instead.98bool m_is_la64;99};100101#endif // LLDB_SOURCE_PLUGINS_ABI_LOONGARCH_ABISYSV_LOONGARCH_H102103104