OSDN Git Service

[DebugInfo] Dump CIE augmentation data as a list of hex bytes
authorSimon Atanasyan <simon@atanasyan.com>
Tue, 1 Mar 2016 18:38:05 +0000 (18:38 +0000)
committerSimon Atanasyan <simon@atanasyan.com>
Tue, 1 Mar 2016 18:38:05 +0000 (18:38 +0000)
CIE augmentation data might contain non-printable characters.
The patch prints the data as a list of hex bytes.

Differential Revision: http://reviews.llvm.org/D17759

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@262361 91177308-0d34-0410-b5e6-96231b3b80d8

lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
test/tools/llvm-objdump/Inputs/eh_frame.elf-mipsel [new file with mode: 0755]
test/tools/llvm-objdump/eh_frame-arm64.test
test/tools/llvm-objdump/eh_frame-mipsel.test [new file with mode: 0644]

index 6d59a8e..3d2b9e9 100644 (file)
@@ -12,6 +12,7 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/StringExtras.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/DataTypes.h"
 #include "llvm/Support/Dwarf.h"
@@ -244,8 +245,12 @@ public:
                  (int32_t)DataAlignmentFactor);
     OS << format("  Return address column: %d\n",
                  (int32_t)ReturnAddressRegister);
-    if (!AugmentationData.empty())
-      OS << "  Augmentation data:     " << AugmentationData << "\n";
+    if (!AugmentationData.empty()) {
+      OS << "  Augmentation data:    ";
+      for (uint8_t Byte : AugmentationData)
+        OS << ' ' << hexdigit(Byte >> 4) << hexdigit(Byte & 0xf);
+      OS << "\n";
+    }
     OS << "\n";
   }
 
diff --git a/test/tools/llvm-objdump/Inputs/eh_frame.elf-mipsel b/test/tools/llvm-objdump/Inputs/eh_frame.elf-mipsel
new file mode 100755 (executable)
index 0000000..64a5440
Binary files /dev/null and b/test/tools/llvm-objdump/Inputs/eh_frame.elf-mipsel differ
index adfd4cc..f6d2db8 100644 (file)
@@ -8,7 +8,7 @@
 # CHECK:   Code alignment factor: 1
 # CHECK:   Data alignment factor: -8
 # CHECK:   Return address column: 30
-# CHECK:   Augmentation data:
+# CHECK:   Augmentation data:     10
 
 # CHECK:   DW_CFA_def_cfa: reg31 +0
 
diff --git a/test/tools/llvm-objdump/eh_frame-mipsel.test b/test/tools/llvm-objdump/eh_frame-mipsel.test
new file mode 100644 (file)
index 0000000..0592c8c
--- /dev/null
@@ -0,0 +1,27 @@
+# RUN: llvm-objdump -dwarf=frames %p/Inputs/eh_frame.elf-mipsel | FileCheck %s
+
+# CHECK: .eh_frame contents:
+
+# CHECK: 00000000 00000018 ffffffff CIE
+# CHECK:   Version:               1
+# CHECK:   Augmentation:          "zPLR"
+# CHECK:   Code alignment factor: 1
+# CHECK:   Data alignment factor: -4
+# CHECK:   Return address column: 31
+# CHECK:   Augmentation data:     80 90 0B 41 00 00 0B
+
+# CHECK:   DW_CFA_def_cfa: reg29 +0
+
+# CHECK: 0000001c 00000018 00000020 FDE cie=00000020 pc=00400890...004008dc
+# CHECK:   DW_CFA_advance_loc: 4
+# CHECK:   DW_CFA_def_cfa_offset: +24
+# CHECK:   DW_CFA_advance_loc: 4
+# CHECK:   DW_CFA_offset: reg31 -4
+# CHECK:   DW_CFA_nop:
+
+# CHECK: 00000038 00000000 ffffffff CIE
+# CHECK:   Version:               0
+# CHECK:   Augmentation:          ""
+# CHECK:   Code alignment factor: 0
+# CHECK:   Data alignment factor: 0
+# CHECK:   Return address column: 0