]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ELF/verneed.s
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / ELF / verneed.s
1 # REQUIRES: x86
2 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/verneed1.s -o %t1.o
3 # RUN: echo "v1 {}; v2 {}; v3 { local: *; };" > %t.script
4 # RUN: ld.lld -shared %t1.o --version-script %t.script -o %t1.so -soname verneed1.so.0
5 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/verneed2.s -o %t2.o
6 # RUN: ld.lld -shared %t2.o --version-script %t.script -o %t2.so -soname verneed2.so.0
7
8 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
9 # RUN: ld.lld --hash-style=sysv %t.o %t1.so %t2.so -o %t
10 # RUN: llvm-readobj -V -sections -section-data -dyn-symbols -dynamic-table %t | FileCheck %s
11
12 # CHECK:        Section {
13 # CHECK:          Index: 1
14 # CHECK-NEXT:     Name: .dynsym
15 # CHECK-NEXT:     Type: SHT_DYNSYM (0xB)
16 # CHECK-NEXT:     Flags [ (0x2)
17 # CHECK-NEXT:       SHF_ALLOC (0x2)
18 # CHECK-NEXT:     ]
19 # CHECK-NEXT:     Address: 0x2001C8
20 # CHECK-NEXT:     Offset: 0x1C8
21 # CHECK-NEXT:     Size: 96
22 # CHECK-NEXT:     Link: [[DYNSTR:.*]]
23 # CHECK-NEXT:     Info: 1
24 # CHECK-NEXT:     AddressAlignment: 8
25 # CHECK-NEXT:     EntrySize: 24
26
27 # CHECK:       Section {
28 # CHECK-NEXT:    Index: 2
29 # CHECK-NEXT:    Name: .gnu.version
30 # CHECK-NEXT:    Type: SHT_GNU_versym (0x6FFFFFFF)
31 # CHECK-NEXT:    Flags [ (0x2)
32 # CHECK-NEXT:      SHF_ALLOC (0x2)
33 # CHECK-NEXT:    ]
34 # CHECK-NEXT:    Address: [[VERSYM:.*]]
35 # CHECK-NEXT:    Offset: [[VERSYM_OFFSET:.*]]
36 # CHECK-NEXT:    Size: 8
37 # CHECK-NEXT:    Link: 1
38 # CHECK-NEXT:    Info: 0
39 # CHECK-NEXT:    AddressAlignment: 2
40 # CHECK-NEXT:    EntrySize: 2
41
42 # CHECK:       Section {
43 # CHECK-NEXT:    Index: 3
44 # CHECK-NEXT:    Name: .gnu.version_r
45 # CHECK-NEXT:    Type: SHT_GNU_verneed (0x6FFFFFFE)
46 # CHECK-NEXT:    Flags [ (0x2)
47 # CHECK-NEXT:      SHF_ALLOC (0x2)
48 # CHECK-NEXT:    ]
49 # CHECK-NEXT:    Address: [[VERNEED:.*]]
50 # CHECK-NEXT:    Offset: 0x230
51 # CHECK-NEXT:    Size: 80
52 # CHECK-NEXT:    Link: 5
53 # CHECK-NEXT:    Info: 2
54 # CHECK-NEXT:    AddressAlignment: 4
55 # CHECK-NEXT:    EntrySize: 0
56
57 # CHECK:          Index: [[DYNSTR]]
58 # CHECK-NEXT:     Name: .dynstr
59 # CHECK-NEXT:     Type: SHT_STRTAB (0x3)
60 # CHECK-NEXT:     Flags [ (0x2)
61 # CHECK-NEXT:       SHF_ALLOC (0x2)
62 # CHECK-NEXT:     ]
63 # CHECK-NEXT:     Address: 0x2002A8
64 # CHECK-NEXT:     Offset: 0x2A8
65 # CHECK-NEXT:     Size: 47
66 # CHECK-NEXT:     Link: 0
67 # CHECK-NEXT:     Info: 0
68 # CHECK-NEXT:     AddressAlignment: 1
69 # CHECK-NEXT:     EntrySize: 0
70 # CHECK-NEXT:     SectionData (
71 # CHECK-NEXT:       0000: 00766572 6E656564 312E736F 2E300076  |.verneed1.so.0.v|
72 # CHECK-NEXT:       0010: 65726E65 6564322E 736F2E30 00663100  |erneed2.so.0.f1.|
73 # CHECK-NEXT:       0020: 76330066 32007632 00673100 763100    |v3.f2.v2.g1.v1.|
74 # CHECK-NEXT:     )
75 # CHECK-NEXT:   }
76
77 # CHECK:      DynamicSymbols [
78 # CHECK-NEXT:   Symbol {
79 # CHECK-NEXT:     Name: @
80 # CHECK-NEXT:     Value: 0x0
81 # CHECK-NEXT:     Size: 0
82 # CHECK-NEXT:     Binding: Local (0x0)
83 # CHECK-NEXT:     Type: None (0x0)
84 # CHECK-NEXT:     Other: 0
85 # CHECK-NEXT:     Section: Undefined (0x0)
86 # CHECK-NEXT:   }
87 # CHECK-NEXT:   Symbol {
88 # CHECK-NEXT:     Name: f1@v3
89 # CHECK-NEXT:     Value: 0x0
90 # CHECK-NEXT:     Size: 0
91 # CHECK-NEXT:     Binding: Global (0x1)
92 # CHECK-NEXT:     Type: None (0x0)
93 # CHECK-NEXT:     Other: 0
94 # CHECK-NEXT:     Section: Undefined (0x0)
95 # CHECK-NEXT:   }
96 # CHECK-NEXT:   Symbol {
97 # CHECK-NEXT:     Name: f2@v2
98 # CHECK-NEXT:     Value: 0x0
99 # CHECK-NEXT:     Size: 0
100 # CHECK-NEXT:     Binding: Global (0x1)
101 # CHECK-NEXT:     Type: None (0x0)
102 # CHECK-NEXT:     Other: 0
103 # CHECK-NEXT:     Section: Undefined (0x0)
104 # CHECK-NEXT:   }
105 # CHECK-NEXT:   Symbol {
106 # CHECK-NEXT:     Name: g1@v1
107 # CHECK-NEXT:     Value: 0x0
108 # CHECK-NEXT:     Size: 0
109 # CHECK-NEXT:     Binding: Global (0x1)
110 # CHECK-NEXT:     Type: None (0x0)
111 # CHECK-NEXT:     Other: 0
112 # CHECK-NEXT:     Section: Undefined (0x0)
113 # CHECK-NEXT:   }
114 # CHECK-NEXT: ]
115
116 # CHECK:      0x000000006FFFFFF0 VERSYM               [[VERSYM]]
117 # CHECK-NEXT: 0x000000006FFFFFFE VERNEED              [[VERNEED]]
118 # CHECK-NEXT: 0x000000006FFFFFFF VERNEEDNUM           2
119
120 # CHECK:      Version symbols {
121 # CHECK-NEXT:    Section Name: .gnu.version
122 # CHECK-NEXT:    Address: [[VERSYM]]
123 # CHECK-NEXT:    Offset: [[VERSYM_OFFSET]]
124 # CHECK-NEXT:    Link: 1
125 # CHECK-NEXT:    Symbols [
126 # CHECK-NEXT:      Symbol {
127 # CHECK-NEXT:        Version: 0
128 # CHECK-NEXT:        Name: @
129 # CHECK-NEXT:      }
130 # CHECK-NEXT:      Symbol {
131 # CHECK-NEXT:        Version: 2
132 # CHECK-NEXT:        Name: f1@v3
133 # CHECK-NEXT:      }
134 # CHECK-NEXT:      Symbol {
135 # CHECK-NEXT:        Version: 3
136 # CHECK-NEXT:        Name: f2@v2
137 # CHECK-NEXT:      }
138 # CHECK-NEXT:      Symbol {
139 # CHECK-NEXT:        Version: 4
140 # CHECK-NEXT:        Name: g1@v1
141 # CHECK-NEXT:      }
142 # CHECK-NEXT:    ]
143 # CHECK-NEXT:  }
144 # CHECK-NEXT:  SHT_GNU_verdef {
145 # CHECK-NEXT:  }
146 # CHECK-NEXT:  SHT_GNU_verneed {
147 # CHECK-NEXT:    Dependency {
148 # CHECK-NEXT:      Version: 1
149 # CHECK-NEXT:      Count: 2
150 # CHECK-NEXT:      FileName: verneed1.so.0
151 # CHECK-NEXT:      Entry {
152 # CHECK-NEXT:        Hash: 1938
153 # CHECK-NEXT:        Flags: 0x0
154 # CHECK-NEXT:        Index: 3
155 # CHECK-NEXT:        Name: v2
156 # CHECK-NEXT:      }
157 # CHECK-NEXT:      Entry {
158 # CHECK-NEXT:        Hash: 1939
159 # CHECK-NEXT:        Flags: 0x0
160 # CHECK-NEXT:        Index: 2
161 # CHECK-NEXT:        Name: v3
162 # CHECK-NEXT:      }
163 # CHECK-NEXT:    }
164 # CHECK-NEXT:    Dependency {
165 # CHECK-NEXT:      Version: 1
166 # CHECK-NEXT:      Count: 1
167 # CHECK-NEXT:      FileName: verneed2.so.0
168 # CHECK-NEXT:      Entry {
169 # CHECK-NEXT:        Hash: 1937
170 # CHECK-NEXT:        Flags: 0x0
171 # CHECK-NEXT:        Index: 4
172 # CHECK-NEXT:        Name: v1
173 # CHECK-NEXT:      }
174 # CHECK-NEXT:    }
175 # CHECK-NEXT:  }
176
177 .globl _start
178 _start:
179 call f1@plt
180 call f2@plt
181 call g1@plt