diff options
author | Ed Maste <emaste@freebsd.org> | 2014-03-03 14:27:49 +0000 |
---|---|---|
committer | Ed Maste <emaste@freebsd.org> | 2014-03-03 14:27:49 +0000 |
commit | c1e634da0c4015d9db8cbd893905b8015f7999d2 (patch) | |
tree | a0732153ffb82ba37bcaffdcaa824d8b18ca2ac1 | |
parent | 6e983f35b4ecfb5fb9a5a9860701e9a85a038977 (diff) | |
download | llvm-c1e634da0c4015d9db8cbd893905b8015f7999d2.tar.gz llvm-c1e634da0c4015d9db8cbd893905b8015f7999d2.tar.bz2 llvm-c1e634da0c4015d9db8cbd893905b8015f7999d2.tar.xz |
[mips] support FK_Data_2 and FK_Data_8 to fix big-endian debug data
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
-rw-r--r-- | lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp | 4 | ||||
-rw-r--r-- | test/MC/Mips/mips64eb-fixups.s | 43 |
2 files changed, 47 insertions, 0 deletions
diff --git a/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp b/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp index da332378bb..dfaa4db50d 100644 --- a/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp +++ b/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp @@ -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 index 0000000000..1ca8b0ae52 --- /dev/null +++ b/test/MC/Mips/mips64eb-fixups.s @@ -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: ] |