1# REQUIRES: x86 2 3# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/verdef-defaultver.s -o %t1 4# RUN: echo "V1 { global: a; local: *; };" > %t.script 5# RUN: echo "V2 { global: b; c; } V1;" >> %t.script 6# RUN: ld.lld --hash-style=sysv -shared -soname shared %t1 --version-script %t.script -o %t.so 7# RUN: llvm-readobj -V --dyn-syms %t.so | FileCheck --check-prefix=DSO %s 8 9# DSO: DynamicSymbols [ 10# DSO-NEXT: Symbol { 11# DSO-NEXT: Name: 12# DSO-NEXT: Value: 0x0 13# DSO-NEXT: Size: 0 14# DSO-NEXT: Binding: Local 15# DSO-NEXT: Type: None 16# DSO-NEXT: Other: 0 17# DSO-NEXT: Section: Undefined 18# DSO-NEXT: } 19# DSO-NEXT: Symbol { 20# DSO-NEXT: Name: a@@V1 21# DSO-NEXT: Value: 0x12E8 22# DSO-NEXT: Size: 0 23# DSO-NEXT: Binding: Global 24# DSO-NEXT: Type: Function 25# DSO-NEXT: Other: 0 26# DSO-NEXT: Section: .text 27# DSO-NEXT: } 28# DSO-NEXT: Symbol { 29# DSO-NEXT: Name: b@@V2 30# DSO-NEXT: Value: 0x12EA 31# DSO-NEXT: Size: 0 32# DSO-NEXT: Binding: Global 33# DSO-NEXT: Type: Function 34# DSO-NEXT: Other: 0 35# DSO-NEXT: Section: .text 36# DSO-NEXT: } 37# DSO-NEXT: Symbol { 38# DSO-NEXT: Name: b@V1 39# DSO-NEXT: Value: 0x12E9 40# DSO-NEXT: Size: 0 41# DSO-NEXT: Binding: Global 42# DSO-NEXT: Type: Function 43# DSO-NEXT: Other: 0 44# DSO-NEXT: Section: .text 45# DSO-NEXT: } 46# DSO-NEXT: Symbol { 47# DSO-NEXT: Name: c@@V2 48# DSO-NEXT: Value: 0x12EB 49# DSO-NEXT: Size: 0 50# DSO-NEXT: Binding: Global 51# DSO-NEXT: Type: Function 52# DSO-NEXT: Other: 0 53# DSO-NEXT: Section: .text 54# DSO-NEXT: } 55# DSO-NEXT: ] 56# DSO-NEXT: VersionSymbols [ 57# DSO-NEXT: Symbol { 58# DSO-NEXT: Version: 0 59# DSO-NEXT: Name: 60# DSO-NEXT: } 61# DSO-NEXT: Symbol { 62# DSO-NEXT: Version: 2 63# DSO-NEXT: Name: a@@V1 64# DSO-NEXT: } 65# DSO-NEXT: Symbol { 66# DSO-NEXT: Version: 3 67# DSO-NEXT: Name: b@@V2 68# DSO-NEXT: } 69# DSO-NEXT: Symbol { 70# DSO-NEXT: Version: 2 71# DSO-NEXT: Name: b@V1 72# DSO-NEXT: } 73# DSO-NEXT: Symbol { 74# DSO-NEXT: Version: 3 75# DSO-NEXT: Name: c@@V2 76# DSO-NEXT: } 77# DSO-NEXT: ] 78# DSO-NEXT: VersionDefinitions [ 79# DSO-NEXT: Definition { 80# DSO-NEXT: Version: 1 81# DSO-NEXT: Flags [ (0x1) 82# DSO-NEXT: Base (0x1) 83# DSO-NEXT: ] 84# DSO-NEXT: Index: 1 85# DSO-NEXT: Hash: 127830196 86# DSO-NEXT: Name: shared 87# DSO-NEXT: Predecessors: [] 88# DSO-NEXT: } 89# DSO-NEXT: Definition { 90# DSO-NEXT: Version: 1 91# DSO-NEXT: Flags [ (0x0) 92# DSO-NEXT: ] 93# DSO-NEXT: Index: 2 94# DSO-NEXT: Hash: 1425 95# DSO-NEXT: Name: V1 96# DSO-NEXT: Predecessors: [] 97# DSO-NEXT: } 98# DSO-NEXT: Definition { 99# DSO-NEXT: Version: 1 100# DSO-NEXT: Flags [ (0x0) 101# DSO-NEXT: ] 102# DSO-NEXT: Index: 3 103# DSO-NEXT: Hash: 1426 104# DSO-NEXT: Name: V2 105# DSO-NEXT: Predecessors: [] 106# DSO-NEXT: } 107# DSO-NEXT: ] 108 109## Check that we can link against DSO produced. 110# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t2 111# RUN: ld.lld --hash-style=sysv %t2 %t.so -o %t3 112# RUN: llvm-readobj -V --dyn-syms %t3 | FileCheck --check-prefix=EXE %s 113 114# EXE: DynamicSymbols [ 115# EXE-NEXT: Symbol { 116# EXE-NEXT: Name: 117# EXE-NEXT: Value: 0x0 118# EXE-NEXT: Size: 0 119# EXE-NEXT: Binding: Local 120# EXE-NEXT: Type: None 121# EXE-NEXT: Other: 0 122# EXE-NEXT: Section: Undefined 123# EXE-NEXT: } 124# EXE-NEXT: Symbol { 125# EXE-NEXT: Name: a@V1 126# EXE-NEXT: Value: 0x201340 127# EXE-NEXT: Size: 0 128# EXE-NEXT: Binding: Global 129# EXE-NEXT: Type: Function 130# EXE-NEXT: Other: 0 131# EXE-NEXT: Section: Undefined 132# EXE-NEXT: } 133# EXE-NEXT: Symbol { 134# EXE-NEXT: Name: b@V2 135# EXE-NEXT: Value: 0x201350 136# EXE-NEXT: Size: 0 137# EXE-NEXT: Binding: Global 138# EXE-NEXT: Type: Function 139# EXE-NEXT: Other: 0 140# EXE-NEXT: Section: Undefined 141# EXE-NEXT: } 142# EXE-NEXT: Symbol { 143# EXE-NEXT: Name: c@V2 144# EXE-NEXT: Value: 0x201360 145# EXE-NEXT: Size: 0 146# EXE-NEXT: Binding: Global 147# EXE-NEXT: Type: Function 148# EXE-NEXT: Other: 0 149# EXE-NEXT: Section: Undefined 150# EXE-NEXT: } 151# EXE-NEXT: ] 152# EXE-NEXT: VersionSymbols [ 153# EXE-NEXT: Symbol { 154# EXE-NEXT: Version: 0 155# EXE-NEXT: Name: 156# EXE-NEXT: } 157# EXE-NEXT: Symbol { 158# EXE-NEXT: Version: 2 159# EXE-NEXT: Name: a@V1 160# EXE-NEXT: } 161# EXE-NEXT: Symbol { 162# EXE-NEXT: Version: 3 163# EXE-NEXT: Name: b@V2 164# EXE-NEXT: } 165# EXE-NEXT: Symbol { 166# EXE-NEXT: Version: 3 167# EXE-NEXT: Name: c@V2 168# EXE-NEXT: } 169# EXE-NEXT: ] 170# EXE-NEXT: VersionDefinitions [ 171# EXE-NEXT: ] 172# EXE-NEXT: VersionRequirements [ 173# EXE-NEXT: Dependency { 174# EXE-NEXT: Version: 1 175# EXE-NEXT: Count: 2 176# EXE-NEXT: FileName: shared 177# EXE-NEXT: Entries [ 178# EXE-NEXT: Entry { 179# EXE-NEXT: Hash: 1425 180# EXE-NEXT: Flags [ (0x0) 181# EXE-NEXT: ] 182# EXE-NEXT: Index: 2 183# EXE-NEXT: Name: V1 184# EXE-NEXT: } 185# EXE-NEXT: Entry { 186# EXE-NEXT: Hash: 1426 187# EXE-NEXT: Flags [ (0x0) 188# EXE-NEXT: ] 189# EXE-NEXT: Index: 3 190# EXE-NEXT: Name: V2 191# EXE-NEXT: } 192# EXE-NEXT: ] 193# EXE-NEXT: } 194# EXE-NEXT: ] 195 196.globl _start 197_start: 198 .long a - . 199 .long b - . 200 .long c - . 201