xref: /llvm-project/llvm/test/tools/llvm-objdump/ELF/dynamic-relocs.test (revision f80a4321ef1bafcd8041884bcb85d9ba24335adb)
1## Show that llvm-objdump can dump dynamic relocations.
2## Specifically, we are checking that the tags DT_RELA, DT_REL and DT_JMPREL
3## properly identify relocation tables.
4
5# RUN: yaml2obj --docnum=1 %s -o %t.empty
6# RUN: not llvm-objdump -R %t.empty 2>&1 | FileCheck %s --check-prefix=NO-DYNAMIC
7
8# NO-DYNAMIC: error: '{{.*}}': not a dynamic object
9
10--- !ELF
11FileHeader:
12  Class:   ELFCLASS64
13  Data:    ELFDATA2LSB
14  Type:    ET_DYN
15
16# RUN: yaml2obj --docnum=2 -DTYPE=ET_EXEC %s -o %t1
17# RUN: llvm-objdump --dynamic-reloc %t1 | FileCheck %s --strict-whitespace --match-full-lines
18
19## e_type doesn't matter at all.
20# RUN: yaml2obj --docnum=2 -DTYPE=0x1234 %s -o %t2
21# RUN: llvm-objdump -R %t2 | FileCheck %s --strict-whitespace --match-full-lines
22
23#      CHECK:{{.*}}file format elf64-x86-64
24#CHECK-EMPTY:
25# CHECK-NEXT:DYNAMIC RELOCATION RECORDS
26# CHECK-NEXT:OFFSET           TYPE                     VALUE
27# CHECK-NEXT:0000000000000000 R_X86_64_RELATIVE        *ABS*
28# CHECK-NEXT:0000000000000000 R_X86_64_JUMP_SLOT       bar
29# CHECK-NEXT:0000000000000008 R_X86_64_NONE            foo
30#CHECK-EMPTY:
31
32## -r ignores dynamic relocations.
33# RUN: llvm-objdump -r %t2 | FileCheck %s --check-prefix=STATIC-RELOC
34
35# STATIC-RELOC-NOT: RELOCATION RECORDS
36
37--- !ELF
38FileHeader:
39  Class:   ELFCLASS64
40  Data:    ELFDATA2LSB
41  Type:    [[TYPE]]
42  Machine: EM_X86_64
43Sections:
44  - Name:         .foo
45    Type:         SHT_PROGBITS
46    Size:         16
47    Flags:        [SHF_ALLOC]
48    Address:      0x100000
49    AddressAlign: 0x100
50  - Name:         .got.plt
51    Type:         SHT_PROGBITS
52    Flags:        [SHF_WRITE, SHF_ALLOC]
53    Address:      0x100100
54    AddressAlign: 0x1000
55  - Name:         .rela.dyn
56    Type:         SHT_RELA
57    Address:      0x100200
58    AddressAlign: 0x100
59    Info:         .foo
60    Link:         .dynsym
61    Flags:        [SHF_ALLOC]
62    Relocations:
63      - Offset: 0
64        Type:   R_X86_64_RELATIVE
65        Addend: 0
66  - Name:         .rela.plt
67    Type:         SHT_RELA
68    Address:      0x100300
69    AddressAlign: 0x100
70    Info:         .got.plt
71    Link:         .dynsym
72    Flags:        [SHF_ALLOC]
73    Relocations:
74      - Offset: 0
75        Symbol: bar
76        Type:   R_X86_64_JUMP_SLOT
77  - Name:         .rel.dyn
78    Type:         SHT_REL
79    Address:      0x100400
80    AddressAlign: 0x100
81    Info:         .foo
82    Link:         .dynsym
83    Flags:        [SHF_ALLOC]
84    Relocations:
85      - Offset: 8
86        Symbol: foo
87        Type:   R_X86_64_NONE
88  - Name:         .dynamic
89    Type:         SHT_DYNAMIC
90    Address:      0x100500
91    AddressAlign: 0x100
92    Link:         .dynstr
93    Flags:        [SHF_ALLOC]
94    Entries:
95      - Tag: DT_RELA
96        Value: 0x100200
97      - Tag: DT_RELASZ
98        Value: 24
99      - Tag: DT_RELAENT
100        Value: 24
101      - Tag: DT_JMPREL
102        Value: 0x100300
103      - Tag: DT_PLTREL
104        Value: 7
105      - Tag: DT_PLTRELSZ
106        Value: 24
107      - Tag: DT_REL
108        Value: 0x100400
109      - Tag: DT_RELSZ
110        Value: 16
111      - Tag: DT_RELENT
112        Value: 16
113      - Tag: DT_NULL
114        Value: 0
115ProgramHeaders:
116  - Type:     PT_LOAD
117    VAddr:    0x100000
118    Align:    0x100
119    FirstSec: .foo
120    LastSec:  .dynamic
121  - Type:     PT_DYNAMIC
122    VAddr:    0x100500
123    Align:    0x100
124    FirstSec: .dynamic
125    LastSec:  .dynamic
126DynamicSymbols:
127  - Name:    foo
128    Section: .foo
129    Binding: STB_GLOBAL
130  - Name:    bar
131    Type:    STT_FUNC
132    Binding: STB_GLOBAL
133
134## Test a 32-bit object.
135# RUN: yaml2obj --docnum=3 %s -o %t.i386
136# RUN: llvm-objdump -R %t.i386 | FileCheck %s --check-prefix=I386 --strict-whitespace --match-full-lines
137
138#      I386:{{.*}}file format elf32-i386
139#I386-EMPTY:
140# I386-NEXT:DYNAMIC RELOCATION RECORDS
141# I386-NEXT:OFFSET   TYPE                     VALUE
142# I386-NEXT:00000030 R_386_RELATIVE           *ABS*
143# I386-NEXT:00000010 R_386_NONE               foo
144#I386-EMPTY:
145
146--- !ELF
147FileHeader:
148  Class:           ELFCLASS32
149  Data:            ELFDATA2LSB
150  Type:            ET_DYN
151  Machine:         EM_386
152ProgramHeaders:
153  - Type:     PT_LOAD
154    FirstSec: .rel.dyn
155    LastSec:  .data
156  - Type:     PT_DYNAMIC
157    VAddr:    0x10
158    FirstSec: .dynamic
159    LastSec:  .dynamic
160Sections:
161  - Name:            .rel.dyn
162    Type:            SHT_REL
163    Link:            .dynsym
164    Flags:           [ SHF_ALLOC ]
165    AddressAlign:    0x4
166    Relocations:
167      - Offset:          0x30
168        Type:            R_386_RELATIVE
169      - Offset:          0x10
170        Symbol:          foo
171        Type:            R_386_NONE
172  - Name:            .dynamic
173    Type:            SHT_DYNAMIC
174    Flags:           [ SHF_ALLOC ]
175    Link:            .dynstr
176    AddressAlign:    0x4
177    Entries:
178      - Tag:             DT_REL
179        Value:           0x0
180      - Tag:             DT_RELSZ
181        Value:           0x10
182      - Tag:             DT_RELENT
183        Value:           0x8
184      - Tag:             DT_RELCOUNT
185        Value:           0x1
186      - Tag:             DT_NULL
187        Value:           0x0
188  - Name:            .data
189    Type:            SHT_PROGBITS
190    Flags:           [ SHF_WRITE, SHF_ALLOC ]
191    AddressAlign:    0x4
192    Content:         '80110000'
193DynamicSymbols:
194  - Name:    foo
195    Section: .data
196