1## Check how llvm-readobj and llvm-readelf tools dump addends of relocations. 2 3# RUN: yaml2obj --docnum=1 -DENCODE=LSB -DTYPE=SHT_RELA %s -o %t.le64.rela 4# RUN: llvm-readobj -r %t.le64.rela | FileCheck %s --check-prefix=LLVM-RELA64 5# RUN: llvm-readelf -r %t.le64.rela | FileCheck %s --check-prefix=GNU-RELA64 6 7# LLVM-RELA64: R_X86_64_NONE - 0x0{{$}} 8# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x1{{$}} 9# LLVM-RELA64-NEXT: R_X86_64_NONE - 0xFFFFFFFFFFFFFFFF{{$}} 10# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x7FFFFFFFFFFFFFFF{{$}} 11# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x8000000000000000{{$}} 12# LLVM-RELA64-NEXT: R_X86_64_NONE - 0xFFFFFFFFFFFFCFC7{{$}} 13# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x12345{{$}} 14 15## FIXME: GNU readelf prints addends differently. 16## See https://bugs.llvm.org/show_bug.cgi?id=45235. 17# GNU-RELA64: Type Symbol's Value Symbol's Name + Addend 18# GNU-RELA64-NEXT: R_X86_64_NONE 0{{$}} 19# GNU-RELA64-NEXT: R_X86_64_NONE 1{{$}} 20# GNU-RELA64-NEXT: R_X86_64_NONE ffffffffffffffff{{$}} 21# GNU-RELA64-NEXT: R_X86_64_NONE 7fffffffffffffff{{$}} 22# GNU-RELA64-NEXT: R_X86_64_NONE 8000000000000000{{$}} 23# GNU-RELA64-NEXT: R_X86_64_NONE ffffffffffffcfc7{{$}} 24# GNU-RELA64-NEXT: R_X86_64_NONE 12345{{$}} 25 26# RUN: yaml2obj --docnum=1 -DENCODE=MSB -DTYPE=SHT_RELA %s -o %t.be64.rela 27# RUN: llvm-readobj -r %t.be64.rela | FileCheck %s --check-prefix=LLVM-RELA64 28# RUN: llvm-readelf -r %t.be64.rela | FileCheck %s --check-prefix=GNU-RELA64 29 30# RUN: yaml2obj --docnum=1 -DENCODE=LSB -DTYPE=SHT_REL %s -o %t.le64.rel 31# RUN: llvm-readobj -r %t.le64.rel | FileCheck %s --check-prefix=LLVM-REL64 32# RUN: llvm-readelf -r %t.le64.rel | FileCheck %s --check-prefix=GNU-REL64 33 34# LLVM-REL64-COUNT-7: R_X86_64_NONE -{{$}} 35# LLVM-REL64-NOT: R_ 36 37# GNU-REL64: Type Symbol's Value Symbol's Name{{$}} 38# GNU-REL64-COUNT-7: R_X86_64_NONE {{$}} 39# GNU-REL64-NOT: R_ 40 41# RUN: yaml2obj --docnum=1 -DENCODE=MSB -DTYPE=SHT_REL %s -o %t.be64.rel 42# RUN: llvm-readobj -r %t.be64.rel | FileCheck %s --check-prefix=LLVM-REL64 43# RUN: llvm-readelf -r %t.be64.rel | FileCheck %s --check-prefix=GNU-REL64 44 45--- !ELF 46FileHeader: 47 Class: ELFCLASS64 48 Data: ELFDATA2[[ENCODE]] 49 Type: ET_EXEC 50 Machine: EM_X86_64 51Sections: 52 - Name: .foo 53 Type: [[TYPE]] 54 Relocations: 55## Addend == 0. 56 - Addend: 0x0 57 Type: R_X86_64_NONE 58## Addend == first positive int64/uint64 == 1. 59 - Addend: 0x1 60 Type: R_X86_64_NONE 61## Addend == first negative int64 == -1. 62 - Addend: 0xffffffffffffffff 63 Type: R_X86_64_NONE 64## Addend == max possible int64 == 0x7FFFFFFFFFFFFFFF. 65 - Addend: 0x7FFFFFFFFFFFFFFF 66 Type: R_X86_64_NONE 67## Addend == min possible int64 == 0x8000000000000000. 68 - Addend: 0x8000000000000000 69 Type: R_X86_64_NONE 70## Addend == an arbitrary negative number. 71 - Addend: 0xFFFFFFFFFFFFCFC7 ## -12345 72 Type: R_X86_64_NONE 73## Addend == an arbitrary positive number. 74 - Addend: 0x12345 75 Type: R_X86_64_NONE 76 77## Starting from here we check ELFCLASS32 objects. 78 79# RUN: yaml2obj --docnum=2 -DENCODE=LSB -DTYPE=SHT_RELA %s -o %t.le32.rela 80# RUN: llvm-readobj -r %t.le32.rela | FileCheck %s --check-prefix=LLVM-RELA32 81# RUN: llvm-readelf -r %t.le32.rela | FileCheck %s --check-prefix=GNU-RELA32 82 83# LLVM-RELA32: R_386_NONE - 0x0{{$}} 84# LLVM-RELA32-NEXT: R_386_NONE - 0x1{{$}} 85# LLVM-RELA32-NEXT: R_386_NONE - 0xFFFFFFFF{{$}} 86# LLVM-RELA32-NEXT: R_386_NONE - 0x7FFFFFFF{{$}} 87# LLVM-RELA32-NEXT: R_386_NONE - 0x80000000{{$}} 88# LLVM-RELA32-NEXT: R_386_NONE - 0xFFFFCFC7{{$}} 89 90## FIXME: GNU readelf prints addends differently. 91## See https://bugs.llvm.org/show_bug.cgi?id=45235. 92# GNU-RELA32: Type Sym. Value Symbol's Name + Addend 93# GNU-RELA32-NEXT: R_386_NONE 0{{$}} 94# GNU-RELA32-NEXT: R_386_NONE 1{{$}} 95# GNU-RELA32-NEXT: R_386_NONE ffffffffffffffff{{$}} 96# GNU-RELA32-NEXT: R_386_NONE 7fffffff{{$}} 97# GNU-RELA32-NEXT: R_386_NONE ffffffff80000000{{$}} 98# GNU-RELA32-NEXT: R_386_NONE ffffffffffffcfc7{{$}} 99 100# RUN: yaml2obj --docnum=2 -DENCODE=MSB -DTYPE=SHT_RELA %s -o %t.be32.rela 101# RUN: llvm-readobj -r %t.be32.rela | FileCheck %s --check-prefix=LLVM-RELA32 102# RUN: llvm-readelf -r %t.be32.rela | FileCheck %s --check-prefix=GNU-RELA32 103 104# RUN: yaml2obj --docnum=2 -DENCODE=LSB -DTYPE=SHT_REL %s -o %t.le32.rel 105# RUN: llvm-readobj -r %t.le32.rel | FileCheck %s --check-prefix=LLVM-REL32 106# RUN: llvm-readelf -r %t.le32.rel | FileCheck %s --check-prefix=GNU-REL32 107 108# LLVM-REL32-COUNT-7: R_386_NONE -{{$}} 109# LLVM-REL32-NOT: R_ 110 111# GNU-REL32: Type 112# GNU-REL32-COUNT-7: R_386_NONE {{$}} 113# GNU-REL32-NOT: R_ 114 115# RUN: yaml2obj --docnum=2 -DENCODE=MSB -DTYPE=SHT_REL %s -o %t.be32.rel 116# RUN: llvm-readobj -r %t.be32.rel | FileCheck %s --check-prefix=LLVM-REL32 117# RUN: llvm-readelf -r %t.be32.rel | FileCheck %s --check-prefix=GNU-REL32 118 119--- !ELF 120FileHeader: 121 Class: ELFCLASS32 122 Data: ELFDATA2[[ENCODE]] 123 Type: ET_EXEC 124 Machine: EM_386 125Sections: 126 - Name: .foo 127 Type: [[TYPE]] 128 Relocations: 129## Addend == 0. 130 - Addend: 0x0 131 Type: R_386_NONE 132## Addend == first positive int32/uint32 == 1. 133 - Addend: 0x1 134 Type: R_386_NONE 135## Addend == first negative int32 == -1. 136 - Addend: 0xffffffff 137 Type: R_386_NONE 138## Addend == max possible int32 == 0x7FFFFFFF. 139 - Addend: 0x7FFFFFFF 140 Type: R_386_NONE 141## Addend == min possible int32 == 0x80000000. 142 - Addend: 0x80000000 143 Type: R_386_NONE 144## Addend == an arbitrary negative number. 145 - Addend: 0xFFFFCFC7 ## -12345 146 Type: R_386_NONE 147## Addend == an arbitrary positive number. 148 - Addend: 0x12345 149 Type: R_386_NONE 150