llvm-project

Форк
0
/
private-extern.s 
146 строк · 5.6 Кб
1
# REQUIRES: x86
2

3
# RUN: rm -rf %t; split-file %s %t
4
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
5
# RUN:     %t/basics.s -o %t/basics.o
6

7
## Check that .private_extern symbols are marked as local in the symbol table
8
## and aren't in the export trie.
9
# RUN: %lld -dylib %t/basics.o -o %t/basics
10
# RUN: llvm-objdump --syms --exports-trie %t/basics | \
11
# RUN:     FileCheck --check-prefix=EXPORTS %s
12
# RUN: llvm-nm -m %t/basics | FileCheck --check-prefix=EXPORTS-NM %s
13
# EXPORTS-LABEL: SYMBOL TABLE:
14
# EXPORTS-DAG:   [[#%x, FOO_ADDR:]] l {{.*}} _foo
15
# EXPORTS-DAG:   [[#%x, BAR_ADDR:]] g {{.*}} _bar
16
# EXPORTS-LABEL: Exports trie:
17
# EXPORTS-NOT:   0x{{0*}}[[#%X, FOO_ADDR]] _foo
18
# EXPORTS-DAG:   0x{{0*}}[[#%X, BAR_ADDR]] _bar
19
# EXPORTS-NOT:   0x{{0*}}[[#%X, FOO_ADDR]] _foo
20
# EXPORTS-NM-DAG: (__TEXT,__cstring) non-external (was a private external) _foo
21
# EXPORTS-NM-DAG: (__TEXT,__cstring) external _bar
22

23
## The tests for weak .private_extern symbols not being referenced in the
24
## weak bind table can be found in weak-private-extern.s
25

26
#--- basics.s
27
.section __TEXT,__cstring
28

29
.globl _foo, _bar
30
.private_extern _foo
31

32
_foo:
33
.asciz "Foo"
34

35
_bar:
36
.asciz "Bar"
37

38
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
39
# RUN:     %t/strong-globl.s -o %t/strong-globl.o
40
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
41
# RUN:     %t/weak-globl.s -o %t/weak-globl.o
42

43
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
44
# RUN:     %t/strong-private.s -o %t/strong-private.o
45
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
46
# RUN:     %t/weak-private.s -o %t/weak-private.o
47

48
## weak + strong symbol takes privateness from strong symbol
49
## - weak private extern + strong extern = strong extern (for both .o orderings)
50
# RUN: %lld -dylib %t/weak-private.o %t/strong-globl.o -o %t/wpsg
51
# RUN: llvm-nm -m %t/wpsg | FileCheck --check-prefix=EXTERNAL %s
52
# RUN: %lld -dylib %t/strong-globl.o %t/weak-private.o -o %t/sgwp
53
# RUN: llvm-nm -m %t/sgwp | FileCheck --check-prefix=EXTERNAL %s
54
# EXTERNAL: (__TEXT,__text) external _foo
55
## - weak extern + strong private extern = strong private extern
56
##   (for both .o orderings)
57
# RUN: %lld -dylib %t/weak-globl.o %t/strong-private.o -o %t/wgsp
58
# RUN: llvm-nm -m %t/wgsp | FileCheck --check-prefix=NONEXTERNAL %s
59
# RUN: %lld -dylib %t/strong-private.o %t/weak-globl.o -o %t/spwg
60
# RUN: llvm-nm -m %t/spwg | FileCheck --check-prefix=NONEXTERNAL %s
61
# NONEXTERNAL: (__TEXT,__text) non-external (was a private external) _foo
62

63
## weak + weak symbol take weaker privateness
64
## - weak extern + weak private extern = weak extern (both orders)
65
# RUN: %lld -dylib %t/weak-private.o %t/weak-globl.o -o %t/wpwg
66
# RUN: llvm-nm -m %t/wpwg | FileCheck --check-prefix=WEAK-EXTERNAL %s
67
# RUN: %lld -dylib %t/weak-globl.o %t/weak-private.o -o %t/wgwp
68
# RUN: llvm-nm -m %t/wgwp | FileCheck --check-prefix=WEAK-EXTERNAL %s
69
# WEAK-EXTERNAL: (__TEXT,__text) weak external _foo
70
## - weak private extern + weak private extern = weak private extern
71
# RUN: %lld -dylib %t/weak-private.o %t/weak-private.o -o %t/wpwp
72
# RUN: llvm-nm -m %t/wpwp | FileCheck --check-prefix=NONEXTERNAL %s
73

74
#--- strong-globl.s
75
.globl _foo
76
_foo:
77
  retq
78

79
#--- weak-globl.s
80
.globl _foo
81
.weak_definition _foo
82
_foo:
83
  retq
84

85
#--- strong-private.s
86
.private_extern _foo
87
.globl _foo
88
_foo:
89
  retq
90

91
#--- weak-private.s
92
.private_extern _foo
93
.globl _foo
94
.weak_definition _foo
95
_foo:
96
  retq
97

98
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
99
# RUN:     %t/comm-small.s -o %t/comm-small.o
100
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
101
# RUN:     %t/comm-large.s -o %t/comm-large.o
102

103
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
104
# RUN:     %t/comm-small-private.s -o %t/comm-small-private.o
105
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
106
# RUN:     %t/comm-large-private.s -o %t/comm-large-private.o
107

108
## For common symbols the larger one wins.
109
## - smaller private extern + larger extern = larger extern
110
# RUN: %lld -dylib %t/comm-small-private.o %t/comm-large.o -o %t/cspcl
111
# RUN: llvm-nm -m %t/cspcl | FileCheck --check-prefix=COMMON-EXTERNAL %s
112
# RUN: %lld -dylib %t/comm-large.o %t/comm-small-private.o -o %t/clcsp
113
# RUN: llvm-nm -m %t/clcsp | FileCheck --check-prefix=COMMON-EXTERNAL %s
114
# COMMON-EXTERNAL: (__DATA,__common) external _foo
115
## - smaller extern + larger private extern = larger private extern
116
# RUN: %lld -dylib %t/comm-large-private.o %t/comm-small.o -o %t/clpcs
117
# RUN: llvm-nm -m %t/clpcs | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
118
# RUN: %lld -dylib %t/comm-small.o %t/comm-large-private.o -o %t/csclp
119
# RUN: llvm-nm -m %t/csclp | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
120
# COMMON-NONEXTERNAL: (__DATA,__common) non-external (was a private external) _foo
121

122
# For common symbols with the same size, the privateness of the symbol seen
123
# later wins (!).
124
## - equal private extern + equal extern = equal extern (both orders)
125
# RUN: %lld -dylib %t/comm-small-private.o %t/comm-small.o -o %t/cspcs
126
# RUN: llvm-nm -m %t/cspcs | FileCheck --check-prefix=COMMON-EXTERNAL %s
127
## - equal extern + equal private extern = equal private extern (both orders)
128
# RUN: %lld -dylib %t/comm-small.o %t/comm-small-private.o -o %t/cscsp
129
# RUN: llvm-nm -m %t/cscsp | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
130
## - equal private extern + equal private extern = equal private extern
131
# RUN: %lld -dylib %t/comm-small-private.o %t/comm-small-private.o -o %t/cspcsp
132
# RUN: llvm-nm -m %t/cspcsp | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
133

134
#--- comm-small.s
135
.comm _foo,4,2
136

137
#--- comm-large.s
138
.comm _foo,8,3
139

140
#--- comm-small-private.s
141
.private_extern _foo
142
.comm _foo,4,2
143

144
#--- comm-large-private.s
145
.private_extern _foo
146
.comm _foo,8,3
147

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.