xref: /llvm-project/llvm/test/tools/llvm-readobj/ELF/reloc-addends.test (revision 98a4289810ba49cea6f9a9be6d902e72f0c0d0e7)
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