blob: c4878bfd3fd59b153e92a46ca31dbff39d95b566 [file] [log] [blame]
//===-- TraceInstructionDumper.h --------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "lldb/Target/TraceCursor.h"
#ifndef LLDB_TARGET_TRACE_INSTRUCTION_DUMPER_H
#define LLDB_TARGET_TRACE_INSTRUCTION_DUMPER_H
namespace lldb_private {
/// Class used to dump the instructions of a \a TraceCursor using its current
/// state and granularity.
class TraceInstructionDumper {
public:
/// Create a instruction dumper for the cursor.
///
/// \param[in] cursor
/// The cursor whose instructions will be dumped.
///
/// \param[in] initial_index
/// Presentation index to use for referring to the current instruction
/// of the cursor. If the direction is forwards, the index will increase,
/// and if the direction is backwards, the index will decrease.
///
/// \param[in] raw
/// Dump only instruction addresses without disassembly nor symbol
/// information.
///
/// \param[in] show_tsc
/// For each instruction, print the corresponding timestamp counter if
/// available.
TraceInstructionDumper(lldb::TraceCursorUP &&cursor_up, int initial_index = 0,
bool raw = false, bool show_tsc = false);
/// Dump \a count instructions of the thread trace starting at the current
/// cursor position.
///
/// This effectively moves the cursor to the next unvisited position, so that
/// a subsequent call to this method continues where it left off.
///
/// \param[in] s
/// The stream object where the instructions are printed.
///
/// \param[in] count
/// The number of instructions to print.
void DumpInstructions(Stream &s, size_t count);
/// Indicate the dumper that no more data is available in the trace.
void SetNoMoreData();
/// \return
/// \b true if there's still more data to traverse in the trace.
bool HasMoreData();
private:
/// Move the cursor one step.
///
/// \return
/// \b true if the cursor moved.
bool TryMoveOneStep();
lldb::TraceCursorUP m_cursor_up;
int m_index;
bool m_raw;
bool m_show_tsc;
/// If \b true, all the instructions have been traversed.
bool m_no_more_data = false;
};
} // namespace lldb_private
#endif // LLDB_TARGET_TRACE_INSTRUCTION_DUMPER_H