aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/tools/llvm-readobj/ELF/reloc-addends.test
blob: 0b47d9e024b44785cbfa32ee56d72a18cc7f6820 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
## 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 differently.
##        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

# LLVM-REL64-COUNT-7:  R_X86_64_NONE -{{$}}
# 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 differently.
##        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

# LLVM-REL32-COUNT-7: R_386_NONE -{{$}}
# 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