Correct last wrong commit.

+ Use Get_Frame function instead of assmebler code.
  + Add a check for FPU stack on i386.

git-svn-id: trunk@17885 -
This commit is contained in:
pierre 2011-06-30 14:48:20 +00:00
parent e98c62cb68
commit 72f2d37bac

View File

@ -36,19 +36,16 @@ type
var
success : boolean;
{$ifdef x86_64}
{$define UseStackCheck}
{$asmmode att}
{$define USE_ASM}
{$endif x86_64}
{$ifdef i386}
{$define UseStackCheck}
{$asmmode att}
{$define USE_ASM}
{$endif i386}
{$ifdef HAS_GETFRAME}
{$define UseStackCheck}
{$endif HAS_GETFRAME}
{$ifdef CPUx86_64}
{$define HAS_GET_FRAME}
{$endif CPUx86_64}
{$ifdef CPUi386}
{$define HAS_GET_FRAME}
{$define TestFPUStack}
{$endif CPUi386}
{$ifdef HAS_GET_FRAME}
{$define UseStackCheck}
{$endif HAS_GET_FRAME}
{$ifdef UseStackCheck}
var
@ -58,19 +55,9 @@ procedure SetStack;
var
newval : pointer;
begin
{$ifdef USE_ASM}
asm
{$ifdef i386}
movl %esp,newval
{$endif i386}
{$ifdef x86_64}
movl %rsp,newval
{$endif x86_64}
end;
{$endif USE_ASM}
{$ifdef HAS_GETFRAME}
newval:=GetFrame;
{$endif HAS_GETFRAME}
{$ifdef HAS_GET_FRAME}
newval:=Get_Frame;
{$endif HAS_GET_FRAME}
stackval:=newval;
end;
@ -78,19 +65,9 @@ procedure CheckStack;
var
newval : pointer;
begin
{$ifdef USE_ASM}
asm
{$ifdef i386}
movl %esp, newval
{$endif i386}
{$ifdef x86_64}
movl %rsp,newval
{$endif x86_64}
end;
{$endif USE_ASM}
{$ifdef HAS_GETFRAME}
newval:=GetFrame;
{$endif HAS_GETFRAME}
{$ifdef HAS_GET_FRAME}
newval:=Get_Frame;
{$endif HAS_GET_FRAME}
if newval<>stackval then
begin
Writeln('Stack value changed: 0x',
@ -384,6 +361,9 @@ function pass31a(b: byte; s : struct31) : struct31; cdecl; external;
procedure dotest;
var
{$ifdef TestFPUStack }
i : longint;
{$endif TestFPUStack }
s1, s1a: struct1;
s2, s2a: struct2;
s3, s3a: struct3;
@ -712,6 +692,9 @@ begin
{$endif UseStackCheck}
{$endif}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s1a:=pass1a(1,s1);
{$ifdef UseStackCheck}
CheckStack;
@ -720,6 +703,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s2a:=pass2a(2,s2);
{$ifdef UseStackCheck}
CheckStack;
@ -728,6 +714,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s3a:=pass3a(3,s3);
{$ifdef UseStackCheck}
CheckStack;
@ -736,6 +725,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s3a:=pass3a(3,s3);
{$ifdef UseStackCheck}
CheckStack;
@ -744,6 +736,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s4a:=pass4a(4,s4);
{$ifdef UseStackCheck}
CheckStack;
@ -752,6 +747,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s5a:=pass5a(5,s5);
{$ifdef UseStackCheck}
CheckStack;
@ -760,6 +758,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s6a:=pass6a(6,s6);
{$ifdef UseStackCheck}
CheckStack;
@ -768,6 +769,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s7a:=pass7a(7,s7);
{$ifdef UseStackCheck}
CheckStack;
@ -776,6 +780,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s7a:=pass7a(7,s7);
{$ifdef UseStackCheck}
CheckStack;
@ -784,6 +791,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s8a:=pass8a(8,s8);
{$ifdef UseStackCheck}
CheckStack;
@ -792,6 +802,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s9a:=pass9a(9,s9);
{$ifdef UseStackCheck}
CheckStack;
@ -800,6 +813,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s10a:=pass10a(10,s10);
{$ifdef UseStackCheck}
CheckStack;
@ -808,6 +824,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s10a:=pass10a(10,s10);
{$ifdef UseStackCheck}
CheckStack;
@ -819,6 +838,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s11a:=pass11a(11,s11);
{$ifdef UseStackCheck}
CheckStack;
@ -827,6 +849,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s12a:=pass12a(12,s12);
{$ifdef UseStackCheck}
CheckStack;
@ -835,6 +860,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s13a:=pass13a(13,s13);
{$ifdef UseStackCheck}
CheckStack;
@ -843,6 +871,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s14a:=pass14a(14,s14);
{$ifdef UseStackCheck}
CheckStack;
@ -851,6 +882,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s15a:=pass15a(15,s15);
{$ifdef UseStackCheck}
CheckStack;
@ -859,6 +893,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s16a:=pass16a(16,s16);
{$ifdef UseStackCheck}
CheckStack;
@ -867,6 +904,9 @@ begin
{$ifdef UseStackCheck}
CheckStack;
{$endif UseStackCheck}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s17a:=pass17a(17,s17);
{$ifdef UseStackCheck}
CheckStack;
@ -876,6 +916,9 @@ begin
CheckStack;
{$endif UseStackCheck}
{$ifdef FPC_HAS_TYPE_EXTENDED}
{$ifdef TestFPUStack }
for i:=1 to 12 do
{$endif TestFPUStack }
s31a:=pass31a(31,s31);
{$ifdef UseStackCheck}
CheckStack;