[llvm-readobj][ELF] Teach llvm-readobj to show dynamic relocation in REL format

MIPS 32-bit ABI uses REL relocation record format to save dynamic
relocations. The patch teaches llvm-readobj to show dynamic relocations
in this format.

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

llvm-svn: 258001
diff --git a/llvm/test/Object/Inputs/dyn-rel.so.elf-mips b/llvm/test/Object/Inputs/dyn-rel.so.elf-mips
new file mode 100755
index 0000000..08fe70e
--- /dev/null
+++ b/llvm/test/Object/Inputs/dyn-rel.so.elf-mips
Binary files differ
diff --git a/llvm/test/Object/dyn-rel-relocation.test b/llvm/test/Object/dyn-rel-relocation.test
new file mode 100644
index 0000000..4b528a7
--- /dev/null
+++ b/llvm/test/Object/dyn-rel-relocation.test
@@ -0,0 +1,71 @@
+// Check that 'llvm-readobj -dyn-relocations' shows dynamic relocations
+// if they have REL record format.
+
+// dyn-rel.so.elf-mips
+// % cat test.s
+//   .globl  __start
+// __start:
+//   nop
+// 
+//   .data
+//   .type  v1,@object
+//   .size  v1,4
+// v1:
+//   .word 0
+// 
+//   .globl v2
+//   .type  v2,@object
+//   .size  v2,8
+// v2:
+//   .word v2+4 # R_MIPS_32 target v2 addend 4
+//   .word v1   # R_MIPS_32 target v1 addend 0
+//
+// % llvm-mc -filetype=obj -triple=mips-unknown-linux -o test.o test.s
+// % ld  -m elf32btsmip -shared -o dyn-rel.so.elf-mips test.o
+
+RUN: llvm-readobj -relocations -dyn-relocations -expand-relocs \
+RUN:   %p/Inputs/dyn-rel.so.elf-mips | FileCheck %s
+
+// CHECK:      Relocations [
+// CHECK-NEXT:   Section (6) .rel.dyn {
+// CHECK-NEXT:     Relocation {
+// CHECK-NEXT:       Offset: 0x0
+// CHECK-NEXT:       Type: R_MIPS_NONE (0)
+// CHECK-NEXT:       Symbol: - (0)
+// CHECK-NEXT:       Addend: 0x0
+// CHECK-NEXT:     }
+// CHECK-NEXT:     Relocation {
+// CHECK-NEXT:       Offset: 0x102F8
+// CHECK-NEXT:       Type: R_MIPS_REL32 (3)
+// CHECK-NEXT:       Symbol: - (0)
+// CHECK-NEXT:       Addend: 0x0
+// CHECK-NEXT:     }
+// CHECK-NEXT:     Relocation {
+// CHECK-NEXT:       Offset: 0x102F4
+// CHECK-NEXT:       Type: R_MIPS_REL32 (3)
+// CHECK-NEXT:       Symbol: v2 (9)
+// CHECK-NEXT:       Addend: 0x0
+// CHECK-NEXT:     }
+// CHECK-NEXT:   }
+// CHECK-NEXT: ]
+
+// CHECK:      Dynamic Relocations {
+// CHECK-NEXT:   Relocation {
+// CHECK-NEXT:     Offset: 0x0
+// CHECK-NEXT:     Type: R_MIPS_NONE (0)
+// CHECK-NEXT:     Symbol: -
+// CHECK-NEXT:     Addend: 0x0
+// CHECK-NEXT:   }
+// CHECK-NEXT:   Relocation {
+// CHECK-NEXT:     Offset: 0x102F8
+// CHECK-NEXT:     Type: R_MIPS_REL32 (3)
+// CHECK-NEXT:     Symbol: -
+// CHECK-NEXT:     Addend: 0x0
+// CHECK-NEXT:   }
+// CHECK-NEXT:   Relocation {
+// CHECK-NEXT:     Offset: 0x102F4
+// CHECK-NEXT:     Type: R_MIPS_REL32 (3)
+// CHECK-NEXT:     Symbol: v2
+// CHECK-NEXT:     Addend: 0x0
+// CHECK-NEXT:   }
+// CHECK-NEXT: }