Home | History | Annotate | Download | only in x86_64-GOTRewrite
      1 .text
      2 .file 1 "inserted_by_delocate.c"
      3 .loc 1 1 0
      4 BORINGSSL_bcm_text_start:
      5 	.text
      6 .Lfoo_local_target:
      7 foo:
      8 	# leaq of OPENSSL_ia32cap_P is supported.
      9 # WAS leaq OPENSSL_ia32cap_P(%rip), %r11
     10 	leaq -128(%rsp), %rsp
     11 	pushfq
     12 	leaq	OPENSSL_ia32cap_addr_delta(%rip), %r11
     13 	addq	(%r11), %r11
     14 	popfq
     15 	leaq 128(%rsp), %rsp
     16 
     17 	# As is the equivalent GOTPCREL movq.
     18 # WAS movq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
     19 	leaq -128(%rsp), %rsp
     20 	pushfq
     21 	leaq	OPENSSL_ia32cap_addr_delta(%rip), %r12
     22 	addq	(%r12), %r12
     23 	popfq
     24 	leaq 128(%rsp), %rsp
     25 
     26 	# And a non-movq instruction via the GOT.
     27 # WAS orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
     28 	leaq -128(%rsp), %rsp
     29 	pushq %rax
     30 	pushfq
     31 	leaq	OPENSSL_ia32cap_addr_delta(%rip), %rax
     32 	addq	(%rax), %rax
     33 	popfq
     34 	orq %rax, %r12
     35 	popq %rax
     36 	leaq 128(%rsp), %rsp
     37 
     38 	# ... which targets the default temp register
     39 # WAS orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %rax
     40 	leaq -128(%rsp), %rsp
     41 	pushq %rbx
     42 	pushfq
     43 	leaq	OPENSSL_ia32cap_addr_delta(%rip), %rbx
     44 	addq	(%rbx), %rbx
     45 	popfq
     46 	orq %rbx, %rax
     47 	popq %rbx
     48 	leaq 128(%rsp), %rsp
     49 
     50 	# Test that GOTPCREL accesses get translated. They are handled
     51 	# differently for local and external symbols.
     52 
     53 # WAS pushq stderr@GOTPCREL(%rip)
     54 	pushq %rax
     55 	leaq -128(%rsp), %rsp
     56 	pushf
     57 	leaq stderr_GOTPCREL_external(%rip), %rax
     58 	addq (%rax), %rax
     59 	movq (%rax), %rax
     60 	popf
     61 	leaq	128(%rsp), %rsp
     62 	xchg %rax, (%rsp)
     63 # WAS pushq foo@GOTPCREL(%rip)
     64 	pushq %rax
     65 	leaq	.Lfoo_local_target(%rip), %rax
     66 	xchg %rax, (%rsp)
     67 
     68 # WAS movq stderr@GOTPCREL(%rip), %r11
     69 	leaq -128(%rsp), %rsp
     70 	pushf
     71 	leaq stderr_GOTPCREL_external(%rip), %r11
     72 	addq (%r11), %r11
     73 	movq (%r11), %r11
     74 	popf
     75 	leaq	128(%rsp), %rsp
     76 # WAS movq foo@GOTPCREL(%rip), %r11
     77 	leaq	.Lfoo_local_target(%rip), %r11
     78 
     79 # WAS vmovq stderr@GOTPCREL(%rip), %xmm0
     80 	leaq -128(%rsp), %rsp
     81 	pushq %rax
     82 	pushf
     83 	leaq stderr_GOTPCREL_external(%rip), %rax
     84 	addq (%rax), %rax
     85 	movq (%rax), %rax
     86 	popf
     87 	vmovq %rax, %xmm0
     88 	popq %rax
     89 	leaq 128(%rsp), %rsp
     90 # WAS vmovq foo@GOTPCREL(%rip), %xmm0
     91 	leaq -128(%rsp), %rsp
     92 	pushq %rax
     93 	leaq	.Lfoo_local_target(%rip), %rax
     94 	vmovq %rax, %xmm0
     95 	popq %rax
     96 	leaq 128(%rsp), %rsp
     97 
     98 # WAS cmoveq stderr@GOTPCREL(%rip), %r11
     99 	jne 999f
    100 	leaq -128(%rsp), %rsp
    101 	pushf
    102 	leaq stderr_GOTPCREL_external(%rip), %r11
    103 	addq (%r11), %r11
    104 	movq (%r11), %r11
    105 	popf
    106 	leaq	128(%rsp), %rsp
    107 999:
    108 # WAS cmoveq foo@GOTPCREL(%rip), %r11
    109 	jne 999f
    110 	leaq	.Lfoo_local_target(%rip), %r11
    111 999:
    112 # WAS cmovneq stderr@GOTPCREL(%rip), %r11
    113 	je 999f
    114 	leaq -128(%rsp), %rsp
    115 	pushf
    116 	leaq stderr_GOTPCREL_external(%rip), %r11
    117 	addq (%r11), %r11
    118 	movq (%r11), %r11
    119 	popf
    120 	leaq	128(%rsp), %rsp
    121 999:
    122 # WAS cmovneq foo@GOTPCREL(%rip), %r11
    123 	je 999f
    124 	leaq	.Lfoo_local_target(%rip), %r11
    125 999:
    126 
    127 # WAS movsd foo@GOTPCREL(%rip), %xmm0
    128 	leaq -128(%rsp), %rsp
    129 	pushq %rax
    130 	leaq	.Lfoo_local_target(%rip), %rax
    131 	movq %rax, %xmm0
    132 	popq %rax
    133 	leaq 128(%rsp), %rsp
    134 # WAS vmovsd foo@GOTPCREL(%rip), %xmm0
    135 	leaq -128(%rsp), %rsp
    136 	pushq %rax
    137 	leaq	.Lfoo_local_target(%rip), %rax
    138 	vmovq %rax, %xmm0
    139 	popq %rax
    140 	leaq 128(%rsp), %rsp
    141 
    142 	# movsd without arguments should be left as-is.
    143 	movsd
    144 
    145 	# Synthesized symbols do not use the GOT.
    146 # WAS movq BORINGSSL_bcm_text_start@GOTPCREL(%rip), %r11
    147 	leaq	BORINGSSL_bcm_text_start(%rip), %r11
    148 # WAS movq foobar_bss_get@GOTPCREL(%rip), %r11
    149 	leaq	foobar_bss_get(%rip), %r11
    150 # WAS movq OPENSSL_ia32cap_get@GOTPCREL(%rip), %r11
    151 	leaq	.LOPENSSL_ia32cap_get_local_target(%rip), %r11
    152 
    153 	# Transforming moves run the transform in-place after the load.
    154 # WAS vpbroadcastq stderr@GOTPCREL(%rip), %xmm0
    155 	leaq -128(%rsp), %rsp
    156 	pushq %rax
    157 	pushf
    158 	leaq stderr_GOTPCREL_external(%rip), %rax
    159 	addq (%rax), %rax
    160 	movq (%rax), %rax
    161 	popf
    162 	vmovq %rax, %xmm0
    163 	popq %rax
    164 	leaq 128(%rsp), %rsp
    165 	vpbroadcastq %xmm0, %xmm0
    166 # WAS vpbroadcastq foo@GOTPCREL(%rip), %xmm0
    167 	leaq -128(%rsp), %rsp
    168 	pushq %rax
    169 	leaq	.Lfoo_local_target(%rip), %rax
    170 	vmovq %rax, %xmm0
    171 	popq %rax
    172 	leaq 128(%rsp), %rsp
    173 	vpbroadcastq %xmm0, %xmm0
    174 
    175 .comm foobar,64,32
    176 .text
    177 .loc 1 2 0
    178 BORINGSSL_bcm_text_end:
    179 .type foobar_bss_get, @function
    180 foobar_bss_get:
    181 	leaq	foobar(%rip), %rax
    182 	ret
    183 .type stderr_GOTPCREL_external, @object
    184 .size stderr_GOTPCREL_external, 8
    185 stderr_GOTPCREL_external:
    186 	.long stderr@GOTPCREL
    187 	.long 0
    188 .type OPENSSL_ia32cap_get, @function
    189 .globl OPENSSL_ia32cap_get
    190 .LOPENSSL_ia32cap_get_local_target:
    191 OPENSSL_ia32cap_get:
    192 	leaq OPENSSL_ia32cap_P(%rip), %rax
    193 	ret
    194 .extern OPENSSL_ia32cap_P
    195 .type OPENSSL_ia32cap_addr_delta, @object
    196 .size OPENSSL_ia32cap_addr_delta, 8
    197 OPENSSL_ia32cap_addr_delta:
    198 .quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
    199 .type BORINGSSL_bcm_text_hash, @object
    200 .size BORINGSSL_bcm_text_hash, 64
    201 BORINGSSL_bcm_text_hash:
    202 .byte 0xae
    203 .byte 0x2c
    204 .byte 0xea
    205 .byte 0x2a
    206 .byte 0xbd
    207 .byte 0xa6
    208 .byte 0xf3
    209 .byte 0xec
    210 .byte 0x97
    211 .byte 0x7f
    212 .byte 0x9b
    213 .byte 0xf6
    214 .byte 0x94
    215 .byte 0x9a
    216 .byte 0xfc
    217 .byte 0x83
    218 .byte 0x68
    219 .byte 0x27
    220 .byte 0xcb
    221 .byte 0xa0
    222 .byte 0xa0
    223 .byte 0x9f
    224 .byte 0x6b
    225 .byte 0x6f
    226 .byte 0xde
    227 .byte 0x52
    228 .byte 0xcd
    229 .byte 0xe2
    230 .byte 0xcd
    231 .byte 0xff
    232 .byte 0x31
    233 .byte 0x80
    234 .byte 0xa2
    235 .byte 0xd4
    236 .byte 0xc3
    237 .byte 0x66
    238 .byte 0xf
    239 .byte 0xc2
    240 .byte 0x6a
    241 .byte 0x7b
    242 .byte 0xf4
    243 .byte 0xbe
    244 .byte 0x39
    245 .byte 0xa2
    246 .byte 0xd7
    247 .byte 0x25
    248 .byte 0xdb
    249 .byte 0x21
    250 .byte 0x98
    251 .byte 0xe9
    252 .byte 0xd5
    253 .byte 0x53
    254 .byte 0xbf
    255 .byte 0x5c
    256 .byte 0x32
    257 .byte 0x6
    258 .byte 0x83
    259 .byte 0x34
    260 .byte 0xc
    261 .byte 0x65
    262 .byte 0x89
    263 .byte 0x52
    264 .byte 0xbd
    265 .byte 0x1f
    266