diff --git a/crypto/perlasm/x86unix.pl b/crypto/perlasm/x86unix.pl index 560da0a7083a321fc026470a00dcf30a29f5ef02..51494e2a449c9b9e17f8d23e0290e8004b3560e4 100644 --- a/crypto/perlasm/x86unix.pl +++ b/crypto/perlasm/x86unix.pl @@ -464,23 +464,29 @@ sub main'data_word push(@out,"\t.long $_[0]\n"); } +# debug output functions: puts, putx, printf + sub main'puts { + &pushvars(); &main'push('$Lstring' . ++$constl); &main'call('puts'); $stack-=4; &main'add("esp",4); + &popvars(); $const .= "Lstring$constl:\n\t.string \"@_[0]\"\n"; } sub main'putx { + &pushvars(); &main'push($_[0]); &main'push('$Lstring' . ++$constl); &main'call('printf'); $stack-=8; &main'add("esp",8); + &popvars(); $const .= "Lstring$constl:\n\t.string \"\%X\"\n"; } @@ -488,6 +494,7 @@ sub main'putx sub main'printf { $ostack = $stack; + &pushvars(); for ($i = @_ - 1; $i >= 0; $i--) { $constl++; @@ -509,6 +516,21 @@ sub main'printf } } &main'call('printf'); - $stack=$ostack; + $stack-=4*@_; + &popvars(); &main'add("esp",4*@_); } + +sub pushvars + { + &main'push("edx"); + &main'push("ecx"); + &main'push("eax"); + } + +sub popvars + { + &main'pop("eax"); + &main'pop("ecx"); + &main'pop("edx"); + }