blob: 90014f66e4b2f41bcf1cd19bffc3d3d7df59655c [file] [log] [blame]
// Copyright 2018 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_CONSOLE_FORMAT_REGISTER_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_FORMAT_REGISTER_H_
#include <map>
#include <string>
#include <vector>
#include "src/developer/debug/ipc/protocol.h"
#include "src/developer/debug/ipc/records.h"
#include "src/developer/debug/zxdb/console/output_buffer.h"
#include "src/developer/debug/zxdb/expr/vector_register_format.h"
namespace debug_ipc {
struct Register;
}
namespace zxdb {
// Struct meant to configure how the FilterRegister/FormatRegister calls will
// behave.
struct FormatRegisterOptions {
// What arch this FormatRegisters call belongs to.
debug_ipc::Arch arch = debug_ipc::Arch::kUnknown;
// Whether to print extra information about the registers.
bool extended = false;
// VectorRegisterFormat vector_format = VectorRegisterFormat::kUnsigned8;
VectorRegisterFormat vector_format = VectorRegisterFormat::kFloat;
};
// Format the given registers into a console readable format.
OutputBuffer FormatRegisters(const FormatRegisterOptions& options,
const std::vector<debug_ipc::Register>& registers);
// Formats the given registers as platform-independent values/vectors.
void FormatGeneralRegisters(const std::vector<debug_ipc::Register>& registers, OutputBuffer* out);
void FormatGeneralVectorRegisters(const FormatRegisterOptions& options,
const std::vector<debug_ipc::Register>& registers,
OutputBuffer* out);
// Formats the register and returns a vector with the following information:
// - name
// - hex value
// - comment (may be empty if inapplicable).
std::vector<OutputBuffer> DescribeRegister(const debug_ipc::Register& reg,
TextForegroundColor color);
} // namespace zxdb
#endif // SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_FORMAT_REGISTER_H_