1c4ccfb5dSGeorge Rimar# REQUIRES: x86
2c4ccfb5dSGeorge Rimar# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
3c4ccfb5dSGeorge Rimar
4c4ccfb5dSGeorge Rimar# RUN: echo "bar = foo; VERSION { V { global: foo; bar; local: *; }; }" > %t.script
5c4ccfb5dSGeorge Rimar# RUN: ld.lld -T %t.script -shared --no-undefined-version %t.o -o %t.so
6c4ccfb5dSGeorge Rimar# RUN: llvm-readobj -V %t.so | FileCheck %s
7c4ccfb5dSGeorge Rimar
8c844524eSIgor Kudrin# RUN: echo "SECTIONS { .text : { bar = foo; *(.text) } }" > %t.script
9c844524eSIgor Kudrin# RUN: echo "VERSION { V { global: foo; bar; local: *; }; }" >> %t.script
10c844524eSIgor Kudrin# RUN: ld.lld -T %t.script -shared --no-undefined-version %t.o -o %t.so
11c844524eSIgor Kudrin# RUN: llvm-readobj -V %t.so | FileCheck %s
12c844524eSIgor Kudrin
13c4ccfb5dSGeorge Rimar## Check that we are able to version symbols defined in script.
14938db706SGeorge Rimar# CHECK:      VersionSymbols [
15c4ccfb5dSGeorge Rimar# CHECK-NEXT:   Symbol {
16c4ccfb5dSGeorge Rimar# CHECK-NEXT:     Version: 0
174ba1777aSJames Henderson# CHECK-NEXT:     Name:
18c4ccfb5dSGeorge Rimar# CHECK-NEXT:   }
19c4ccfb5dSGeorge Rimar# CHECK-NEXT:   Symbol {
20e28a70daSFangrui Song# CHECK-NEXT:     Version: 1
214ba1777aSJames Henderson# CHECK-NEXT:     Name: und
22c4ccfb5dSGeorge Rimar# CHECK-NEXT:   }
23c4ccfb5dSGeorge Rimar# CHECK-NEXT:   Symbol {
24c4ccfb5dSGeorge Rimar# CHECK-NEXT:     Version: 2
25c4ccfb5dSGeorge Rimar# CHECK-NEXT:     Name: foo@@V
26c4ccfb5dSGeorge Rimar# CHECK-NEXT:   }
27c4ccfb5dSGeorge Rimar# CHECK-NEXT:   Symbol {
28c4ccfb5dSGeorge Rimar# CHECK-NEXT:     Version: 2
29c4ccfb5dSGeorge Rimar# CHECK-NEXT:     Name: bar@@V
30c4ccfb5dSGeorge Rimar# CHECK-NEXT:   }
31c4ccfb5dSGeorge Rimar# CHECK-NEXT: ]
32c4ccfb5dSGeorge Rimar
33c4ccfb5dSGeorge Rimar# RUN: echo "bar = und; VERSION { V { global: foo; bar; local: *; }; }" > %t.script
34*81cebfd0SFangrui Song# RUN: not ld.lld -T %t.script -shared --no-undefined-version %t.o -o /dev/null \
35c4ccfb5dSGeorge Rimar# RUN:   2>&1 | FileCheck --check-prefix=ERR %s
36c4ccfb5dSGeorge Rimar# ERR: symbol not found: und
37c4ccfb5dSGeorge Rimar
38c4ccfb5dSGeorge Rimar# RUN: echo "und = 0x1; VERSION { V { global: und; local: *; }; }" > %t.script
39c4ccfb5dSGeorge Rimar# RUN: ld.lld -T %t.script -shared --no-undefined-version %t.o -o %t.so
40c4ccfb5dSGeorge Rimar# RUN: llvm-readobj -V %t.so | FileCheck %s --check-prefix=UNDEF
41938db706SGeorge Rimar# UNDEF:      VersionSymbols [
42c4ccfb5dSGeorge Rimar# UNDEF-NEXT:   Symbol {
43c4ccfb5dSGeorge Rimar# UNDEF-NEXT:     Version: 0
444ba1777aSJames Henderson# UNDEF-NEXT:     Name:
45c4ccfb5dSGeorge Rimar# UNDEF-NEXT:   }
46c4ccfb5dSGeorge Rimar# UNDEF-NEXT:   Symbol {
47c4ccfb5dSGeorge Rimar# UNDEF-NEXT:     Version: 2
48c4ccfb5dSGeorge Rimar# UNDEF-NEXT:     Name: und@@V
49c4ccfb5dSGeorge Rimar# UNDEF-NEXT:   }
50c4ccfb5dSGeorge Rimar# UNDEF-NEXT: ]
51c4ccfb5dSGeorge Rimar
52c4ccfb5dSGeorge Rimar.global und
53c4ccfb5dSGeorge Rimar
54c4ccfb5dSGeorge Rimar.text
55c4ccfb5dSGeorge Rimar.globl foo
56c4ccfb5dSGeorge Rimar.type foo,@function
57c4ccfb5dSGeorge Rimarfoo:
58