[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