save registers in the debug output code (return value is overwritten too)
authorUlf Möller <ulf@openssl.org>
Tue, 5 Dec 2000 05:10:05 +0000 (05:10 +0000)
committerUlf Möller <ulf@openssl.org>
Tue, 5 Dec 2000 05:10:05 +0000 (05:10 +0000)
crypto/perlasm/x86unix.pl

index 560da0a7083a321fc026470a00dcf30a29f5ef02..51494e2a449c9b9e17f8d23e0290e8004b3560e4 100644 (file)
@@ -464,23 +464,29 @@ sub main'data_word
        push(@out,"\t.long $_[0]\n");
        }
 
        push(@out,"\t.long $_[0]\n");
        }
 
+# debug output functions: puts, putx, printf
+
 sub main'puts
        {
 sub main'puts
        {
+       &pushvars();
        &main'push('$Lstring' . ++$constl);
        &main'call('puts');
        $stack-=4;
        &main'add("esp",4);
        &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
        {
 
        $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);
        &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";
        }
 
        $const .= "Lstring$constl:\n\t.string \"\%X\"\n";
        }
@@ -488,6 +494,7 @@ sub main'putx
 sub main'printf
        {
        $ostack = $stack;
 sub main'printf
        {
        $ostack = $stack;
+       &pushvars();
        for ($i = @_ - 1; $i >= 0; $i--)
                {
                $constl++;
        for ($i = @_ - 1; $i >= 0; $i--)
                {
                $constl++;
@@ -509,6 +516,21 @@ sub main'printf
                        }
                }
        &main'call('printf');
                        }
                }
        &main'call('printf');
-       $stack=$ostack;
+       $stack-=4*@_;
+       &popvars();
        &main'add("esp",4*@_);
        }
        &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");
+       }