aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Core/Stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Core/Stream.h')
-rw-r--r--include/lldb/Core/Stream.h1114
1 files changed, 535 insertions, 579 deletions
diff --git a/include/lldb/Core/Stream.h b/include/lldb/Core/Stream.h
index f784069894ec..1bea3e179223 100644
--- a/include/lldb/Core/Stream.h
+++ b/include/lldb/Core/Stream.h
@@ -16,8 +16,10 @@
// C++ Includes
// Other libraries and framework includes
// Project includes
-#include "lldb/lldb-private.h"
#include "lldb/Core/Flags.h"
+#include "lldb/lldb-private.h"
+
+#include "llvm/Support/FormatVariadic.h"
namespace lldb_private {
@@ -25,590 +27,544 @@ namespace lldb_private {
/// @class Stream Stream.h "lldb/Core/Stream.h"
/// @brief A stream class that can stream formatted output to a file.
//----------------------------------------------------------------------
-class Stream
-{
+class Stream {
public:
- //------------------------------------------------------------------
- /// \a m_flags bit values.
- //------------------------------------------------------------------
- enum
- {
- eVerbose = (1 << 0), ///< If set, verbose logging is enabled
- eDebug = (1 << 1), ///< If set, debug logging is enabled
- eAddPrefix = (1 << 2), ///< Add number prefixes for binary, octal and hex when eBinary is clear
- eBinary = (1 << 3) ///< Get and put data as binary instead of as the default string mode.
- };
-
- //------------------------------------------------------------------
- /// Construct with flags and address size and byte order.
- ///
- /// Construct with dump flags \a flags and the default address
- /// size. \a flags can be any of the above enumeration logical OR'ed
- /// together.
- //------------------------------------------------------------------
- Stream (uint32_t flags,
- uint32_t addr_size,
- lldb::ByteOrder byte_order);
-
- //------------------------------------------------------------------
- /// Construct a default Stream, not binary, host byte order and
- /// host addr size.
- ///
- //------------------------------------------------------------------
- Stream ();
-
- //------------------------------------------------------------------
- /// Destructor
- //------------------------------------------------------------------
- virtual
- ~Stream ();
-
- //------------------------------------------------------------------
- // Subclasses must override these methods
- //------------------------------------------------------------------
-
- //------------------------------------------------------------------
- /// Flush the stream.
- ///
- /// Subclasses should flush the stream to make any output appear
- /// if the stream has any buffering.
- //------------------------------------------------------------------
- virtual void
- Flush () = 0;
-
- //------------------------------------------------------------------
- /// Output character bytes to the stream.
- ///
- /// Appends \a src_len characters from the buffer \a src to the
- /// stream.
- ///
- /// @param[in] src
- /// A buffer containing at least \a src_len bytes of data.
- ///
- /// @param[in] src_len
- /// A number of bytes to append to the stream.
- ///
- /// @return
- /// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
- virtual size_t
- Write (const void *src, size_t src_len) = 0;
-
- //------------------------------------------------------------------
- // Member functions
- //------------------------------------------------------------------
- size_t
- PutChar (char ch);
-
- //------------------------------------------------------------------
- /// Set the byte_order value.
- ///
- /// Sets the byte order of the data to extract. Extracted values
- /// will be swapped if necessary when decoding.
- ///
- /// @param[in] byte_order
- /// The byte order value to use when extracting data.
- ///
- /// @return
- /// The old byte order value.
- //------------------------------------------------------------------
- lldb::ByteOrder
- SetByteOrder (lldb::ByteOrder byte_order);
-
- //------------------------------------------------------------------
- /// Format a C string from a printf style format and variable
- /// arguments and encode and append the resulting C string as hex
- /// bytes.
- ///
- /// @param[in] format
- /// A printf style format string.
- ///
- /// @param[in] ...
- /// Any additional arguments needed for the printf format string.
- ///
- /// @return
- /// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
- size_t
- PrintfAsRawHex8 (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-
- //------------------------------------------------------------------
- /// Format a C string from a printf style format and variable
- /// arguments and encode and append the resulting C string as hex
- /// bytes.
- ///
- /// @param[in] format
- /// A printf style format string.
- ///
- /// @param[in] ...
- /// Any additional arguments needed for the printf format string.
- ///
- /// @return
- /// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
- size_t
- PutHex8 (uint8_t uvalue);
-
- size_t
- PutNHex8 (size_t n, uint8_t uvalue);
-
- size_t
- PutHex16 (uint16_t uvalue,
- lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
-
- size_t
- PutHex32 (uint32_t uvalue,
- lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
-
- size_t
- PutHex64 (uint64_t uvalue,
- lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
-
- size_t
- PutMaxHex64 (uint64_t uvalue,
- size_t byte_size,
- lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
- size_t
- PutFloat (float f,
- lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
-
- size_t
- PutDouble (double d,
- lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
-
- size_t
- PutLongDouble (long double ld,
+ //------------------------------------------------------------------
+ /// \a m_flags bit values.
+ //------------------------------------------------------------------
+ enum {
+ eVerbose = (1 << 0), ///< If set, verbose logging is enabled
+ eDebug = (1 << 1), ///< If set, debug logging is enabled
+ eAddPrefix = (1 << 2), ///< Add number prefixes for binary, octal and hex
+ ///when eBinary is clear
+ eBinary = (1 << 3) ///< Get and put data as binary instead of as the default
+ ///string mode.
+ };
+
+ //------------------------------------------------------------------
+ /// Construct with flags and address size and byte order.
+ ///
+ /// Construct with dump flags \a flags and the default address
+ /// size. \a flags can be any of the above enumeration logical OR'ed
+ /// together.
+ //------------------------------------------------------------------
+ Stream(uint32_t flags, uint32_t addr_size, lldb::ByteOrder byte_order);
+
+ //------------------------------------------------------------------
+ /// Construct a default Stream, not binary, host byte order and
+ /// host addr size.
+ ///
+ //------------------------------------------------------------------
+ Stream();
+
+ //------------------------------------------------------------------
+ /// Destructor
+ //------------------------------------------------------------------
+ virtual ~Stream();
+
+ //------------------------------------------------------------------
+ // Subclasses must override these methods
+ //------------------------------------------------------------------
+
+ //------------------------------------------------------------------
+ /// Flush the stream.
+ ///
+ /// Subclasses should flush the stream to make any output appear
+ /// if the stream has any buffering.
+ //------------------------------------------------------------------
+ virtual void Flush() = 0;
+
+ //------------------------------------------------------------------
+ /// Output character bytes to the stream.
+ ///
+ /// Appends \a src_len characters from the buffer \a src to the
+ /// stream.
+ ///
+ /// @param[in] src
+ /// A buffer containing at least \a src_len bytes of data.
+ ///
+ /// @param[in] src_len
+ /// A number of bytes to append to the stream.
+ ///
+ /// @return
+ /// The number of bytes that were appended to the stream.
+ //------------------------------------------------------------------
+ virtual size_t Write(const void *src, size_t src_len) = 0;
+
+ //------------------------------------------------------------------
+ // Member functions
+ //------------------------------------------------------------------
+ size_t PutChar(char ch);
+
+ //------------------------------------------------------------------
+ /// Set the byte_order value.
+ ///
+ /// Sets the byte order of the data to extract. Extracted values
+ /// will be swapped if necessary when decoding.
+ ///
+ /// @param[in] byte_order
+ /// The byte order value to use when extracting data.
+ ///
+ /// @return
+ /// The old byte order value.
+ //------------------------------------------------------------------
+ lldb::ByteOrder SetByteOrder(lldb::ByteOrder byte_order);
+
+ //------------------------------------------------------------------
+ /// Format a C string from a printf style format and variable
+ /// arguments and encode and append the resulting C string as hex
+ /// bytes.
+ ///
+ /// @param[in] format
+ /// A printf style format string.
+ ///
+ /// @param[in] ...
+ /// Any additional arguments needed for the printf format string.
+ ///
+ /// @return
+ /// The number of bytes that were appended to the stream.
+ //------------------------------------------------------------------
+ size_t PrintfAsRawHex8(const char *format, ...)
+ __attribute__((__format__(__printf__, 2, 3)));
+
+ //------------------------------------------------------------------
+ /// Format a C string from a printf style format and variable
+ /// arguments and encode and append the resulting C string as hex
+ /// bytes.
+ ///
+ /// @param[in] format
+ /// A printf style format string.
+ ///
+ /// @param[in] ...
+ /// Any additional arguments needed for the printf format string.
+ ///
+ /// @return
+ /// The number of bytes that were appended to the stream.
+ //------------------------------------------------------------------
+ size_t PutHex8(uint8_t uvalue);
+
+ size_t PutNHex8(size_t n, uint8_t uvalue);
+
+ size_t PutHex16(uint16_t uvalue,
+ lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+ size_t PutHex32(uint32_t uvalue,
+ lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+ size_t PutHex64(uint64_t uvalue,
+ lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+ size_t PutMaxHex64(uint64_t uvalue, size_t byte_size,
+ lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+ size_t PutFloat(float f,
+ lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+ size_t PutDouble(double d,
lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
- size_t
- PutPointer (void *ptr);
-
- // Append \a src_len bytes from \a src to the stream as hex characters
- // (two ascii characters per byte of input data)
- size_t
- PutBytesAsRawHex8 (const void *src,
- size_t src_len,
- lldb::ByteOrder src_byte_order = lldb::eByteOrderInvalid,
- lldb::ByteOrder dst_byte_order = lldb::eByteOrderInvalid);
-
- // Append \a src_len bytes from \a s to the stream as binary data.
- size_t
- PutRawBytes (const void *s,
- size_t src_len,
- lldb::ByteOrder src_byte_order = lldb::eByteOrderInvalid,
- lldb::ByteOrder dst_byte_order = lldb::eByteOrderInvalid);
-
- size_t
- PutCStringAsRawHex8 (const char *s);
-
- //------------------------------------------------------------------
- /// Output a NULL terminated C string \a cstr to the stream \a s.
- ///
- /// @param[in] cstr
- /// A NULL terminated C string.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (const char *cstr);
-
- //------------------------------------------------------------------
- /// Output a pointer value \a p to the stream \a s.
- ///
- /// @param[in] p
- /// A void pointer.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (const void *p);
-
- //------------------------------------------------------------------
- /// Output a character \a ch to the stream \a s.
- ///
- /// @param[in] ch
- /// A printable character value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (char ch);
-
- //------------------------------------------------------------------
- /// Output a uint8_t \a uval to the stream \a s.
- ///
- /// @param[in] uval
- /// A uint8_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (uint8_t uval);
-
- //------------------------------------------------------------------
- /// Output a uint16_t \a uval to the stream \a s.
- ///
- /// @param[in] uval
- /// A uint16_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (uint16_t uval);
-
- //------------------------------------------------------------------
- /// Output a uint32_t \a uval to the stream \a s.
- ///
- /// @param[in] uval
- /// A uint32_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (uint32_t uval);
-
- //------------------------------------------------------------------
- /// Output a uint64_t \a uval to the stream \a s.
- ///
- /// @param[in] uval
- /// A uint64_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (uint64_t uval);
-
- //------------------------------------------------------------------
- /// Output a int8_t \a sval to the stream \a s.
- ///
- /// @param[in] sval
- /// A int8_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (int8_t sval);
-
- //------------------------------------------------------------------
- /// Output a int16_t \a sval to the stream \a s.
- ///
- /// @param[in] sval
- /// A int16_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (int16_t sval);
-
- //------------------------------------------------------------------
- /// Output a int32_t \a sval to the stream \a s.
- ///
- /// @param[in] sval
- /// A int32_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (int32_t sval);
-
- //------------------------------------------------------------------
- /// Output a int64_t \a sval to the stream \a s.
- ///
- /// @param[in] sval
- /// A int64_t value.
- ///
- /// @return
- /// A reference to this class so multiple things can be streamed
- /// in one statement.
- //------------------------------------------------------------------
- Stream&
- operator<< (int64_t sval);
-
- //------------------------------------------------------------------
- /// Output an address value to this stream.
- ///
- /// Put an address \a addr out to the stream with optional \a prefix
- /// and \a suffix strings.
- ///
- /// @param[in] addr
- /// An address value.
- ///
- /// @param[in] addr_size
- /// Size in bytes of the address, used for formatting.
- ///
- /// @param[in] prefix
- /// A prefix C string. If nullptr, no prefix will be output.
- ///
- /// @param[in] suffix
- /// A suffix C string. If nullptr, no suffix will be output.
- //------------------------------------------------------------------
- void
- Address(uint64_t addr, uint32_t addr_size, const char *prefix = nullptr, const char *suffix = nullptr);
-
- //------------------------------------------------------------------
- /// Output an address range to this stream.
- ///
- /// Put an address range \a lo_addr - \a hi_addr out to the stream
- /// with optional \a prefix and \a suffix strings.
- ///
- /// @param[in] lo_addr
- /// The start address of the address range.
- ///
- /// @param[in] hi_addr
- /// The end address of the address range.
- ///
- /// @param[in] addr_size
- /// Size in bytes of the address, used for formatting.
- ///
- /// @param[in] prefix
- /// A prefix C string. If nullptr, no prefix will be output.
- ///
- /// @param[in] suffix
- /// A suffix C string. If nullptr, no suffix will be output.
- //------------------------------------------------------------------
- void
- AddressRange(uint64_t lo_addr, uint64_t hi_addr, uint32_t addr_size, const char *prefix = nullptr, const char *suffix = nullptr);
-
- //------------------------------------------------------------------
- /// Output a C string to the stream.
- ///
- /// Print a C string \a cstr to the stream.
- ///
- /// @param[in] cstr
- /// The string to be output to the stream.
- //------------------------------------------------------------------
- size_t
- PutCString (const char *cstr);
-
- //------------------------------------------------------------------
- /// Output and End of Line character to the stream.
- //------------------------------------------------------------------
- size_t
- EOL();
-
- //------------------------------------------------------------------
- /// Get the address size in bytes.
- ///
- /// @return
- /// The size of an address in bytes that is used when outputting
- /// address and pointer values to the stream.
- //------------------------------------------------------------------
- uint32_t
- GetAddressByteSize () const;
-
- //------------------------------------------------------------------
- /// Test if debug logging is enabled.
- ///
- /// @return
- // \b true if the debug flag bit is set in this stream, \b
- // false otherwise.
- //------------------------------------------------------------------
- bool
- GetDebug() const;
-
- //------------------------------------------------------------------
- /// The flags accessor.
- ///
- /// @return
- /// A reference to the Flags member variable.
- //------------------------------------------------------------------
- Flags&
- GetFlags();
-
- //------------------------------------------------------------------
- /// The flags const accessor.
- ///
- /// @return
- /// A const reference to the Flags member variable.
- //------------------------------------------------------------------
- const Flags&
- GetFlags() const;
-
- //------------------------------------------------------------------
- //// The byte order accessor.
- ////
- //// @return
- //// The byte order.
- //------------------------------------------------------------------
- lldb::ByteOrder
- GetByteOrder() const;
-
- //------------------------------------------------------------------
- /// Get the current indentation level.
- ///
- /// @return
- /// The current indentation level as an integer.
- //------------------------------------------------------------------
- int
- GetIndentLevel () const;
-
- //------------------------------------------------------------------
- /// Test if verbose logging is enabled.
- ///
- /// @return
- // \b true if the verbose flag bit is set in this stream, \b
- // false otherwise.
- //------------------------------------------------------------------
- bool
- GetVerbose() const;
-
- //------------------------------------------------------------------
- /// Indent the current line in the stream.
- ///
- /// Indent the current line using the current indentation level and
- /// print an optional string following the indentation spaces.
- ///
- /// @param[in] s
- /// A C string to print following the indentation. If nullptr, just
- /// output the indentation characters.
- //------------------------------------------------------------------
- size_t
- Indent(const char *s = nullptr);
-
- //------------------------------------------------------------------
- /// Decrement the current indentation level.
- //------------------------------------------------------------------
- void
- IndentLess (int amount = 2);
-
- //------------------------------------------------------------------
- /// Increment the current indentation level.
- //------------------------------------------------------------------
- void
- IndentMore (int amount = 2);
-
- //------------------------------------------------------------------
- /// Output an offset value.
- ///
- /// Put an offset \a uval out to the stream using the printf format
- /// in \a format.
- ///
- /// @param[in] offset
- /// The offset value.
- ///
- /// @param[in] format
- /// The printf style format to use when outputting the offset.
- //------------------------------------------------------------------
- void
- Offset (uint32_t offset, const char *format = "0x%8.8x: ");
-
- //------------------------------------------------------------------
- /// Output printf formatted output to the stream.
- ///
- /// Print some formatted output to the stream.
- ///
- /// @param[in] format
- /// A printf style format string.
- ///
- /// @param[in] ...
- /// Variable arguments that are needed for the printf style
- /// format string \a format.
- //------------------------------------------------------------------
- size_t
- Printf (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-
- size_t
- PrintfVarArg(const char *format, va_list args);
-
- //------------------------------------------------------------------
- /// Output a quoted C string value to the stream.
- ///
- /// Print a double quoted NULL terminated C string to the stream
- /// using the printf format in \a format.
- ///
- /// @param[in] cstr
- /// A NULL terminated C string value.
- ///
- /// @param[in] format
- /// The optional C string format that can be overridden.
- //------------------------------------------------------------------
- void
- QuotedCString (const char *cstr, const char *format = "\"%s\"");
-
- //------------------------------------------------------------------
- /// Set the address size in bytes.
- ///
- /// @param[in] addr_size
- /// The new size in bytes of an address to use when outputting
- /// address and pointer values.
- //------------------------------------------------------------------
- void
- SetAddressByteSize (uint32_t addr_size);
-
- //------------------------------------------------------------------
- /// Set the current indentation level.
- ///
- /// @param[in] level
- /// The new indentation level.
- //------------------------------------------------------------------
- void
- SetIndentLevel (int level);
-
- //------------------------------------------------------------------
- /// Output a SLEB128 number to the stream.
- ///
- /// Put an SLEB128 \a uval out to the stream using the printf format
- /// in \a format.
- ///
- /// @param[in] uval
- /// A uint64_t value that was extracted as a SLEB128 value.
- ///
- /// @param[in] format
- /// The optional printf format that can be overridden.
- //------------------------------------------------------------------
- size_t
- PutSLEB128 (int64_t uval);
-
- //------------------------------------------------------------------
- /// Output a ULEB128 number to the stream.
- ///
- /// Put an ULEB128 \a uval out to the stream using the printf format
- /// in \a format.
- ///
- /// @param[in] uval
- /// A uint64_t value that was extracted as a ULEB128 value.
- ///
- /// @param[in] format
- /// The optional printf format that can be overridden.
- //------------------------------------------------------------------
- size_t
- PutULEB128 (uint64_t uval);
-
- static void
- UnitTest(Stream *s);
+ size_t PutLongDouble(long double ld,
+ lldb::ByteOrder byte_order = lldb::eByteOrderInvalid);
+
+ size_t PutPointer(void *ptr);
+
+ // Append \a src_len bytes from \a src to the stream as hex characters
+ // (two ascii characters per byte of input data)
+ size_t
+ PutBytesAsRawHex8(const void *src, size_t src_len,
+ lldb::ByteOrder src_byte_order = lldb::eByteOrderInvalid,
+ lldb::ByteOrder dst_byte_order = lldb::eByteOrderInvalid);
+
+ // Append \a src_len bytes from \a s to the stream as binary data.
+ size_t PutRawBytes(const void *s, size_t src_len,
+ lldb::ByteOrder src_byte_order = lldb::eByteOrderInvalid,
+ lldb::ByteOrder dst_byte_order = lldb::eByteOrderInvalid);
+
+ size_t PutCStringAsRawHex8(const char *s);
+
+ //------------------------------------------------------------------
+ /// Output a NULL terminated C string \a cstr to the stream \a s.
+ ///
+ /// @param[in] cstr
+ /// A NULL terminated C string.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(const char *cstr);
+
+ Stream &operator<<(llvm::StringRef str);
+
+ //------------------------------------------------------------------
+ /// Output a pointer value \a p to the stream \a s.
+ ///
+ /// @param[in] p
+ /// A void pointer.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(const void *p);
+
+ //------------------------------------------------------------------
+ /// Output a character \a ch to the stream \a s.
+ ///
+ /// @param[in] ch
+ /// A printable character value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(char ch);
+
+ //------------------------------------------------------------------
+ /// Output a uint8_t \a uval to the stream \a s.
+ ///
+ /// @param[in] uval
+ /// A uint8_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(uint8_t uval);
+
+ //------------------------------------------------------------------
+ /// Output a uint16_t \a uval to the stream \a s.
+ ///
+ /// @param[in] uval
+ /// A uint16_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(uint16_t uval);
+
+ //------------------------------------------------------------------
+ /// Output a uint32_t \a uval to the stream \a s.
+ ///
+ /// @param[in] uval
+ /// A uint32_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(uint32_t uval);
+
+ //------------------------------------------------------------------
+ /// Output a uint64_t \a uval to the stream \a s.
+ ///
+ /// @param[in] uval
+ /// A uint64_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(uint64_t uval);
+
+ //------------------------------------------------------------------
+ /// Output a int8_t \a sval to the stream \a s.
+ ///
+ /// @param[in] sval
+ /// A int8_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(int8_t sval);
+
+ //------------------------------------------------------------------
+ /// Output a int16_t \a sval to the stream \a s.
+ ///
+ /// @param[in] sval
+ /// A int16_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(int16_t sval);
+
+ //------------------------------------------------------------------
+ /// Output a int32_t \a sval to the stream \a s.
+ ///
+ /// @param[in] sval
+ /// A int32_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(int32_t sval);
+
+ //------------------------------------------------------------------
+ /// Output a int64_t \a sval to the stream \a s.
+ ///
+ /// @param[in] sval
+ /// A int64_t value.
+ ///
+ /// @return
+ /// A reference to this class so multiple things can be streamed
+ /// in one statement.
+ //------------------------------------------------------------------
+ Stream &operator<<(int64_t sval);
+
+ //------------------------------------------------------------------
+ /// Output an address value to this stream.
+ ///
+ /// Put an address \a addr out to the stream with optional \a prefix
+ /// and \a suffix strings.
+ ///
+ /// @param[in] addr
+ /// An address value.
+ ///
+ /// @param[in] addr_size
+ /// Size in bytes of the address, used for formatting.
+ ///
+ /// @param[in] prefix
+ /// A prefix C string. If nullptr, no prefix will be output.
+ ///
+ /// @param[in] suffix
+ /// A suffix C string. If nullptr, no suffix will be output.
+ //------------------------------------------------------------------
+ void Address(uint64_t addr, uint32_t addr_size, const char *prefix = nullptr,
+ const char *suffix = nullptr);
+
+ //------------------------------------------------------------------
+ /// Output an address range to this stream.
+ ///
+ /// Put an address range \a lo_addr - \a hi_addr out to the stream
+ /// with optional \a prefix and \a suffix strings.
+ ///
+ /// @param[in] lo_addr
+ /// The start address of the address range.
+ ///
+ /// @param[in] hi_addr
+ /// The end address of the address range.
+ ///
+ /// @param[in] addr_size
+ /// Size in bytes of the address, used for formatting.
+ ///
+ /// @param[in] prefix
+ /// A prefix C string. If nullptr, no prefix will be output.
+ ///
+ /// @param[in] suffix
+ /// A suffix C string. If nullptr, no suffix will be output.
+ //------------------------------------------------------------------
+ void AddressRange(uint64_t lo_addr, uint64_t hi_addr, uint32_t addr_size,
+ const char *prefix = nullptr, const char *suffix = nullptr);
+
+ //------------------------------------------------------------------
+ /// Output a C string to the stream.
+ ///
+ /// Print a C string \a cstr to the stream.
+ ///
+ /// @param[in] cstr
+ /// The string to be output to the stream.
+ //------------------------------------------------------------------
+ size_t PutCString(llvm::StringRef cstr);
+
+ //------------------------------------------------------------------
+ /// Output and End of Line character to the stream.
+ //------------------------------------------------------------------
+ size_t EOL();
+
+ //------------------------------------------------------------------
+ /// Get the address size in bytes.
+ ///
+ /// @return
+ /// The size of an address in bytes that is used when outputting
+ /// address and pointer values to the stream.
+ //------------------------------------------------------------------
+ uint32_t GetAddressByteSize() const;
+
+ //------------------------------------------------------------------
+ /// Test if debug logging is enabled.
+ ///
+ /// @return
+ // \b true if the debug flag bit is set in this stream, \b
+ // false otherwise.
+ //------------------------------------------------------------------
+ bool GetDebug() const;
+
+ //------------------------------------------------------------------
+ /// The flags accessor.
+ ///
+ /// @return
+ /// A reference to the Flags member variable.
+ //------------------------------------------------------------------
+ Flags &GetFlags();
+
+ //------------------------------------------------------------------
+ /// The flags const accessor.
+ ///
+ /// @return
+ /// A const reference to the Flags member variable.
+ //------------------------------------------------------------------
+ const Flags &GetFlags() const;
+
+ //------------------------------------------------------------------
+ //// The byte order accessor.
+ ////
+ //// @return
+ //// The byte order.
+ //------------------------------------------------------------------
+ lldb::ByteOrder GetByteOrder() const;
+
+ //------------------------------------------------------------------
+ /// Get the current indentation level.
+ ///
+ /// @return
+ /// The current indentation level as an integer.
+ //------------------------------------------------------------------
+ int GetIndentLevel() const;
+
+ //------------------------------------------------------------------
+ /// Test if verbose logging is enabled.
+ ///
+ /// @return
+ // \b true if the verbose flag bit is set in this stream, \b
+ // false otherwise.
+ //------------------------------------------------------------------
+ bool GetVerbose() const;
+
+ //------------------------------------------------------------------
+ /// Indent the current line in the stream.
+ ///
+ /// Indent the current line using the current indentation level and
+ /// print an optional string following the indentation spaces.
+ ///
+ /// @param[in] s
+ /// A C string to print following the indentation. If nullptr, just
+ /// output the indentation characters.
+ //------------------------------------------------------------------
+ size_t Indent(const char *s = nullptr);
+ size_t Indent(llvm::StringRef s);
+
+ //------------------------------------------------------------------
+ /// Decrement the current indentation level.
+ //------------------------------------------------------------------
+ void IndentLess(int amount = 2);
+
+ //------------------------------------------------------------------
+ /// Increment the current indentation level.
+ //------------------------------------------------------------------
+ void IndentMore(int amount = 2);
+
+ //------------------------------------------------------------------
+ /// Output an offset value.
+ ///
+ /// Put an offset \a uval out to the stream using the printf format
+ /// in \a format.
+ ///
+ /// @param[in] offset
+ /// The offset value.
+ ///
+ /// @param[in] format
+ /// The printf style format to use when outputting the offset.
+ //------------------------------------------------------------------
+ void Offset(uint32_t offset, const char *format = "0x%8.8x: ");
+
+ //------------------------------------------------------------------
+ /// Output printf formatted output to the stream.
+ ///
+ /// Print some formatted output to the stream.
+ ///
+ /// @param[in] format
+ /// A printf style format string.
+ ///
+ /// @param[in] ...
+ /// Variable arguments that are needed for the printf style
+ /// format string \a format.
+ //------------------------------------------------------------------
+ size_t Printf(const char *format, ...) __attribute__((format(printf, 2, 3)));
+
+ size_t PrintfVarArg(const char *format, va_list args);
+
+ template <typename... Args> void Format(const char *format, Args &&... args) {
+ PutCString(llvm::formatv(format, std::forward<Args>(args)...).str());
+ }
+
+ //------------------------------------------------------------------
+ /// Output a quoted C string value to the stream.
+ ///
+ /// Print a double quoted NULL terminated C string to the stream
+ /// using the printf format in \a format.
+ ///
+ /// @param[in] cstr
+ /// A NULL terminated C string value.
+ ///
+ /// @param[in] format
+ /// The optional C string format that can be overridden.
+ //------------------------------------------------------------------
+ void QuotedCString(const char *cstr, const char *format = "\"%s\"");
+
+ //------------------------------------------------------------------
+ /// Set the address size in bytes.
+ ///
+ /// @param[in] addr_size
+ /// The new size in bytes of an address to use when outputting
+ /// address and pointer values.
+ //------------------------------------------------------------------
+ void SetAddressByteSize(uint32_t addr_size);
+
+ //------------------------------------------------------------------
+ /// Set the current indentation level.
+ ///
+ /// @param[in] level
+ /// The new indentation level.
+ //------------------------------------------------------------------
+ void SetIndentLevel(int level);
+
+ //------------------------------------------------------------------
+ /// Output a SLEB128 number to the stream.
+ ///
+ /// Put an SLEB128 \a uval out to the stream using the printf format
+ /// in \a format.
+ ///
+ /// @param[in] uval
+ /// A uint64_t value that was extracted as a SLEB128 value.
+ ///
+ /// @param[in] format
+ /// The optional printf format that can be overridden.
+ //------------------------------------------------------------------
+ size_t PutSLEB128(int64_t uval);
+
+ //------------------------------------------------------------------
+ /// Output a ULEB128 number to the stream.
+ ///
+ /// Put an ULEB128 \a uval out to the stream using the printf format
+ /// in \a format.
+ ///
+ /// @param[in] uval
+ /// A uint64_t value that was extracted as a ULEB128 value.
+ ///
+ /// @param[in] format
+ /// The optional printf format that can be overridden.
+ //------------------------------------------------------------------
+ size_t PutULEB128(uint64_t uval);
+
+ static void UnitTest(Stream *s);
protected:
- //------------------------------------------------------------------
- // Member variables
- //------------------------------------------------------------------
- Flags m_flags; ///< Dump flags.
- uint32_t m_addr_size; ///< Size of an address in bytes.
- lldb::ByteOrder m_byte_order; ///< Byte order to use when encoding scalar types.
- int m_indent_level; ///< Indention level.
-
- size_t _PutHex8 (uint8_t uvalue, bool add_prefix);
+ //------------------------------------------------------------------
+ // Member variables
+ //------------------------------------------------------------------
+ Flags m_flags; ///< Dump flags.
+ uint32_t m_addr_size; ///< Size of an address in bytes.
+ lldb::ByteOrder
+ m_byte_order; ///< Byte order to use when encoding scalar types.
+ int m_indent_level; ///< Indention level.
+
+ size_t _PutHex8(uint8_t uvalue, bool add_prefix);
};
} // namespace lldb_private
-#endif // liblldb_Stream_h_
+#endif // liblldb_Stream_h_