1.text 2BORINGSSL_bcm_text_start: 3 .type foo, @function 4 .globl foo 5.Lfoo_local_target: 6foo: 7 movq $0, %rax 8 ret 9 10.Lbar_local_target: 11bar: 12 # References to globals must be rewritten to their local targets. 13# WAS call foo 14 call .Lfoo_local_target 15# WAS jmp foo 16 jmp .Lfoo_local_target 17# WAS jbe foo 18 jbe .Lfoo_local_target 19# WAS jne foo 20 jne .Lfoo_local_target 21 22 # Jumps to PLT symbols are rewritten through redirectors. 23# WAS call memcpy@PLT 24 call bcm_redirector_memcpy 25# WAS jmp memcpy@PLT 26 jmp bcm_redirector_memcpy 27# WAS jbe memcpy@PLT 28 jbe bcm_redirector_memcpy 29 30 # Jumps to local PLT symbols use their local targets. 31# WAS call foo@PLT 32 call .Lfoo_local_target 33# WAS jmp foo@PLT 34 jmp .Lfoo_local_target 35# WAS jbe foo@PLT 36 jbe .Lfoo_local_target 37 38 # Synthesized symbols are treated as local ones. 39# WAS call OPENSSL_ia32cap_get@PLT 40 call OPENSSL_ia32cap_get 41 42 # References to local labels are left as-is in the first file. 43.Llocal_label: 44 45 jbe .Llocal_label 46 leaq .Llocal_label+2048(%rip), %r14 47 leaq .Llocal_label+2048+1024(%rip), %r14 48 49# WAS .section .rodata 50.text 51.L1: 52 53 .quad 42 54.L2: 55 56 .quad .L2-.L1 57 58 # Local labels and their jumps are left alone. 59 .text 60 jmp 1f 611: 62 63 jmp 1b 64 # References to local labels are rewrittenn in subsequent files. 65.Llocal_label_BCM_1: 66 67# WAS jbe .Llocal_label 68 jbe .Llocal_label_BCM_1 69# WAS leaq .Llocal_label+2048(%rip), %r14 70 leaq .Llocal_label_BCM_1+2048(%rip), %r14 71# WAS leaq .Llocal_label+2048+1024(%rip), %r14 72 leaq .Llocal_label_BCM_1+2048+1024(%rip), %r14 73 74# WAS .section .rodata 75.text 76.L1_BCM_1: 77 78 .quad 42 79.L2_BCM_1: 80 81# WAS .quad .L2-.L1 82 .quad .L2_BCM_1-.L1_BCM_1 83 84.text 85BORINGSSL_bcm_text_end: 86.type bcm_redirector_memcpy, @function 87bcm_redirector_memcpy: 88 jmp memcpy@PLT 89.type OPENSSL_ia32cap_get, @function 90OPENSSL_ia32cap_get: 91 leaq OPENSSL_ia32cap_P(%rip), %rax 92 ret 93.extern OPENSSL_ia32cap_P 94.type OPENSSL_ia32cap_addr_delta, @object 95.size OPENSSL_ia32cap_addr_delta, 8 96OPENSSL_ia32cap_addr_delta: 97.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta 98.type BORINGSSL_bcm_text_hash, @object 99.size BORINGSSL_bcm_text_hash, 64 100BORINGSSL_bcm_text_hash: 101.byte 0xae 102.byte 0x2c 103.byte 0xea 104.byte 0x2a 105.byte 0xbd 106.byte 0xa6 107.byte 0xf3 108.byte 0xec 109.byte 0x97 110.byte 0x7f 111.byte 0x9b 112.byte 0xf6 113.byte 0x94 114.byte 0x9a 115.byte 0xfc 116.byte 0x83 117.byte 0x68 118.byte 0x27 119.byte 0xcb 120.byte 0xa0 121.byte 0xa0 122.byte 0x9f 123.byte 0x6b 124.byte 0x6f 125.byte 0xde 126.byte 0x52 127.byte 0xcd 128.byte 0xe2 129.byte 0xcd 130.byte 0xff 131.byte 0x31 132.byte 0x80 133.byte 0xa2 134.byte 0xd4 135.byte 0xc3 136.byte 0x66 137.byte 0xf 138.byte 0xc2 139.byte 0x6a 140.byte 0x7b 141.byte 0xf4 142.byte 0xbe 143.byte 0x39 144.byte 0xa2 145.byte 0xd7 146.byte 0x25 147.byte 0xdb 148.byte 0x21 149.byte 0x98 150.byte 0xe9 151.byte 0xd5 152.byte 0x53 153.byte 0xbf 154.byte 0x5c 155.byte 0x32 156.byte 0x6 157.byte 0x83 158.byte 0x34 159.byte 0xc 160.byte 0x65 161.byte 0x89 162.byte 0x52 163.byte 0xbd 164.byte 0x1f 165