OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env perl |
| 2 |
| 3 $output=shift; |
| 4 $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; |
| 5 open STDOUT,"| $^X ${dir}../crypto/perlasm/x86_64-xlate.pl $output"; |
| 6 push(@INC,"${dir}."); |
| 7 |
| 8 require "uplink-common.pl"; |
| 9 |
| 10 $prefix="_lazy"; |
| 11 |
| 12 print <<___; |
| 13 .text |
| 14 .extern OPENSSL_Uplink |
| 15 .globl OPENSSL_UplinkTable |
| 16 ___ |
| 17 for ($i=1;$i<=$N;$i++) { |
| 18 print <<___; |
| 19 .type $prefix${i},\@abi-omnipotent |
| 20 .align 16 |
| 21 $prefix${i}: |
| 22 .byte 0x48,0x83,0xEC,0x28 # sub rsp,40 |
| 23 mov %rcx,48(%rsp) |
| 24 mov %rdx,56(%rsp) |
| 25 mov %r8,64(%rsp) |
| 26 mov %r9,72(%rsp) |
| 27 lea OPENSSL_UplinkTable(%rip),%rcx |
| 28 mov \$$i,%rdx |
| 29 call OPENSSL_Uplink |
| 30 mov 48(%rsp),%rcx |
| 31 mov 56(%rsp),%rdx |
| 32 mov 64(%rsp),%r8 |
| 33 mov 72(%rsp),%r9 |
| 34 lea OPENSSL_UplinkTable(%rip),%rax |
| 35 add \$40,%rsp |
| 36 jmp *8*$i(%rax) |
| 37 $prefix${i}_end: |
| 38 .size $prefix${i},.-$prefix${i} |
| 39 ___ |
| 40 } |
| 41 print <<___; |
| 42 .data |
| 43 OPENSSL_UplinkTable: |
| 44 .quad $N |
| 45 ___ |
| 46 for ($i=1;$i<=$N;$i++) { print " .quad $prefix$i\n"; } |
| 47 print <<___; |
| 48 .section .pdata,"r" |
| 49 .align 4 |
| 50 ___ |
| 51 for ($i=1;$i<=$N;$i++) { |
| 52 print <<___; |
| 53 .rva $prefix${i},$prefix${i}_end,${prefix}_unwind_info |
| 54 ___ |
| 55 } |
| 56 print <<___; |
| 57 .section .xdata,"r" |
| 58 .align 8 |
| 59 ${prefix}_unwind_info: |
| 60 .byte 0x01,0x04,0x01,0x00 |
| 61 .byte 0x04,0x42,0x00,0x00 |
| 62 ___ |
| 63 |
| 64 close STDOUT; |
OLD | NEW |