78 lines
2.5 KiB
C++
78 lines
2.5 KiB
C++
//===-- 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
|