summaryrefslogtreecommitdiffstats
path: root/ms
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2008-12-19 11:17:29 +0000
committerAndy Polyakov <appro@openssl.org>2008-12-19 11:17:29 +0000
commitbe01f79d3d1b1e661d390d86cff4335daed8bfcd (patch)
treebe37d6b3ef3a79d9233b336d676d220b0555ce48 /ms
parentbf785c984907f74d0a869ed1e6b5855888b1df96 (diff)
x86_64 assembler pack: add support for Win64 SEH.
Diffstat (limited to 'ms')
-rwxr-xr-xms/uplink-x86_64.pl16
1 files changed, 9 insertions, 7 deletions
diff --git a/ms/uplink-x86_64.pl b/ms/uplink-x86_64.pl
index 80807ce05b..9acbf6be6f 100755
--- a/ms/uplink-x86_64.pl
+++ b/ms/uplink-x86_64.pl
@@ -12,6 +12,7 @@ $prefix="_lazy";
print <<___;
.text
.extern OPENSSL_Uplink
+.globl OPENSSL_UplinkTable
___
for ($i=1;$i<=$N;$i++) {
print <<___;
@@ -30,8 +31,8 @@ $prefix${i}:
mov 56(%rsp),%rdx
mov 64(%rsp),%r8
mov 72(%rsp),%r9
- add \$40,%rsp
lea OPENSSL_UplinkTable(%rip),%rax
+ add \$40,%rsp
jmp *8*$i(%rax)
$prefix${i}_end:
.size $prefix${i},.-$prefix${i}
@@ -39,24 +40,25 @@ ___
}
print <<___;
.data
-.globl OPENSSL_UplinkTable
OPENSSL_UplinkTable:
.quad $N
___
for ($i=1;$i<=$N;$i++) { print " .quad $prefix$i\n"; }
print <<___;
-.section .pdata
+.section .pdata,"r"
+.align 4
___
for ($i=1;$i<=$N;$i++) {
print <<___;
- .long $prefix${i}
- .long $prefix${i}_end
- .long ${prefix}_unwind_info
+ .rva $prefix${i},$prefix${i}_end,${prefix}_unwind_info
___
}
print <<___;
-.section .xdata
+.section .xdata,"r"
+.align 8
${prefix}_unwind_info:
.byte 0x01,0x04,0x01,0x00
.byte 0x04,0x42,0x00,0x00
___
+
+close STDOUT;