xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/crel.test (revision 9bb4cd5977f8a0d6f1d6cc00cb707ed2db27f1c0)
1# RUN: yaml2obj %s -o %t
2# RUN: llvm-objcopy --remove-section=.foo --strip-symbol=unused %t %t.out
3# RUN: llvm-readelf -Sr %t.out | FileCheck %s
4
5# CHECK:      [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
6# CHECK-NEXT: [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
7# CHECK-NEXT: [ 1] .text             PROGBITS        0000000000000000 {{.*}} 000008 00   A  0   0  0
8# CHECK-NEXT: [ 2] .crel.text        CREL            0000000000000000 {{.*}} 000022 00      5   1  0
9# CHECK-NEXT: [ 3] nonalloc          PROGBITS        0000000000000000 {{.*}} 000030 00      0   0  0
10# CHECK-NEXT: [ 4] .crelnonalloc     CREL            0000000000000000 {{.*}} 00000b 00      5   3  0
11
12# CHECK:      Relocation section '.crel.text' at offset {{.*}} contains 4 entries:
13# CHECK-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
14# CHECK-NEXT: 0000000000000001  {{.*}}           R_X86_64_32            0000000000000000 g1 + 1
15# CHECK-NEXT: 0000000000000002  {{.*}}           R_X86_64_64            0000000000000000 l1 + 2
16# CHECK-NEXT: 0000000000000000  {{.*}}           R_X86_64_32S           0000000000000000 g1 - 1
17# CHECK-NEXT: 0000000000000004  {{.*}}           R_X86_64_32S           0000000000000000 .text - 8000000000000000
18# CHECK-EMPTY:
19# CHECK-NEXT: Relocation section '.crelnonalloc' at offset {{.*}} contains 3 entries:
20# CHECK-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
21# CHECK-NEXT: 0000000000000010  {{.*}}           R_X86_64_64            0000000000000000 g1 + 1
22# CHECK-NEXT: 0000000000000020  {{.*}}           R_X86_64_64            0000000000000000 g2 + 2
23# CHECK-NEXT: 0000000000000030  {{.*}}           R_X86_64_64                       0
24
25--- !ELF
26FileHeader:
27  Class: ELFCLASS64
28  Data: ELFDATA2LSB
29  Type: ET_REL
30  Machine: EM_X86_64
31
32Sections:
33- Name: .foo
34  Type: SHT_PROGBITS
35  Flags: [SHF_ALLOC]
36- Name: .text
37  Type: SHT_PROGBITS
38  Content: "0000000000000000"
39  Flags: [SHF_ALLOC]
40- Name: .crel.text
41  Type: SHT_CREL
42  Info: .text
43  Link: .symtab
44  Relocations:
45    - Offset: 0x1
46      Symbol: g1
47      Type:   R_X86_64_32
48      Addend: 1
49    - Offset: 0x2
50      Symbol: l1
51      Type:   R_X86_64_64
52      Addend: 2
53    - Offset: 0x0
54      Symbol: g1
55      Type:   R_X86_64_32S
56      Addend: 0xffffffffffffffff
57    - Offset: 0x4
58      Symbol: .text
59      Type:   R_X86_64_32S
60      Addend: 0x8000000000000000
61- Name: nonalloc
62  Type: SHT_PROGBITS
63  Size: 0x30
64- Name: .crelnonalloc
65  Type: SHT_CREL
66  Info: nonalloc
67  Link: .symtab
68  Relocations:
69    - Offset: 0x10
70      Symbol: g1
71      Type:   R_X86_64_64
72      Addend: 1
73    - Offset: 0x20
74      Symbol: g2
75      Type:   R_X86_64_64
76      Addend: 2
77    - Offset: 0x30
78      Symbol: 0
79      Type:   R_X86_64_64
80
81Symbols:
82  - Name: unused
83    Section: .text
84  - Name: .text
85    Type: STT_SECTION
86    Section: .text
87  - Name:    l1
88  - Name:    g1
89    Section: .text
90    Value:   0x0
91    Size:    4
92    Binding: STB_GLOBAL
93  - Name:    g2
94    Binding: STB_GLOBAL
95
96# RUN: yaml2obj --docnum=2 %s -o %t.32
97# RUN: llvm-objcopy %t.32 %t.32.out
98# RUN: llvm-readobj -r %t.32.out | FileCheck %s --check-prefix=CHECK2
99
100# CHECK2:      Relocations [
101# CHECK2-NEXT:   Section (2) .crel.text {
102# CHECK2-NEXT:     0x0 R_X86_64_32S g1 0xFFFFFFFF
103# CHECK2-NEXT:     0x4 R_X86_64_32S .text 0x80000000
104# CHECK2-NEXT:   }
105# CHECK2-NEXT: ]
106
107--- !ELF
108FileHeader:
109  Class: ELFCLASS32
110  Data: ELFDATA2LSB
111  Type: ET_REL
112  Machine: EM_X86_64
113
114Sections:
115- Name: .text
116  Type: SHT_PROGBITS
117  Content: "0000000000000000"
118  Flags: [SHF_ALLOC]
119- Name: .crel.text
120  Type: SHT_CREL
121  Info: .text
122  Link: .symtab
123  Relocations:
124    - Offset: 0x0
125      Symbol: g1
126      Type:   R_X86_64_32S
127      Addend: 0xffffffff
128    - Offset: 0x4
129      Symbol: .text
130      Type:   R_X86_64_32S
131      Addend: 0x80000000
132
133Symbols:
134  - Name: .text
135    Type: STT_SECTION
136    Section: .text
137  - Name:    g1
138    Section: .text
139    Size:    4
140    Binding: STB_GLOBAL
141