1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00

[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

llvm-svn: 202716
This commit is contained in:
Ed Maste 2014-03-03 14:27:49 +00:00
parent 6351c4738a
commit 1644c2608f
2 changed files with 47 additions and 0 deletions

View 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;

View File

@ -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: ]