Mirror of BoringSSL (grpc依赖)
https://boringssl.googlesource.com/boringssl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
7.6 KiB
371 lines
7.6 KiB
.text |
|
.file 1 "inserted_by_delocate.c" |
|
.loc 1 1 0 |
|
BORINGSSL_bcm_text_start: |
|
.text |
|
.Lfoo_local_target: |
|
foo: |
|
.Lbar_local_target: |
|
bar: |
|
# leaq of OPENSSL_ia32cap_P is supported. |
|
# WAS leaq OPENSSL_ia32cap_P(%rip), %r11 |
|
leaq -128(%rsp), %rsp |
|
pushfq |
|
leaq OPENSSL_ia32cap_addr_delta(%rip), %r11 |
|
addq (%r11), %r11 |
|
popfq |
|
leaq 128(%rsp), %rsp |
|
|
|
# As is the equivalent GOTPCREL movq. |
|
# WAS movq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12 |
|
leaq -128(%rsp), %rsp |
|
pushfq |
|
leaq OPENSSL_ia32cap_addr_delta(%rip), %r12 |
|
addq (%r12), %r12 |
|
popfq |
|
leaq 128(%rsp), %rsp |
|
|
|
# And a non-movq instruction via the GOT. |
|
# WAS orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
pushfq |
|
leaq OPENSSL_ia32cap_addr_delta(%rip), %rax |
|
addq (%rax), %rax |
|
popfq |
|
orq %rax, %r12 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
|
|
# ... which targets the default temp register |
|
# WAS orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %rax |
|
leaq -128(%rsp), %rsp |
|
pushq %rbx |
|
pushfq |
|
leaq OPENSSL_ia32cap_addr_delta(%rip), %rbx |
|
addq (%rbx), %rbx |
|
popfq |
|
orq %rbx, %rax |
|
popq %rbx |
|
leaq 128(%rsp), %rsp |
|
|
|
# Test that GOTPCREL accesses get translated. They are handled |
|
# differently for local and external symbols. |
|
|
|
# WAS pushq stderr@GOTPCREL(%rip) |
|
pushq %rax |
|
leaq -128(%rsp), %rsp |
|
pushf |
|
leaq stderr_GOTPCREL_external(%rip), %rax |
|
addq (%rax), %rax |
|
movq (%rax), %rax |
|
popf |
|
leaq 128(%rsp), %rsp |
|
xchg %rax, (%rsp) |
|
# WAS pushq foo@GOTPCREL(%rip) |
|
pushq %rax |
|
leaq .Lfoo_local_target(%rip), %rax |
|
xchg %rax, (%rsp) |
|
|
|
# WAS movq stderr@GOTPCREL(%rip), %r11 |
|
leaq -128(%rsp), %rsp |
|
pushf |
|
leaq stderr_GOTPCREL_external(%rip), %r11 |
|
addq (%r11), %r11 |
|
movq (%r11), %r11 |
|
popf |
|
leaq 128(%rsp), %rsp |
|
# WAS movq foo@GOTPCREL(%rip), %r11 |
|
leaq .Lfoo_local_target(%rip), %r11 |
|
|
|
# WAS vmovq stderr@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
pushf |
|
leaq stderr_GOTPCREL_external(%rip), %rax |
|
addq (%rax), %rax |
|
movq (%rax), %rax |
|
popf |
|
vmovq %rax, %xmm0 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
# WAS vmovq foo@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
leaq .Lfoo_local_target(%rip), %rax |
|
vmovq %rax, %xmm0 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
|
|
# WAS cmoveq stderr@GOTPCREL(%rip), %r11 |
|
jne 999f |
|
leaq -128(%rsp), %rsp |
|
pushf |
|
leaq stderr_GOTPCREL_external(%rip), %r11 |
|
addq (%r11), %r11 |
|
movq (%r11), %r11 |
|
popf |
|
leaq 128(%rsp), %rsp |
|
999: |
|
# WAS cmoveq foo@GOTPCREL(%rip), %r11 |
|
jne 999f |
|
leaq .Lfoo_local_target(%rip), %r11 |
|
999: |
|
# WAS cmovneq stderr@GOTPCREL(%rip), %r11 |
|
je 999f |
|
leaq -128(%rsp), %rsp |
|
pushf |
|
leaq stderr_GOTPCREL_external(%rip), %r11 |
|
addq (%r11), %r11 |
|
movq (%r11), %r11 |
|
popf |
|
leaq 128(%rsp), %rsp |
|
999: |
|
# WAS cmovneq foo@GOTPCREL(%rip), %r11 |
|
je 999f |
|
leaq .Lfoo_local_target(%rip), %r11 |
|
999: |
|
|
|
# WAS movsd foo@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
leaq .Lfoo_local_target(%rip), %rax |
|
movq %rax, %xmm0 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
# WAS vmovsd foo@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
leaq .Lfoo_local_target(%rip), %rax |
|
vmovq %rax, %xmm0 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
|
|
# movsd without arguments should be left as-is. |
|
movsd |
|
|
|
# Synthesized symbols do not use the GOT. |
|
# WAS movq BORINGSSL_bcm_text_start@GOTPCREL(%rip), %r11 |
|
leaq BORINGSSL_bcm_text_start(%rip), %r11 |
|
# WAS movq foobar_bss_get@GOTPCREL(%rip), %r11 |
|
leaq foobar_bss_get(%rip), %r11 |
|
# WAS movq OPENSSL_ia32cap_get@GOTPCREL(%rip), %r11 |
|
leaq .LOPENSSL_ia32cap_get_local_target(%rip), %r11 |
|
|
|
# Transforming moves run the transform in-place after the load. |
|
# WAS vpbroadcastq stderr@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
pushf |
|
leaq stderr_GOTPCREL_external(%rip), %rax |
|
addq (%rax), %rax |
|
movq (%rax), %rax |
|
popf |
|
vmovq %rax, %xmm0 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
vpbroadcastq %xmm0, %xmm0 |
|
# WAS vpbroadcastq foo@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
leaq .Lfoo_local_target(%rip), %rax |
|
vmovq %rax, %xmm0 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
vpbroadcastq %xmm0, %xmm0 |
|
|
|
# GCC sometimes loads a pair of pointers into an XMM register and |
|
# writes them together. |
|
# WAS movq gcm_gmult_clmul@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
pushf |
|
leaq gcm_gmult_clmul_GOTPCREL_external(%rip), %rax |
|
addq (%rax), %rax |
|
movq (%rax), %rax |
|
popf |
|
movq %rax, %xmm0 |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
# WAS movhps gcm_ghash_clmul@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
pushf |
|
leaq gcm_ghash_clmul_GOTPCREL_external(%rip), %rax |
|
addq (%rax), %rax |
|
movq (%rax), %rax |
|
popf |
|
pushq %rax |
|
movhps (%rsp), %xmm0 |
|
leaq 8(%rsp), %rsp |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
movaps %xmm0, (%rsp) |
|
|
|
# We've yet to observe this, but the above could also have been written |
|
# with movlps. |
|
# WAS movhps gcm_ghash_clmul@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
pushf |
|
leaq gcm_ghash_clmul_GOTPCREL_external(%rip), %rax |
|
addq (%rax), %rax |
|
movq (%rax), %rax |
|
popf |
|
pushq %rax |
|
movhps (%rsp), %xmm0 |
|
leaq 8(%rsp), %rsp |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
# WAS movlps gcm_gmult_clmul@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
pushf |
|
leaq gcm_gmult_clmul_GOTPCREL_external(%rip), %rax |
|
addq (%rax), %rax |
|
movq (%rax), %rax |
|
popf |
|
pushq %rax |
|
movlps (%rsp), %xmm0 |
|
leaq 8(%rsp), %rsp |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
movaps %xmm0, (%rsp) |
|
|
|
# Same as above, but with a local symbol. |
|
# WAS movhps foo@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
leaq .Lfoo_local_target(%rip), %rax |
|
pushq %rax |
|
movhps (%rsp), %xmm0 |
|
leaq 8(%rsp), %rsp |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
# WAS movlps bar@GOTPCREL(%rip), %xmm0 |
|
leaq -128(%rsp), %rsp |
|
pushq %rax |
|
leaq .Lbar_local_target(%rip), %rax |
|
pushq %rax |
|
movlps (%rsp), %xmm0 |
|
leaq 8(%rsp), %rsp |
|
popq %rax |
|
leaq 128(%rsp), %rsp |
|
movaps %xmm0, (%rsp) |
|
|
|
# WAS cmpq foo@GOTPCREL(%rip), %rax |
|
leaq -128(%rsp), %rsp |
|
pushq %rbx |
|
leaq .Lfoo_local_target(%rip), %rbx |
|
cmpq %rbx, %rax |
|
popq %rbx |
|
leaq 128(%rsp), %rsp |
|
# WAS cmpq %rax, foo@GOTPCREL(%rip) |
|
leaq -128(%rsp), %rsp |
|
pushq %rbx |
|
leaq .Lfoo_local_target(%rip), %rbx |
|
cmpq %rax, %rbx |
|
popq %rbx |
|
leaq 128(%rsp), %rsp |
|
|
|
.comm foobar,64,32 |
|
.text |
|
.loc 1 2 0 |
|
BORINGSSL_bcm_text_end: |
|
.type foobar_bss_get, @function |
|
foobar_bss_get: |
|
leaq foobar(%rip), %rax |
|
ret |
|
.type gcm_ghash_clmul_GOTPCREL_external, @object |
|
.size gcm_ghash_clmul_GOTPCREL_external, 8 |
|
gcm_ghash_clmul_GOTPCREL_external: |
|
.long gcm_ghash_clmul@GOTPCREL |
|
.long 0 |
|
.type gcm_gmult_clmul_GOTPCREL_external, @object |
|
.size gcm_gmult_clmul_GOTPCREL_external, 8 |
|
gcm_gmult_clmul_GOTPCREL_external: |
|
.long gcm_gmult_clmul@GOTPCREL |
|
.long 0 |
|
.type stderr_GOTPCREL_external, @object |
|
.size stderr_GOTPCREL_external, 8 |
|
stderr_GOTPCREL_external: |
|
.long stderr@GOTPCREL |
|
.long 0 |
|
.type OPENSSL_ia32cap_get, @function |
|
.globl OPENSSL_ia32cap_get |
|
.LOPENSSL_ia32cap_get_local_target: |
|
OPENSSL_ia32cap_get: |
|
leaq OPENSSL_ia32cap_P(%rip), %rax |
|
ret |
|
.extern OPENSSL_ia32cap_P |
|
.type OPENSSL_ia32cap_addr_delta, @object |
|
.size OPENSSL_ia32cap_addr_delta, 8 |
|
OPENSSL_ia32cap_addr_delta: |
|
.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta |
|
.type BORINGSSL_bcm_text_hash, @object |
|
.size BORINGSSL_bcm_text_hash, 64 |
|
BORINGSSL_bcm_text_hash: |
|
.byte 0xae |
|
.byte 0x2c |
|
.byte 0xea |
|
.byte 0x2a |
|
.byte 0xbd |
|
.byte 0xa6 |
|
.byte 0xf3 |
|
.byte 0xec |
|
.byte 0x97 |
|
.byte 0x7f |
|
.byte 0x9b |
|
.byte 0xf6 |
|
.byte 0x94 |
|
.byte 0x9a |
|
.byte 0xfc |
|
.byte 0x83 |
|
.byte 0x68 |
|
.byte 0x27 |
|
.byte 0xcb |
|
.byte 0xa0 |
|
.byte 0xa0 |
|
.byte 0x9f |
|
.byte 0x6b |
|
.byte 0x6f |
|
.byte 0xde |
|
.byte 0x52 |
|
.byte 0xcd |
|
.byte 0xe2 |
|
.byte 0xcd |
|
.byte 0xff |
|
.byte 0x31 |
|
.byte 0x80 |
|
.byte 0xa2 |
|
.byte 0xd4 |
|
.byte 0xc3 |
|
.byte 0x66 |
|
.byte 0xf |
|
.byte 0xc2 |
|
.byte 0x6a |
|
.byte 0x7b |
|
.byte 0xf4 |
|
.byte 0xbe |
|
.byte 0x39 |
|
.byte 0xa2 |
|
.byte 0xd7 |
|
.byte 0x25 |
|
.byte 0xdb |
|
.byte 0x21 |
|
.byte 0x98 |
|
.byte 0xe9 |
|
.byte 0xd5 |
|
.byte 0x53 |
|
.byte 0xbf |
|
.byte 0x5c |
|
.byte 0x32 |
|
.byte 0x6 |
|
.byte 0x83 |
|
.byte 0x34 |
|
.byte 0xc |
|
.byte 0x65 |
|
.byte 0x89 |
|
.byte 0x52 |
|
.byte 0xbd |
|
.byte 0x1f
|
|
|