1//===-- DumpDataExtractor.h -------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_CORE_DUMPDATAEXTRACTOR_H
10#define LLDB_CORE_DUMPDATAEXTRACTOR_H
11
12#include "lldb/lldb-enumerations.h"
13#include "lldb/lldb-types.h"
14
15#include <stddef.h>
16#include <stdint.h>
17
18namespace lldb_private {
19class DataExtractor;
20class ExecutionContextScope;
21class Stream;
22
23/// Dumps \a item_count objects into the stream \a s.
24///
25/// Dumps \a item_count objects using \a item_format, each of which
26/// are \a item_byte_size bytes long starting at offset \a offset
27/// bytes into the contained data, into the stream \a s. \a
28/// num_per_line objects will be dumped on each line before a new
29/// line will be output. If \a base_addr is a valid address, then
30/// each new line of output will be preceded by the address value
31/// plus appropriate offset, and a colon and space. Bitfield values
32/// can be dumped by calling this function multiple times with the
33/// same start offset, format and size, yet differing \a
34/// item_bit_size and \a item_bit_offset values.
35///
36/// \param[in] s
37/// The stream to dump the output to. This value can not be nullptr.
38///
39/// \param[in] offset
40/// The offset into the data at which to start dumping.
41///
42/// \param[in] item_format
43/// The format to use when dumping each item.
44///
45/// \param[in] item_byte_size
46/// The byte size of each item.
47///
48/// \param[in] item_count
49/// The number of items to dump.
50///
51/// \param[in] num_per_line
52/// The number of items to display on each line.
53///
54/// \param[in] base_addr
55/// The base address that gets added to the offset displayed on
56/// each line if the value is valid. Is \a base_addr is
57/// LLDB_INVALID_ADDRESS then no address values will be prepended
58/// to any lines.
59///
60/// \param[in] item_bit_size
61/// If the value to display is a bitfield, this value should
62/// be the number of bits that the bitfield item has within the
63/// item's byte size value. This function will need to be called
64/// multiple times with identical \a offset and \a item_byte_size
65/// values in order to display multiple bitfield values that
66/// exist within the same integer value. If the items being
67/// displayed are not bitfields, this value should be zero.
68///
69/// \param[in] item_bit_offset
70/// If the value to display is a bitfield, this value should
71/// be the offset in bits, or shift right amount, that the
72/// bitfield item occupies within the item's byte size value.
73/// This function will need to be called multiple times with
74/// identical \a offset and \a item_byte_size values in order
75/// to display multiple bitfield values that exist within the
76/// same integer value. If the items being displayed are not
77/// bitfields, this value should be zero.
78///
79/// \return
80/// The offset at which dumping ended.
81lldb::offset_t
82DumpDataExtractor(const DataExtractor &DE, Stream *s, lldb::offset_t offset,
83 lldb::Format item_format, size_t item_byte_size,
84 size_t item_count, size_t num_per_line, uint64_t base_addr,
85 uint32_t item_bit_size, uint32_t item_bit_offset,
86 ExecutionContextScope *exe_scope = nullptr);
87
88void DumpHexBytes(Stream *s, const void *src, size_t src_len,
89 uint32_t bytes_per_line, lldb::addr_t base_addr);
90}
91
92#endif
93