From 1826197dbda5c76eccdec9029f7854e5ed57e6d8 Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Wed, 13 May 2015 18:51:49 +0000 Subject: [PATCH] [llvm-bcanalyzer] Add -show-binary-blobs option. -dump mode normally omits blob data that contains unprintable characters. When -show-binary-blobs is passed, it unilaterally escapes all blobs, allowing those with binary data to be displayed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237276 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp | 29 +++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp index 8aa5697f6ad..58b02be7b92 100644 --- a/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp +++ b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp @@ -66,6 +66,10 @@ static cl::opt BlockInfoFilename("block-info", cl::desc("Use the BLOCK_INFO from the given file")); +static cl::opt + ShowBinaryBlobs("show-binary-blobs", + cl::desc("Print binary blobs using hex escapes")); + namespace { /// CurStreamTypeType - A type for CurStreamType @@ -460,17 +464,22 @@ static bool ParseBlock(BitstreamCursor &Stream, unsigned BlockID, if (Blob.data()) { outs() << " blob data = "; - bool BlobIsPrintable = true; - for (unsigned i = 0, e = Blob.size(); i != e; ++i) - if (!isprint(static_cast(Blob[i]))) { - BlobIsPrintable = false; - break; - } + if (ShowBinaryBlobs) { + outs() << "'"; + outs().write_escaped(Blob, /*hex=*/true) << "'"; + } else { + bool BlobIsPrintable = true; + for (unsigned i = 0, e = Blob.size(); i != e; ++i) + if (!isprint(static_cast(Blob[i]))) { + BlobIsPrintable = false; + break; + } - if (BlobIsPrintable) - outs() << "'" << Blob << "'"; - else - outs() << "unprintable, " << Blob.size() << " bytes."; + if (BlobIsPrintable) + outs() << "'" << Blob << "'"; + else + outs() << "unprintable, " << Blob.size() << " bytes."; + } } outs() << "\n";