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