[llvm] r198848 - llvm-readobj: address review comments for ARM EHABI printing

Saleem Abdulrasool compnerd at compnerd.org
Wed Jan 8 20:31:18 PST 2014


Author: compnerd
Date: Wed Jan  8 22:31:18 2014
New Revision: 198848

URL: http://llvm.org/viewvc/llvm-project?rev=198848&view=rev
Log:
llvm-readobj: address review comments for ARM EHABI printing

Rename bytecode to opcodes to make it more clear.  Change an impossible case to
llvm_unreachable instead.  Avoid allocation of a buffer by modifying the
PrintOpcodes iteration.

Modified:
    llvm/trunk/test/tools/llvm-readobj/ARM/unwind.s
    llvm/trunk/tools/llvm-readobj/ARMEHABIPrinter.h

Modified: llvm/trunk/test/tools/llvm-readobj/ARM/unwind.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/ARM/unwind.s?rev=198848&r1=198847&r2=198848&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/ARM/unwind.s (original)
+++ llvm/trunk/test/tools/llvm-readobj/ARM/unwind.s Wed Jan  8 22:31:18 2014
@@ -91,10 +91,10 @@ function2:
 @ CHECK:         FunctionName: __personality
 @ CHECK:         Model: Compact (Inline)
 @ CHECK:         PersonalityIndex: 0
-@ CHECK:         ByteCode [
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
+@ CHECK:         Opcodes [
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
 @ CHECK:         ]
 @ CHECK:       }
 @ CHECK:     ]
@@ -107,10 +107,10 @@ function2:
 @ CHECK:         FunctionName: personality0
 @ CHECK:         Model: Compact (Inline)
 @ CHECK:         PersonalityIndex: 0
-@ CHECK:         ByteCode [
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
+@ CHECK:         Opcodes [
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
 @ CHECK:         ]
 @ CHECK:       }
 @ CHECK:     ]
@@ -125,13 +125,13 @@ function2:
 @ CHECK:         TableEntryOffset: 0x0
 @ CHECK:         Model: Compact
 @ CHECK:         PersonalityIndex: 1
-@ CHECK:         ByteCode [
-@ CHECK:           Instruction: 0xB1
-@ CHECK:           Instruction: 0xF
-@ CHECK:           Instruction: 0xA7
-@ CHECK:           Instruction: 0x3F
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
+@ CHECK:         Opcodes [
+@ CHECK:           Opcode: 0xB1
+@ CHECK:           Opcode: 0xF
+@ CHECK:           Opcode: 0xA7
+@ CHECK:           Opcode: 0x3F
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
 @ CHECK:         ]
 @ CHECK:       }
 @ CHECK:     ]
@@ -157,10 +157,10 @@ function2:
 @ CHECK:         FunctionName: opcodes
 @ CHECK:         Model: Compact (Inline)
 @ CHECK:         PersonalityIndex: 0
-@ CHECK:         ByteCode [
-@ CHECK:           Instruction: 0xC9
-@ CHECK:           Instruction: 0x84
-@ CHECK:           Instruction: 0xB0
+@ CHECK:         Opcodes [
+@ CHECK:           Opcode: 0xC9
+@ CHECK:           Opcode: 0x84
+@ CHECK:           Opcode: 0xB0
 @ CHECK:         ]
 @ CHECK:       }
 @ CHECK:     ]
@@ -173,10 +173,10 @@ function2:
 @ CHECK:         FunctionName: function0
 @ CHECK:         Model: Compact (Inline)
 @ CHECK:         PersonalityIndex: 0
-@ CHECK:         ByteCode [
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
+@ CHECK:         Opcodes [
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
 @ CHECK:         ]
 @ CHECK:       }
 @ CHECK:       Entry {
@@ -191,10 +191,10 @@ function2:
 @ CHECK:         FunctionName: function2
 @ CHECK:         Model: Compact (Inline)
 @ CHECK:         PersonalityIndex: 0
-@ CHECK:         ByteCode [
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
-@ CHECK:           Instruction: 0xB0
+@ CHECK:         Opcodes [
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
+@ CHECK:           Opcode: 0xB0
 @ CHECK:         ]
 @ CHECK:       }
 @ CHECK:     ]

Modified: llvm/trunk/tools/llvm-readobj/ARMEHABIPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ARMEHABIPrinter.h?rev=198848&r1=198847&r2=198848&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/ARMEHABIPrinter.h (original)
+++ llvm/trunk/tools/llvm-readobj/ARMEHABIPrinter.h Wed Jan  8 22:31:18 2014
@@ -49,7 +49,7 @@ class PrinterContext {
   void PrintIndexTable(unsigned SectionIndex, const Elf_Shdr *IT) const;
   void PrintExceptionTable(const Elf_Shdr *IT, const Elf_Shdr *EHT,
                            uint64_t TableEntryOffset) const;
-  void PrintByteCode(const ArrayRef<uint8_t> ByteCode) const;
+  void PrintOpcodes(const uint8_t *Entry, size_t Length, off_t Offset) const;
 
 public:
   PrinterContext(StreamWriter &Writer, const object::ELFFile<ET> *File)
@@ -148,22 +148,13 @@ void PrinterContext<ET>::PrintExceptionT
 
     switch (PersonalityIndex) {
     case AEABI_UNWIND_CPP_PR0:
-      PrintByteCode(Contents->slice(TableEntryOffset + 1, 3));
+      llvm_unreachable("Personality 0 should be compact inline!");
       break;
     case AEABI_UNWIND_CPP_PR1:
     case AEABI_UNWIND_CPP_PR2:
       unsigned AdditionalWords = (Word & 0x00ff0000) >> 16;
-
-      SmallVector<uint8_t, 10> ByteCode;
-      ByteCode.reserve(2 + 4 * AdditionalWords);
-
-      for (unsigned WI = 1, WE = AdditionalWords; WI <= WE; ++WI)
-        ByteCode.append(Contents->data() + TableEntryOffset + 4 * WI,
-                        Contents->data() + TableEntryOffset + 4 * WI + 4);
-      ByteCode.append(Contents->data() + TableEntryOffset,
-                      Contents->data() + TableEntryOffset + 2);
-
-      PrintByteCode(ArrayRef<uint8_t>(ByteCode.begin(), ByteCode.end()));
+      PrintOpcodes(Contents->data() + TableEntryOffset, 2 + 4 * AdditionalWords,
+                   2);
       break;
     }
   } else {
@@ -177,10 +168,11 @@ void PrinterContext<ET>::PrintExceptionT
 }
 
 template <typename ET>
-void PrinterContext<ET>::PrintByteCode(const ArrayRef<uint8_t> ByteCode) const {
-  ListScope BC(SW, "ByteCode");
-  for (unsigned BCI = 0, BCE = ByteCode.size(); BCI != BCE; ++BCI)
-    SW.printHex("Instruction", ByteCode[BCE - BCI - 1]);
+void PrinterContext<ET>::PrintOpcodes(const uint8_t *Entry,
+                                      size_t Length, off_t Offset) const {
+  ListScope OCC(SW, "Opcodes");
+  for (unsigned OCI = Offset; OCI < Length + Offset; OCI++)
+    SW.printHex("Opcode", Entry[OCI ^ 0x3]);
 }
 
 template <typename ET>
@@ -234,7 +226,7 @@ void PrinterContext<ET>::PrintIndexTable
       unsigned PersonalityIndex = (Word1 & 0x0f000000) >> 24;
       SW.printNumber("PersonalityIndex", PersonalityIndex);
 
-      PrintByteCode(Contents->slice(Entry * IndexTableEntrySize + 4, 3));
+      PrintOpcodes(Contents->data() + Entry * IndexTableEntrySize + 4, 3, 1);
     } else {
       const Elf_Shdr *EHT =
         FindExceptionTable(SectionIndex, Entry * IndexTableEntrySize + 4);





More information about the llvm-commits mailing list