[mips] support FK_Data_2 and FK_Data_8 to fix big-endian debug data
authorEd Maste <emaste@freebsd.org>
Mon, 3 Mar 2014 14:27:49 +0000 (14:27 +0000)
committerEd Maste <emaste@freebsd.org>
Mon, 3 Mar 2014 14:27:49 +0000 (14:27 +0000)
This fixes invalid lengths in .debug_aranges on big-endian mips64
(lengths appear to be left-shifted by 32 bits) and in .debug_loc.

Differential Revision: http://llvm-reviews.chandlerc.com/D2517

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

lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
test/MC/Mips/mips64eb-fixups.s [new file with mode: 0644]

index da332378bb1360d996ac5b7cd4e9e9d6d7802355..dfaa4db50d9f3b49dd7ba744f3dc8b83a1608304 100644 (file)
@@ -38,6 +38,7 @@ static unsigned adjustFixupValue(const MCFixup &Fixup, uint64_t Value,
   switch (Kind) {
   default:
     return 0;
+  case FK_Data_2:
   case FK_GPRel_4:
   case FK_Data_4:
   case FK_Data_8:
@@ -140,12 +141,15 @@ public:
     unsigned FullSize;
 
     switch ((unsigned)Kind) {
+    case FK_Data_2:
     case Mips::fixup_Mips_16:
       FullSize = 2;
       break;
+    case FK_Data_8:
     case Mips::fixup_Mips_64:
       FullSize = 8;
       break;
+    case FK_Data_4:
     default:
       FullSize = 4;
       break;
diff --git a/test/MC/Mips/mips64eb-fixups.s b/test/MC/Mips/mips64eb-fixups.s
new file mode 100644 (file)
index 0000000..1ca8b0a
--- /dev/null
@@ -0,0 +1,43 @@
+# RUN: llvm-mc -filetype=obj -triple mips64eb-unknown-freebsd %s -o - | llvm-readobj -s -sd | FileCheck %s
+
+        .section        .fixups,"",@progbits
+        .byte   0xff
+$diff0 = ($loc1)-($loc0)
+        .2byte   ($diff0)
+
+        .byte   0xff
+$diff1 = ($loc2)-($loc0)
+        .4byte  ($diff1)
+
+        .byte   0xff
+$diff2 = ($loc3)-($loc0)
+        .8byte  ($diff2)
+        .byte   0xff
+
+$loc0:
+        .byte   0xee
+$loc1:
+        .byte   0xdd
+$loc2:
+        .byte   0xcc
+$loc3:
+
+# CHECK:       AddressSize: 64bit
+# CHECK:         Section {
+# CHECK:           Name: .fixups (12)
+# CHECK-NEXT:      Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT:      Flags [ (0x0)
+# CHECK-NEXT:      ]
+# CHECK-NEXT:      Address: 0x0
+# CHECK-NEXT:      Offset: 0x40
+# CHECK-NEXT:      Size: 21
+# CHECK-NEXT:      Link: 0
+# CHECK-NEXT:      Info: 0
+# CHECK-NEXT:      AddressAlignment: 1
+# CHECK-NEXT:      EntrySize: 0
+# CHECK-NEXT:      SectionData (
+# CHECK-NEXT:        0000: FF0001FF 00000002 FF000000 00000000  |................|
+# CHECK-NEXT:        0010: 03FFEEDD CC                          |.....|
+# CHECK-NEXT:      )
+# CHECK-NEXT:    }
+# CHECK:       ]