From 49997adc883b47999a1dfdda2da55e38ef24e2ae Mon Sep 17 00:00:00 2001 From: Paul Semel Date: Sun, 1 Jul 2018 09:51:59 +0000 Subject: [llvm-readobj] Fix printing format We were printing every character, even those that weren't printable. It doesn't really make sense for this option. The string content was sticked to its address, added two spaces in between. Differential Revision: https://reviews.llvm.org/D48271 llvm-svn: 336058 --- llvm/tools/llvm-readobj/ELFDumper.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'llvm/tools/llvm-readobj') diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index 9a2be3100ac..6bf7a811e64 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -3275,6 +3275,11 @@ void GNUStyle::printProgramHeaders(const ELFO *Obj) { } } +void printAsPrintable(raw_ostream &W, StringRef S) { + for (char C : S) + W << (isprint(C) ? C : '.'); +} + template void GNUStyle::printSectionAsString(const ELFO *Obj, StringRef SectionName) { @@ -3298,8 +3303,9 @@ void GNUStyle::printSectionAsString(const ELFO *Obj, CurrentWord++; continue; } - OS << format("[%6tx]", CurrentWord - SecContent); - OS << format(" %.*s\n", WordSize, CurrentWord); + OS << format("[%6tx] ", CurrentWord - SecContent); + printAsPrintable(OS, StringRef(CurrentWord, WordSize)); + OS << '\n'; CurrentWord += WordSize + 1; } OS.flush(); @@ -4361,8 +4367,9 @@ void LLVMStyle::printSectionAsString(const ELFO *Obj, W.startLine() << "[" << to_string( format_hex_no_prefix((CurrentWord - SecContent), 6)) - << "]"; - W.startLine() << format(" %.*s\n", WordSize, CurrentWord); + << "] "; + printAsPrintable(W.startLine(), StringRef(CurrentWord, WordSize)); + W.startLine() << '\n'; CurrentWord += WordSize + 1; } } -- cgit v1.2.3