Index: llvm/test/tools/llvm-readobj/ELF/reloc-addends.test =================================================================== --- /dev/null +++ llvm/test/tools/llvm-readobj/ELF/reloc-addends.test @@ -0,0 +1,169 @@ +## Check how llvm-readobj and llvm-readelf tools dumps addends of rellocations. + +# RUN: yaml2obj --docnum=1 -D ENCODE=LSB -DTYPE=SHT_RELA %s -o %t.le64.rela +# RUN: llvm-readobj -r %t.le64.rela | FileCheck %s --check-prefix=LLVM-RELA64 --match-full-lines +# RUN: yaml2obj --docnum=1 -D ENCODE=MSB -DTYPE=SHT_RELA %s -o %t.be64.rela +# RUN: llvm-readobj -r %t.be64.rela | FileCheck %s --check-prefix=LLVM-RELA64 --match-full-lines + +# LLVM-RELA64: Relocations [ +# LLVM-RELA64-NEXT: Section (1) .foo { +# LLVM-RELA64-NEXT: 0x0 R_X86_64_NONE - 0x0 +# LLVM-RELA64-NEXT: 0x0 R_X86_64_NONE - 0x1 +# LLVM-RELA64-NEXT: 0x0 R_X86_64_NONE - 0xFFFFFFFFFFFFFFFF +# LLVM-RELA64-NEXT: 0x0 R_X86_64_NONE - 0x7FFFFFFFFFFFFFFF +# LLVM-RELA64-NEXT: 0x0 R_X86_64_NONE - 0x8000000000000000 +# LLVM-RELA64-NEXT: 0x0 R_X86_64_NONE - 0xFFFFFFFFFFFFCFC7 +# LLVM-RELA64-NEXT: } +# LLVM-RELA64-NEXT: ] + +# RUN: yaml2obj --docnum=1 -D ENCODE=LSB -DTYPE=SHT_REL %s -o %t.le64.rel +# RUN: llvm-readobj -r %t.le64.rel | FileCheck %s --check-prefix=LLVM-REL64 --match-full-lines +# RUN: yaml2obj --docnum=1 -D ENCODE=MSB -DTYPE=SHT_REL %s -o %t.be64.rel +# RUN: llvm-readobj -r %t.be64.rel | FileCheck %s --check-prefix=LLVM-REL64 --match-full-lines + +## FIXME: We either should not dump an addend or should read it from a +## destination location for a SHT_REL case. + +# LLVM-REL64: Relocations [ +# LLVM-REL64-NEXT: Section (1) .foo { +# LLVM-REL64-COUNT-6: 0x0 R_X86_64_NONE - 0x0 +# LLVM-REL64-NEXT: } +# LLVM-REL64-NEXT: ] + +## Check what llvm-readelf prints for the same objects. + +# RUN: llvm-readelf -r %t.le64.rela | FileCheck %s --check-prefix=GNU-RELA64 --match-full-lines +# RUN: llvm-readelf -r %t.be64.rela | FileCheck %s --check-prefix=GNU-RELA64 --match-full-lines + +# GNU-RELA64: Relocation section '.foo' at offset 0x40 contains 6 entries: +# GNU-RELA64-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend +# GNU-RELA64-NEXT: 0000000000000000 0000000000000000 R_X86_64_NONE 0 +# GNU-RELA64-NEXT: 0000000000000000 0000000000000000 R_X86_64_NONE 1 +## FIXME: GNU readelf prints "-1" instead of "ffffffffffffffff" +# GNU-RELA64-NEXT: 0000000000000000 0000000000000000 R_X86_64_NONE ffffffffffffffff +# GNU-RELA64-NEXT: 0000000000000000 0000000000000000 R_X86_64_NONE 7fffffffffffffff +## FIXME: GNU readelf prints "-8000000000000000" instead of "8000000000000000" +# GNU-RELA64-NEXT: 0000000000000000 0000000000000000 R_X86_64_NONE 8000000000000000 +## FIXME: GNU readelf prints "-3039" instead of "ffffffffffffcfc7" +# GNU-RELA64-NEXT: 0000000000000000 0000000000000000 R_X86_64_NONE ffffffffffffcfc7 + +# RUN: llvm-readelf -r %t.le64.rel | FileCheck %s --check-prefix=GNU-REL64 --match-full-lines +# RUN: llvm-readelf -r %t.be64.rel | FileCheck %s --check-prefix=GNU-REL64 --match-full-lines + +# GNU-REL64: Relocation section '.foo' at offset 0x40 contains 6 entries: +# GNU-REL64-NEXT: Offset Info Type Symbol's Value Symbol's Name +# GNU-REL64-6: 0000000000000000 0000000000000000 R_X86_64_NONE + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2[[ENCODE]] + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .foo + Type: [[TYPE]] + Relocations: +## Addend == 0. + - Addend: 0x0 + Type: R_X86_64_NONE +## Addend == first positive int64/uint64 == 1. + - Addend: 0x1 + Type: R_X86_64_NONE +## Addend == first negative int64 == -1. + - Addend: 0xffffffffffffffff + Type: R_X86_64_NONE +## Addend == max possible int64 == 0x7FFFFFFFFFFFFFFF. + - Addend: 0x7FFFFFFFFFFFFFFF + Type: R_X86_64_NONE +## Addend == min possible int64 == 0x8000000000000000. + - Addend: 0x8000000000000000 + Type: R_X86_64_NONE +## Addend == an arbitrary negative number. + - Addend: 0xFFFFFFFFFFFFCFC7 ## -12345 + Type: R_X86_64_NONE + +## Starting from here we check ELFCLASS32 objects. + +# RUN: yaml2obj --docnum=2 -D ENCODE=LSB -DTYPE=SHT_RELA %s -o %t.le32.rela +# RUN: llvm-readobj -r %t.le32.rela | FileCheck %s --check-prefix=LLVM-RELA32 --match-full-lines +# RUN: yaml2obj --docnum=2 -D ENCODE=MSB -DTYPE=SHT_RELA %s -o %t.be32.rela +# RUN: llvm-readobj -r %t.be32.rela | FileCheck %s --check-prefix=LLVM-RELA32 --match-full-lines + +# LLVM-RELA32: Relocations [ +# LLVM-RELA32-NEXT: Section (1) .foo { +# LLVM-RELA32-NEXT: 0x0 R_386_NONE - 0x0 +# LLVM-RELA32-NEXT: 0x0 R_386_NONE - 0x1 +# LLVM-RELA32-NEXT: 0x0 R_386_NONE - 0xFFFFFFFF +# LLVM-RELA32-NEXT: 0x0 R_386_NONE - 0x7FFFFFFF +# LLVM-RELA32-NEXT: 0x0 R_386_NONE - 0x80000000 +# LLVM-RELA32-NEXT: 0x0 R_386_NONE - 0xFFFFCFC7 +# LLVM-RELA32-NEXT: } +# LLVM-RELA32-NEXT: ] + +# RUN: yaml2obj --docnum=2 -D ENCODE=LSB -DTYPE=SHT_REL %s -o %t.le32.rel +# RUN: llvm-readobj -r %t.le32.rel | FileCheck %s --check-prefix=LLVM-REL32 --match-full-lines +# RUN: yaml2obj --docnum=2 -D ENCODE=MSB -DTYPE=SHT_REL %s -o %t.be32.rel +# RUN: llvm-readobj -r %t.be32.rel | FileCheck %s --check-prefix=LLVM-REL32 --match-full-lines + +## FIXME: We either should not dump an addend or should read it from a +## destination location for a SHT_REL case. + +# LLVM-REL32: Relocations [ +# LLVM-REL32-NEXT: Section (1) .foo { +# LLVM-REL32-COUNT-6: 0x0 R_386_NONE - 0x0 +# LLVM-REL32-NEXT: } +# LLVM-REL32-NEXT: ] + +## Check what llvm-readelf prints for the same objects. + +# RUN: llvm-readelf -r %t.le32.rela | FileCheck %s --check-prefix=GNU-RELA32 --match-full-lines +# RUN: llvm-readelf -r %t.be32.rela | FileCheck %s --check-prefix=GNU-RELA32 --match-full-lines + +# GNU-RELA32: Relocation section '.foo' at offset 0x34 contains 6 entries: +# GNU-RELA32-NEXT: Offset Info Type Sym. Value Symbol's Name + Addend +# GNU-RELA32-NEXT: 00000000 00000000 R_386_NONE 0 +# GNU-RELA32-NEXT: 00000000 00000000 R_386_NONE 1 +## FIXME: GNU readelf prints "-1" instead of "ffffffffffffffff" +# GNU-RELA32-NEXT: 00000000 00000000 R_386_NONE ffffffffffffffff +# GNU-RELA32-NEXT: 00000000 00000000 R_386_NONE 7fffffff +## FIXME: GNU readelf prints "-80000000" instead of "ffffffff80000000" +# GNU-RELA32-NEXT: 00000000 00000000 R_386_NONE ffffffff80000000 +## FIXME: GNU readelf prints "-3039" instead of "ffffffffffffcfc7" +# GNU-RELA32-NEXT: 00000000 00000000 R_386_NONE ffffffffffffcfc7 + +# RUN: llvm-readelf -r %t.le32.rel | FileCheck %s --check-prefix=GNU-REL32 --match-full-lines +# RUN: llvm-readelf -r %t.be32.rel | FileCheck %s --check-prefix=GNU-REL32 --match-full-lines + +# GNU-REL32: Relocation section '.foo' at offset 0x34 contains 6 entries: +# GNU-REL32-NEXT: Offset Info Type Sym. Value Symbol's Name +# GNU-REL32-6: 00000000 00000000 R_386_NONE + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2[[ENCODE]] + Type: ET_EXEC + Machine: EM_386 +Sections: + - Name: .foo + Type: [[TYPE]] + Relocations: +## Addend == 0. + - Addend: 0x0 + Type: R_386_NONE +## Addend == first positive int32/uint32 == 1. + - Addend: 0x1 + Type: R_386_NONE +## Addend == first negative int32 == -1. + - Addend: 0xffffffff + Type: R_386_NONE +## Addend == max possible int32 == 0x7FFFFFFF. + - Addend: 0x7FFFFFFF + Type: R_386_NONE +## Addend == min possible int32 == 0x80000000. + - Addend: 0x80000000 + Type: R_386_NONE +## Addend == an arbitrary negative number. + - Addend: 0xFFFFCFC7 ## -12345 + Type: R_386_NONE