/
amd64dynlinkerror.s
171 lines (167 loc) · 4.82 KB
/
amd64dynlinkerror.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test to make sure that if we use R15 after it is clobbered by
// a global variable access while dynamic linking, we get an error.
// See issue 43661.
TEXT ·a1(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVL $0, R15
RET
TEXT ·a2(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVQ $0, R15
RET
TEXT ·a3(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
XORL R15, R15
RET
TEXT ·a4(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
XORQ R15, R15
RET
TEXT ·a5(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
XORL R15, R15
RET
TEXT ·a6(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
POPQ R15
PUSHQ R15
RET
TEXT ·a7(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVQ R15, AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a8(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
ADDQ AX, R15 // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a9(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
ORQ R15, R15 // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a10(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
JEQ one
ORQ R15, R15 // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
one:
RET
TEXT ·a11(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
JEQ one
JMP two
one:
ORQ R15, R15 // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
two:
RET
TEXT ·a12(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
JMP one
two:
ORQ R15, R15
RET
one:
MOVL $0, R15
JMP two
// Ensure 3-arg instructions get GOT-rewritten without errors.
// See issue 58735.
TEXT ·a13(SB), 0, $0-0
MULXQ runtime·writeBarrier(SB), AX, CX
RET
// Various special cases in the use-R15-after-global-access-when-dynlinking check.
// See issue 58632.
TEXT ·a14(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MULXQ R15, AX, BX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a15(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MULXQ AX, R15, BX
ADDQ $1, R15
RET
TEXT ·a16(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MULXQ AX, BX, R15
ADDQ $1, R15
RET
TEXT ·a17(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVQ (R15), AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a18(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVQ (CX)(R15*1), AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a19(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVQ AX, (R15) // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a20(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVQ AX, (CX)(R15*1) // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a21(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
MOVBLSX AX, R15
ADDQ $1, R15
RET
TEXT ·a22(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
PMOVMSKB X0, R15
ADDQ $1, R15
RET
TEXT ·a23(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
LEAQ (AX)(CX*1), R15
RET
TEXT ·a24(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
LEAQ (R15)(AX*1), AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a25(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
LEAQ (AX)(R15*1), AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a26(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
IMUL3Q $33, AX, R15
ADDQ $1, R15
RET
TEXT ·a27(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
IMUL3Q $33, R15, AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a28(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
PEXTRD $0, X0, R15
ADDQ $1, R15
RET
TEXT ·a29(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
VPEXTRD $0, X0, R15
ADDQ $1, R15
RET
TEXT ·a30(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
BSFQ R15, AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a31(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
BSFQ AX, R15
ADDQ $1, R15
RET
TEXT ·a32(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
POPCNTL R15, AX // ERROR "when dynamic linking, R15 is clobbered by a global variable access and is used here"
RET
TEXT ·a33(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
POPCNTL AX, R15
ADDQ $1, R15
RET
TEXT ·a34(SB), 0, $0-0
CMPL runtime·writeBarrier(SB), $0
SHLXQ AX, CX, R15
ADDQ $1, R15
RET