[llvm] 63778bc - [llvm-readobj][llvm-readelf][test] - Add a test to check how we dump relocation addends.
Georgii Rymar via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 20 03:41:47 PDT 2020
Author: Georgii Rymar
Date: 2020-03-20T13:41:32+03:00
New Revision: 63778bc653a2193717b39874e9f69dcfe3f8771c
URL: https://github.com/llvm/llvm-project/commit/63778bc653a2193717b39874e9f69dcfe3f8771c
DIFF: https://github.com/llvm/llvm-project/commit/63778bc653a2193717b39874e9f69dcfe3f8771c.diff
LOG: [llvm-readobj][llvm-readelf][test] - Add a test to check how we dump relocation addends.
Seems we do not test how we print relocation addends well.
And the behavior of dumpers does not seem to be ideal here
(and llvm-readelf does not match GNU as the test case shows).
This patch adds a test case to document the current behavior.
Differential revision: https://reviews.llvm.org/D75671
Added:
llvm/test/tools/llvm-readobj/ELF/reloc-addends.test
Modified:
Removed:
################################################################################
diff --git a/llvm/test/tools/llvm-readobj/ELF/reloc-addends.test b/llvm/test/tools/llvm-readobj/ELF/reloc-addends.test
new file mode 100644
index 000000000000..d64d2935c162
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/ELF/reloc-addends.test
@@ -0,0 +1,155 @@
+## Check how llvm-readobj and llvm-readelf tools dump addends of relocations.
+
+# RUN: yaml2obj --docnum=1 -DENCODE=LSB -DTYPE=SHT_RELA %s -o %t.le64.rela
+# RUN: llvm-readobj -r %t.le64.rela | FileCheck %s --check-prefix=LLVM-RELA64
+# RUN: llvm-readelf -r %t.le64.rela | FileCheck %s --check-prefix=GNU-RELA64
+
+# LLVM-RELA64: R_X86_64_NONE - 0x0{{$}}
+# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x1{{$}}
+# LLVM-RELA64-NEXT: R_X86_64_NONE - 0xFFFFFFFFFFFFFFFF{{$}}
+# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x7FFFFFFFFFFFFFFF{{$}}
+# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x8000000000000000{{$}}
+# LLVM-RELA64-NEXT: R_X86_64_NONE - 0xFFFFFFFFFFFFCFC7{{$}}
+# LLVM-RELA64-NEXT: R_X86_64_NONE - 0x12345{{$}}
+
+## FIXME: GNU readelf prints addends
diff erently.
+## See https://bugs.llvm.org/show_bug.cgi?id=45235.
+# GNU-RELA64: Type Symbol's Value Symbol's Name + Addend
+# GNU-RELA64-NEXT: R_X86_64_NONE 0{{$}}
+# GNU-RELA64-NEXT: R_X86_64_NONE 1{{$}}
+# GNU-RELA64-NEXT: R_X86_64_NONE ffffffffffffffff{{$}}
+# GNU-RELA64-NEXT: R_X86_64_NONE 7fffffffffffffff{{$}}
+# GNU-RELA64-NEXT: R_X86_64_NONE 8000000000000000{{$}}
+# GNU-RELA64-NEXT: R_X86_64_NONE ffffffffffffcfc7{{$}}
+# GNU-RELA64-NEXT: R_X86_64_NONE 12345{{$}}
+
+# RUN: yaml2obj --docnum=1 -DENCODE=MSB -DTYPE=SHT_RELA %s -o %t.be64.rela
+# RUN: llvm-readobj -r %t.be64.rela | FileCheck %s --check-prefix=LLVM-RELA64
+# RUN: llvm-readelf -r %t.be64.rela | FileCheck %s --check-prefix=GNU-RELA64
+
+# RUN: yaml2obj --docnum=1 -DENCODE=LSB -DTYPE=SHT_REL %s -o %t.le64.rel
+# RUN: llvm-readobj -r %t.le64.rel | FileCheck %s --check-prefix=LLVM-REL64
+# RUN: llvm-readelf -r %t.le64.rel | FileCheck %s --check-prefix=GNU-REL64
+
+## FIXME: We either should not dump an addend or should read it from a
+## destination location for a SHT_REL case.
+## See https://bugs.llvm.org/show_bug.cgi?id=44257.
+# LLVM-REL64-COUNT-7: R_X86_64_NONE - 0x0{{$}}
+# LLVM-REL64-NOT: R_
+
+# GNU-REL64: Type Symbol's Value Symbol's Name{{$}}
+# GNU-REL64-COUNT-7: R_X86_64_NONE {{$}}
+# GNU-REL64-NOT: R_
+
+# RUN: yaml2obj --docnum=1 -DENCODE=MSB -DTYPE=SHT_REL %s -o %t.be64.rel
+# RUN: llvm-readobj -r %t.be64.rel | FileCheck %s --check-prefix=LLVM-REL64
+# RUN: llvm-readelf -r %t.be64.rel | FileCheck %s --check-prefix=GNU-REL64
+
+--- !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
+## Addend == an arbitrary positive number.
+ - Addend: 0x12345
+ Type: R_X86_64_NONE
+
+## Starting from here we check ELFCLASS32 objects.
+
+# RUN: yaml2obj --docnum=2 -DENCODE=LSB -DTYPE=SHT_RELA %s -o %t.le32.rela
+# RUN: llvm-readobj -r %t.le32.rela | FileCheck %s --check-prefix=LLVM-RELA32
+# RUN: llvm-readelf -r %t.le32.rela | FileCheck %s --check-prefix=GNU-RELA32
+
+# LLVM-RELA32: R_386_NONE - 0x0{{$}}
+# LLVM-RELA32-NEXT: R_386_NONE - 0x1{{$}}
+# LLVM-RELA32-NEXT: R_386_NONE - 0xFFFFFFFF{{$}}
+# LLVM-RELA32-NEXT: R_386_NONE - 0x7FFFFFFF{{$}}
+# LLVM-RELA32-NEXT: R_386_NONE - 0x80000000{{$}}
+# LLVM-RELA32-NEXT: R_386_NONE - 0xFFFFCFC7{{$}}
+
+## FIXME: GNU readelf prints addends
diff erently.
+## See https://bugs.llvm.org/show_bug.cgi?id=45235.
+# GNU-RELA32: Type Sym. Value Symbol's Name + Addend
+# GNU-RELA32-NEXT: R_386_NONE 0{{$}}
+# GNU-RELA32-NEXT: R_386_NONE 1{{$}}
+# GNU-RELA32-NEXT: R_386_NONE ffffffffffffffff{{$}}
+# GNU-RELA32-NEXT: R_386_NONE 7fffffff{{$}}
+# GNU-RELA32-NEXT: R_386_NONE ffffffff80000000{{$}}
+# GNU-RELA32-NEXT: R_386_NONE ffffffffffffcfc7{{$}}
+
+# RUN: yaml2obj --docnum=2 -DENCODE=MSB -DTYPE=SHT_RELA %s -o %t.be32.rela
+# RUN: llvm-readobj -r %t.be32.rela | FileCheck %s --check-prefix=LLVM-RELA32
+# RUN: llvm-readelf -r %t.be32.rela | FileCheck %s --check-prefix=GNU-RELA32
+
+# RUN: yaml2obj --docnum=2 -DENCODE=LSB -DTYPE=SHT_REL %s -o %t.le32.rel
+# RUN: llvm-readobj -r %t.le32.rel | FileCheck %s --check-prefix=LLVM-REL32
+# RUN: llvm-readelf -r %t.le32.rel | FileCheck %s --check-prefix=GNU-REL32
+
+## FIXME: We either should not dump an addend or should read it from a
+## destination location for a SHT_REL case.
+## See https://bugs.llvm.org/show_bug.cgi?id=44257.
+# LLVM-REL32-COUNT-7: R_386_NONE - 0x0{{$}}
+# LLVM-REL32-NOT: R_
+
+# GNU-REL32: Type
+# GNU-REL32-COUNT-7: R_386_NONE {{$}}
+# GNU-REL32-NOT: R_
+
+# RUN: yaml2obj --docnum=2 -DENCODE=MSB -DTYPE=SHT_REL %s -o %t.be32.rel
+# RUN: llvm-readobj -r %t.be32.rel | FileCheck %s --check-prefix=LLVM-REL32
+# RUN: llvm-readelf -r %t.be32.rel | FileCheck %s --check-prefix=GNU-REL32
+
+--- !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
+## Addend == an arbitrary positive number.
+ - Addend: 0x12345
+ Type: R_386_NONE
More information about the llvm-commits
mailing list