aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/tools/llvm-objdump/ELF/dynamic-relocs.test
blob: 8c1d7d16e658384d728addfa50d4bca86a3f96ca (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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
## Show that llvm-objdump can dump dynamic relocations.
## Specifically, we are checking that the tags DT_RELA, DT_REL and DT_JMPREL
## properly identify relocation tables.

# RUN: yaml2obj --docnum=1 %s -o %t.empty
# RUN: not llvm-objdump -R %t.empty 2>&1 | FileCheck %s --check-prefix=NO-DYNAMIC

# NO-DYNAMIC: error: '{{.*}}': not a dynamic object

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_DYN

# RUN: yaml2obj --docnum=2 -DTYPE=ET_EXEC %s -o %t1
# RUN: llvm-objdump --dynamic-reloc %t1 | FileCheck %s --strict-whitespace --match-full-lines

## e_type doesn't matter at all.
# RUN: yaml2obj --docnum=2 -DTYPE=0x1234 %s -o %t2
# RUN: llvm-objdump -R %t2 | FileCheck %s --strict-whitespace --match-full-lines

#      CHECK:{{.*}}file format elf64-x86-64
#CHECK-EMPTY:
# CHECK-NEXT:DYNAMIC RELOCATION RECORDS
# CHECK-NEXT:OFFSET           TYPE                     VALUE
# CHECK-NEXT:0000000000000000 R_X86_64_RELATIVE        *ABS*
# CHECK-NEXT:0000000000000000 R_X86_64_JUMP_SLOT       bar
# CHECK-NEXT:0000000000000008 R_X86_64_NONE            foo
#CHECK-EMPTY:

## -r ignores dynamic relocations.
# RUN: llvm-objdump -r %t2 | FileCheck %s --check-prefix=STATIC-RELOC

# STATIC-RELOC-NOT: RELOCATION RECORDS

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    [[TYPE]]
  Machine: EM_X86_64
Sections:
  - Name:         .foo
    Type:         SHT_PROGBITS
    Size:         16
    Flags:        [SHF_ALLOC]
    Address:      0x100000
    AddressAlign: 0x100
  - Name:         .got.plt
    Type:         SHT_PROGBITS
    Flags:        [SHF_WRITE, SHF_ALLOC]
    Address:      0x100100
    AddressAlign: 0x1000
  - Name:         .rela.dyn
    Type:         SHT_RELA
    Address:      0x100200
    AddressAlign: 0x100
    Info:         .foo
    Link:         .dynsym
    Flags:        [SHF_ALLOC]
    Relocations:
      - Offset: 0
        Type:   R_X86_64_RELATIVE
        Addend: 0
  - Name:         .rela.plt
    Type:         SHT_RELA
    Address:      0x100300
    AddressAlign: 0x100
    Info:         .got.plt
    Link:         .dynsym
    Flags:        [SHF_ALLOC]
    Relocations:
      - Offset: 0
        Symbol: bar
        Type:   R_X86_64_JUMP_SLOT
  - Name:         .rel.dyn
    Type:         SHT_REL
    Address:      0x100400
    AddressAlign: 0x100
    Info:         .foo
    Link:         .dynsym
    Flags:        [SHF_ALLOC]
    Relocations:
      - Offset: 8
        Symbol: foo
        Type:   R_X86_64_NONE
  - Name:         .dynamic
    Type:         SHT_DYNAMIC
    Address:      0x100500
    AddressAlign: 0x100
    Link:         .dynstr
    Flags:        [SHF_ALLOC]
    Entries:
      - Tag: DT_RELA
        Value: 0x100200
      - Tag: DT_RELASZ
        Value: 24
      - Tag: DT_RELAENT
        Value: 24
      - Tag: DT_JMPREL
        Value: 0x100300
      - Tag: DT_PLTREL
        Value: 7
      - Tag: DT_PLTRELSZ
        Value: 24
      - Tag: DT_REL
        Value: 0x100400
      - Tag: DT_RELSZ
        Value: 16
      - Tag: DT_RELENT
        Value: 16
      - Tag: DT_NULL
        Value: 0
ProgramHeaders:
  - Type:     PT_LOAD
    VAddr:    0x100000
    Align:    0x100
    FirstSec: .foo
    LastSec:  .dynamic
  - Type:     PT_DYNAMIC
    VAddr:    0x100500
    Align:    0x100
    FirstSec: .dynamic
    LastSec:  .dynamic
DynamicSymbols:
  - Name:    foo
    Section: .foo
    Binding: STB_GLOBAL
  - Name:    bar
    Type:    STT_FUNC
    Binding: STB_GLOBAL

## Test a 32-bit object.
# RUN: yaml2obj --docnum=3 %s -o %t.i386
# RUN: llvm-objdump -R %t.i386 | FileCheck %s --check-prefix=I386 --strict-whitespace --match-full-lines

#      I386:{{.*}}file format elf32-i386
#I386-EMPTY:
# I386-NEXT:DYNAMIC RELOCATION RECORDS
# I386-NEXT:OFFSET   TYPE                     VALUE
# I386-NEXT:00000030 R_386_RELATIVE           *ABS*
# I386-NEXT:00000010 R_386_NONE               foo
#I386-EMPTY:

--- !ELF
FileHeader:
  Class:           ELFCLASS32
  Data:            ELFDATA2LSB
  Type:            ET_DYN
  Machine:         EM_386
ProgramHeaders:
  - Type:     PT_LOAD
    FirstSec: .rel.dyn
    LastSec:  .data
  - Type:     PT_DYNAMIC
    VAddr:    0x10
    FirstSec: .dynamic
    LastSec:  .dynamic
Sections:
  - Name:            .rel.dyn
    Type:            SHT_REL
    Link:            .dynsym
    Flags:           [ SHF_ALLOC ]
    AddressAlign:    0x4
    Relocations:
      - Offset:          0x30
        Type:            R_386_RELATIVE
      - Offset:          0x10
        Symbol:          foo
        Type:            R_386_NONE
  - Name:            .dynamic
    Type:            SHT_DYNAMIC
    Flags:           [ SHF_ALLOC ]
    Link:            .dynstr
    AddressAlign:    0x4
    Entries:
      - Tag:             DT_REL
        Value:           0x0
      - Tag:             DT_RELSZ
        Value:           0x10
      - Tag:             DT_RELENT
        Value:           0x8
      - Tag:             DT_RELCOUNT
        Value:           0x1
      - Tag:             DT_NULL
        Value:           0x0
  - Name:            .data
    Type:            SHT_PROGBITS
    Flags:           [ SHF_WRITE, SHF_ALLOC ]
    AddressAlign:    0x4
    Content:         '80110000'
DynamicSymbols:
  - Name:    foo
    Section: .data