| //===-- DumpDataExtractor.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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLDB_CORE_DUMPDATAEXTRACTOR_H |
| #define LLDB_CORE_DUMPDATAEXTRACTOR_H |
| |
| #include "lldb/lldb-enumerations.h" |
| #include "lldb/lldb-types.h" |
| |
| #include <cstddef> |
| #include <cstdint> |
| |
| namespace lldb_private { |
| class DataExtractor; |
| class ExecutionContextScope; |
| class Stream; |
| |
| /// Dumps \a item_count objects into the stream \a s. |
| /// |
| /// Dumps \a item_count objects using \a item_format, each of which |
| /// are \a item_byte_size bytes long starting at offset \a offset |
| /// bytes into the contained data, into the stream \a s. \a |
| /// num_per_line objects will be dumped on each line before a new |
| /// line will be output. If \a base_addr is a valid address, then |
| /// each new line of output will be preceded by the address value |
| /// plus appropriate offset, and a colon and space. Bitfield values |
| /// can be dumped by calling this function multiple times with the |
| /// same start offset, format and size, yet differing \a |
| /// item_bit_size and \a item_bit_offset values. |
| /// |
| /// \param[in] s |
| /// The stream to dump the output to. This value can not be nullptr. |
| /// |
| /// \param[in] offset |
| /// The offset into the data at which to start dumping. |
| /// |
| /// \param[in] item_format |
| /// The format to use when dumping each item. |
| /// |
| /// \param[in] item_byte_size |
| /// The byte size of each item. |
| /// |
| /// \param[in] item_count |
| /// The number of items to dump. |
| /// |
| /// \param[in] num_per_line |
| /// The number of items to display on each line. |
| /// |
| /// \param[in] base_addr |
| /// The base address that gets added to the offset displayed on |
| /// each line if the value is valid. Is \a base_addr is |
| /// LLDB_INVALID_ADDRESS then no address values will be prepended |
| /// to any lines. |
| /// |
| /// \param[in] item_bit_size |
| /// If the value to display is a bitfield, this value should |
| /// be the number of bits that the bitfield item has within the |
| /// item's byte size value. This function will need to be called |
| /// multiple times with identical \a offset and \a item_byte_size |
| /// values in order to display multiple bitfield values that |
| /// exist within the same integer value. If the items being |
| /// displayed are not bitfields, this value should be zero. |
| /// |
| /// \param[in] item_bit_offset |
| /// If the value to display is a bitfield, this value should |
| /// be the offset in bits, or shift right amount, that the |
| /// bitfield item occupies within the item's byte size value. |
| /// This function will need to be called multiple times with |
| /// identical \a offset and \a item_byte_size values in order |
| /// to display multiple bitfield values that exist within the |
| /// same integer value. If the items being displayed are not |
| /// bitfields, this value should be zero. |
| /// |
| /// \return |
| /// The offset at which dumping ended. |
| lldb::offset_t |
| DumpDataExtractor(const DataExtractor &DE, Stream *s, lldb::offset_t offset, |
| lldb::Format item_format, size_t item_byte_size, |
| size_t item_count, size_t num_per_line, uint64_t base_addr, |
| uint32_t item_bit_size, uint32_t item_bit_offset, |
| ExecutionContextScope *exe_scope = nullptr); |
| |
| void DumpHexBytes(Stream *s, const void *src, size_t src_len, |
| uint32_t bytes_per_line, lldb::addr_t base_addr); |
| } |
| |
| #endif |