blob: ca0f1cfebed8f012c2808df50e6f81de6343cb2d [file] [log] [blame]
// Copyright 2023 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/debug/zxdb/expr/abi_riscv64.h"
#include "src/developer/debug/zxdb/symbols/base_type.h"
#include "src/developer/debug/zxdb/symbols/collection.h"
namespace zxdb {
using debug::RegisterID;
bool AbiRiscv64::IsRegisterCalleeSaved(debug::RegisterID reg) const {
switch (reg) {
case debug::RegisterID::kRiscv64_sp:
case debug::RegisterID::kRiscv64_s0:
case debug::RegisterID::kRiscv64_s1:
case debug::RegisterID::kRiscv64_s2:
case debug::RegisterID::kRiscv64_s3:
case debug::RegisterID::kRiscv64_s4:
case debug::RegisterID::kRiscv64_s5:
case debug::RegisterID::kRiscv64_s6:
case debug::RegisterID::kRiscv64_s7:
case debug::RegisterID::kRiscv64_s8:
case debug::RegisterID::kRiscv64_s9:
case debug::RegisterID::kRiscv64_s10:
case debug::RegisterID::kRiscv64_s11:
return true;
default:
return false;
}
}
std::optional<debug::RegisterID> AbiRiscv64::GetReturnRegisterForBaseType(
const BaseType* base_type) {
// Not implemented.
return std::nullopt;
}
std::optional<AbiRiscv64::CollectionReturn> AbiRiscv64::GetCollectionReturnByRefLocation(
const Collection* collection) {
// Not implemented.
return std::nullopt;
}
std::optional<Abi::CollectionByValueReturn> AbiRiscv64::GetCollectionReturnByValueLocation(
const fxl::RefPtr<EvalContext>& eval_context, const Collection* collection) {
// Not implemented.
return std::nullopt;
}
std::optional<std::vector<debug::RegisterID>> AbiRiscv64::GetFunctionParameterRegisters() {
return std::vector({
debug::RegisterID::kRiscv64_a0,
debug::RegisterID::kRiscv64_a1,
debug::RegisterID::kRiscv64_a2,
debug::RegisterID::kRiscv64_a3,
debug::RegisterID::kRiscv64_a4,
debug::RegisterID::kRiscv64_a5,
debug::RegisterID::kRiscv64_a6,
debug::RegisterID::kRiscv64_a7,
});
}
} // namespace zxdb