blob: c609fba1b22c8283227363668d861deb336b5b5a [file] [log] [blame]
// Copyright 2024 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.
#ifndef SRC_DEVELOPER_DEBUG_ZXDB_EXPR_REGISTER_UTILS_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_EXPR_REGISTER_UTILS_H_
#include <lib/stdcompat/span.h>
#include "src/developer/debug/shared/arch.h"
#include "src/developer/debug/zxdb/expr/expr_language.h"
#include "src/developer/debug/zxdb/expr/expr_value.h"
#include "src/developer/debug/zxdb/expr/parsed_identifier.h"
#include "src/developer/debug/zxdb/expr/vector_register_format.h"
namespace zxdb {
// Converts an identifier to a RegisterID. Returns kUnknown if the identifier is
// not a register for the given architecture.
debug::RegisterID GetRegisterID(debug::Arch arch, const ParsedIdentifier& ident);
// Returns a generic error message for register |id|.
Err GetUnavailableRegisterErr(debug::RegisterID id);
// Converts |data| into an ExprValue with the given |id|. The format for
// non-vector registers will be looked up based on |id|. |lang| will determine
// the builtin Type symbol that will represent the register data.
ErrOrValue RegisterDataToValue(ExprLanguage lang, debug::RegisterID id,
VectorRegisterFormat vector_fmt, cpp20::span<const uint8_t> data);
} // namespace zxdb
#endif // SRC_DEVELOPER_DEBUG_ZXDB_EXPR_REGISTER_UTILS_H_