save registers in the debug output code (return value is overwritten too)
This commit is contained in:
parent
a57ecb95f6
commit
b50118ca3e
@ -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'push('$Lstring' . ++$constl);
|
||||||
&main'call('puts');
|
&main'call('puts');
|
||||||
$stack-=4;
|
$stack-=4;
|
||||||
&main'add("esp",4);
|
&main'add("esp",4);
|
||||||
|
&popvars();
|
||||||
|
|
||||||
$const .= "Lstring$constl:\n\t.string \"@_[0]\"\n";
|
$const .= "Lstring$constl:\n\t.string \"@_[0]\"\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub main'putx
|
sub main'putx
|
||||||
{
|
{
|
||||||
|
&pushvars();
|
||||||
&main'push($_[0]);
|
&main'push($_[0]);
|
||||||
&main'push('$Lstring' . ++$constl);
|
&main'push('$Lstring' . ++$constl);
|
||||||
&main'call('printf');
|
&main'call('printf');
|
||||||
$stack-=8;
|
$stack-=8;
|
||||||
&main'add("esp",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
|
sub main'printf
|
||||||
{
|
{
|
||||||
$ostack = $stack;
|
$ostack = $stack;
|
||||||
|
&pushvars();
|
||||||
for ($i = @_ - 1; $i >= 0; $i--)
|
for ($i = @_ - 1; $i >= 0; $i--)
|
||||||
{
|
{
|
||||||
$constl++;
|
$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");
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user