aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/tools/llvm-objcopy/ELF/crel.test
blob: daf4567d0c8a2bf8792169d65de96e9ae1c62c37 (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
# RUN: yaml2obj %s -o %t
# RUN: llvm-objcopy --remove-section=.foo --strip-symbol=unused %t %t.out
# RUN: llvm-readelf -Sr %t.out | FileCheck %s

# CHECK:      [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
# CHECK-NEXT: [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
# CHECK-NEXT: [ 1] .text             PROGBITS        0000000000000000 {{.*}} 000008 00   A  0   0  0
# CHECK-NEXT: [ 2] .crel.text        CREL            0000000000000000 {{.*}} 000022 00      5   1  0
# CHECK-NEXT: [ 3] nonalloc          PROGBITS        0000000000000000 {{.*}} 000030 00      0   0  0
# CHECK-NEXT: [ 4] .crelnonalloc     CREL            0000000000000000 {{.*}} 00000b 00      5   3  0

# CHECK:      Relocation section '.crel.text' at offset {{.*}} contains 4 entries:
# CHECK-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
# CHECK-NEXT: 0000000000000001  {{.*}}           R_X86_64_32            0000000000000000 g1 + 1
# CHECK-NEXT: 0000000000000002  {{.*}}           R_X86_64_64            0000000000000000 l1 + 2
# CHECK-NEXT: 0000000000000000  {{.*}}           R_X86_64_32S           0000000000000000 g1 - 1
# CHECK-NEXT: 0000000000000004  {{.*}}           R_X86_64_32S           0000000000000000 .text - 8000000000000000
# CHECK-EMPTY:
# CHECK-NEXT: Relocation section '.crelnonalloc' at offset {{.*}} contains 3 entries:
# CHECK-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
# CHECK-NEXT: 0000000000000010  {{.*}}           R_X86_64_64            0000000000000000 g1 + 1
# CHECK-NEXT: 0000000000000020  {{.*}}           R_X86_64_64            0000000000000000 g2 + 2
# CHECK-NEXT: 0000000000000030  {{.*}}           R_X86_64_64                       0

--- !ELF
FileHeader:
  Class: ELFCLASS64
  Data: ELFDATA2LSB
  Type: ET_REL
  Machine: EM_X86_64

Sections:
- Name: .foo
  Type: SHT_PROGBITS
  Flags: [SHF_ALLOC]
- Name: .text
  Type: SHT_PROGBITS
  Content: "0000000000000000"
  Flags: [SHF_ALLOC]
- Name: .crel.text
  Type: SHT_CREL
  Info: .text
  Link: .symtab
  Relocations:
    - Offset: 0x1
      Symbol: g1
      Type:   R_X86_64_32
      Addend: 1
    - Offset: 0x2
      Symbol: l1
      Type:   R_X86_64_64
      Addend: 2
    - Offset: 0x0
      Symbol: g1
      Type:   R_X86_64_32S
      Addend: 0xffffffffffffffff
    - Offset: 0x4
      Symbol: .text
      Type:   R_X86_64_32S
      Addend: 0x8000000000000000
- Name: nonalloc
  Type: SHT_PROGBITS
  Size: 0x30
- Name: .crelnonalloc
  Type: SHT_CREL
  Info: nonalloc
  Link: .symtab
  Relocations:
    - Offset: 0x10
      Symbol: g1
      Type:   R_X86_64_64
      Addend: 1
    - Offset: 0x20
      Symbol: g2
      Type:   R_X86_64_64
      Addend: 2
    - Offset: 0x30
      Symbol: 0
      Type:   R_X86_64_64

Symbols:
  - Name: unused
    Section: .text
  - Name: .text
    Type: STT_SECTION
    Section: .text
  - Name:    l1
  - Name:    g1
    Section: .text
    Value:   0x0
    Size:    4
    Binding: STB_GLOBAL
  - Name:    g2
    Binding: STB_GLOBAL

# RUN: yaml2obj --docnum=2 %s -o %t.32
# RUN: llvm-objcopy %t.32 %t.32.out
# RUN: llvm-readobj -r %t.32.out | FileCheck %s --check-prefix=CHECK2

# CHECK2:      Relocations [
# CHECK2-NEXT:   Section (2) .crel.text {
# CHECK2-NEXT:     0x0 R_X86_64_32S g1 0xFFFFFFFF
# CHECK2-NEXT:     0x4 R_X86_64_32S .text 0x80000000
# CHECK2-NEXT:   }
# CHECK2-NEXT: ]

--- !ELF
FileHeader:
  Class: ELFCLASS32
  Data: ELFDATA2LSB
  Type: ET_REL
  Machine: EM_X86_64

Sections:
- Name: .text
  Type: SHT_PROGBITS
  Content: "0000000000000000"
  Flags: [SHF_ALLOC]
- Name: .crel.text
  Type: SHT_CREL
  Info: .text
  Link: .symtab
  Relocations:
    - Offset: 0x0
      Symbol: g1
      Type:   R_X86_64_32S
      Addend: 0xffffffff
    - Offset: 0x4
      Symbol: .text
      Type:   R_X86_64_32S
      Addend: 0x80000000

Symbols:
  - Name: .text
    Type: STT_SECTION
    Section: .text
  - Name:    g1
    Section: .text
    Size:    4
    Binding: STB_GLOBAL