Text file src/cmd/asm/internal/asm/testdata/amd64dynlinkerror.s

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

View as plain text