1# REQUIRES: x86 2 3# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o 4# RUN: echo "VERSION_1.0 { global: foo*; local: *; };" > %t.script 5# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so 6# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck %s 7 8# CHECK: DynamicSymbols [ 9# CHECK-NEXT: Symbol { 10# CHECK-NEXT: Name: 11# CHECK-NEXT: Value: 0x0 12# CHECK-NEXT: Size: 0 13# CHECK-NEXT: Binding: Local 14# CHECK-NEXT: Type: None 15# CHECK-NEXT: Other: 0 16# CHECK-NEXT: Section: Undefined 17# CHECK-NEXT: } 18# CHECK-NEXT: Symbol { 19# CHECK-NEXT: Name: foo1@@VERSION_1.0 20# CHECK-NEXT: Value: 0x1000 21# CHECK-NEXT: Size: 0 22# CHECK-NEXT: Binding: Global 23# CHECK-NEXT: Type: None 24# CHECK-NEXT: Other: 0 25# CHECK-NEXT: Section: .text 26# CHECK-NEXT: } 27# CHECK-NEXT: Symbol { 28# CHECK-NEXT: Name: foo2@@VERSION_1.0 29# CHECK-NEXT: Value: 0x1001 30# CHECK-NEXT: Size: 0 31# CHECK-NEXT: Binding: Global 32# CHECK-NEXT: Type: None 33# CHECK-NEXT: Other: 0 34# CHECK-NEXT: Section: .text 35# CHECK-NEXT: } 36# CHECK-NEXT: Symbol { 37# CHECK-NEXT: Name: foo3@@VERSION_1.0 38# CHECK-NEXT: Value: 0x1007 39# CHECK-NEXT: Size: 0 40# CHECK-NEXT: Binding: Global 41# CHECK-NEXT: Type: None 42# CHECK-NEXT: Other: 0 43# CHECK-NEXT: Section: .text 44# CHECK-NEXT: } 45# CHECK-NEXT: ] 46 47# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o 48# RUN: echo "VERSION_1.0 { global: foo2; local: *; };" > %t2.script 49# RUN: echo "VERSION_2.0 { global: foo*; };" >> %t2.script 50# RUN: ld.lld --version-script %t2.script -shared %t.o -o %t2.so 51# RUN: llvm-readobj -dyn-symbols %t2.so | FileCheck --check-prefix=MIX %s 52 53# MIX: DynamicSymbols [ 54# MIX-NEXT: Symbol { 55# MIX-NEXT: Name: 56# MIX-NEXT: Value: 0x0 57# MIX-NEXT: Size: 0 58# MIX-NEXT: Binding: Local 59# MIX-NEXT: Type: None 60# MIX-NEXT: Other: 0 61# MIX-NEXT: Section: Undefined 62# MIX-NEXT: } 63# MIX-NEXT: Symbol { 64# MIX-NEXT: Name: foo1@@VERSION_2.0 65# MIX-NEXT: Value: 0x1000 66# MIX-NEXT: Size: 0 67# MIX-NEXT: Binding: Global 68# MIX-NEXT: Type: None 69# MIX-NEXT: Other: 0 70# MIX-NEXT: Section: .text 71# MIX-NEXT: } 72# MIX-NEXT: Symbol { 73# MIX-NEXT: Name: foo2@@VERSION_1.0 74# MIX-NEXT: Value: 0x1001 75# MIX-NEXT: Size: 0 76# MIX-NEXT: Binding: Global 77# MIX-NEXT: Type: None 78# MIX-NEXT: Other: 0 79# MIX-NEXT: Section: .text 80# MIX-NEXT: } 81# MIX-NEXT: Symbol { 82# MIX-NEXT: Name: foo3@@VERSION_2.0 83# MIX-NEXT: Value: 0x1007 84# MIX-NEXT: Size: 0 85# MIX-NEXT: Binding: Global 86# MIX-NEXT: Type: None 87# MIX-NEXT: Other: 0 88# MIX-NEXT: Section: .text 89# MIX-NEXT: } 90# MIX-NEXT: ] 91 92.globl foo1 93foo1: 94 ret 95 96.globl foo2 97foo2: 98 call foo1@PLT 99 ret 100 101.globl foo3 102foo3: 103 call foo2@PLT 104 ret 105 106.globl _start 107_start: 108 ret 109