| .text |
| BORINGSSL_bcm_text_start: |
| .type foo, @function |
| .globl foo |
| .Lfoo_local_target: |
| foo: |
| movq $0, %rax |
| ret |
| |
| .Lbar_local_target: |
| bar: |
| # References to globals must be rewritten to their local targets. |
| # WAS call foo |
| call .Lfoo_local_target |
| # WAS jmp foo |
| jmp .Lfoo_local_target |
| # WAS jbe foo |
| jbe .Lfoo_local_target |
| # WAS jne foo |
| jne .Lfoo_local_target |
| |
| # Jumps to PLT symbols are rewritten through redirectors. |
| # WAS call memcpy@PLT |
| call bcm_redirector_memcpy |
| # WAS jmp memcpy@PLT |
| jmp bcm_redirector_memcpy |
| # WAS jbe memcpy@PLT |
| jbe bcm_redirector_memcpy |
| |
| # Jumps to local PLT symbols use their local targets. |
| # WAS call foo@PLT |
| call .Lfoo_local_target |
| # WAS jmp foo@PLT |
| jmp .Lfoo_local_target |
| # WAS jbe foo@PLT |
| jbe .Lfoo_local_target |
| |
| # Synthesized symbols are treated as local ones. |
| # WAS call OPENSSL_ia32cap_get@PLT |
| call OPENSSL_ia32cap_get |
| |
| # References to local labels are left as-is in the first file. |
| .Llocal_label: |
| |
| jbe .Llocal_label |
| leaq .Llocal_label+2048(%rip), %r14 |
| leaq .Llocal_label+2048+1024(%rip), %r14 |
| |
| # WAS .section .rodata |
| .text |
| .L1: |
| |
| .quad 42 |
| .L2: |
| |
| .quad .L2-.L1 |
| |
| # Local labels and their jumps are left alone. |
| .text |
| jmp 1f |
| 1: |
| |
| jmp 1b |
| # References to local labels are rewrittenn in subsequent files. |
| .Llocal_label_BCM_1: |
| |
| # WAS jbe .Llocal_label |
| jbe .Llocal_label_BCM_1 |
| # WAS leaq .Llocal_label+2048(%rip), %r14 |
| leaq .Llocal_label_BCM_1+2048(%rip), %r14 |
| # WAS leaq .Llocal_label+2048+1024(%rip), %r14 |
| leaq .Llocal_label_BCM_1+2048+1024(%rip), %r14 |
| |
| # WAS .section .rodata |
| .text |
| .L1_BCM_1: |
| |
| .quad 42 |
| .L2_BCM_1: |
| |
| # WAS .quad .L2-.L1 |
| .quad .L2_BCM_1-.L1_BCM_1 |
| |
| .text |
| BORINGSSL_bcm_text_end: |
| .type bcm_redirector_memcpy, @function |
| bcm_redirector_memcpy: |
| jmp memcpy@PLT |
| .type OPENSSL_ia32cap_get, @function |
| 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 |