summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/StreamWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-readobj/StreamWriter.cpp')
-rw-r--r--llvm/tools/llvm-readobj/StreamWriter.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/llvm/tools/llvm-readobj/StreamWriter.cpp b/llvm/tools/llvm-readobj/StreamWriter.cpp
index 390b05e358d..871811233a6 100644
--- a/llvm/tools/llvm-readobj/StreamWriter.cpp
+++ b/llvm/tools/llvm-readobj/StreamWriter.cpp
@@ -8,22 +8,23 @@ using namespace llvm::support;
namespace llvm {
raw_ostream &operator<<(raw_ostream &OS, const HexNumber& Value) {
- OS << "0x" << to_hexString(Value.Value);
- return OS;
-}
+ uint64_t N = Value.Value;
+ // Zero is a special case.
+ if (N == 0)
+ return OS << "0x0";
-const std::string to_hexString(uint64_t Value, bool UpperCase) {
- std::string number;
- llvm::raw_string_ostream stream(number);
- stream << format_hex_no_prefix(Value, 1, UpperCase);
- return stream.str();
-}
+ char NumberBuffer[20];
+ char *EndPtr = NumberBuffer + sizeof(NumberBuffer);
+ char *CurPtr = EndPtr;
+
+ while (N) {
+ uintptr_t X = N % 16;
+ *--CurPtr = (X < 10 ? '0' + X : 'A' + X - 10);
+ N /= 16;
+ }
-const std::string to_string(uint64_t Value) {
- std::string number;
- llvm::raw_string_ostream stream(number);
- stream << format_decimal(Value, 1);
- return stream.str();
+ OS << "0x";
+ return OS.write(CurPtr, EndPtr - CurPtr);
}
void StreamWriter::printBinaryImpl(StringRef Label, StringRef Str,
OpenPOWER on IntegriCloud