* made it compilable with Dlephi 4 again

+ fixed problem with large stack allocations on win32
This commit is contained in:
florian 1999-07-18 10:19:38 +00:00
parent e1c3f703cc
commit 046acfb84b
20 changed files with 243 additions and 52 deletions

View File

@ -44,8 +44,10 @@ unit ag386att;
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
dos,strings, strings,
globtype,globals,systems, globtype,globals,systems,
files,verbose files,verbose
,i386base,i386asm ,i386base,i386asm
@ -814,7 +816,11 @@ unit ag386att;
end. end.
{ {
$Log$ $Log$
Revision 1.3 1999-07-03 00:27:04 peter Revision 1.4 1999-07-18 10:19:38 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.3 1999/07/03 00:27:04 peter
* better smartlinking support * better smartlinking support
Revision 1.2 1999/06/22 15:25:14 peter Revision 1.2 1999/06/22 15:25:14 peter

View File

@ -40,7 +40,7 @@ unit ag386int;
implementation implementation
uses uses
dos,strings, strings,
globtype,globals,systems,cobjects, globtype,globals,systems,cobjects,
files,verbose files,verbose
,i386base,i386asm ,i386base,i386asm
@ -627,7 +627,11 @@ ait_stab_function_name : ;
end. end.
{ {
$Log$ $Log$
Revision 1.47 1999-06-02 22:44:01 pierre Revision 1.48 1999-07-18 10:19:39 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.47 1999/06/02 22:44:01 pierre
* previous wrong log corrected * previous wrong log corrected
Revision 1.46 1999/06/02 22:25:26 pierre Revision 1.46 1999/06/02 22:25:26 pierre

View File

@ -41,7 +41,7 @@ unit ag386nsm;
implementation implementation
uses uses
dos,strings, strings,
globtype,globals,systems,cobjects, globtype,globals,systems,cobjects,
files,verbose files,verbose
,i386base,i386asm ,i386base,i386asm
@ -597,7 +597,11 @@ ait_stab_function_name : ;
end. end.
{ {
$Log$ $Log$
Revision 1.43 1999-06-02 22:44:02 pierre Revision 1.44 1999-07-18 10:19:41 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.43 1999/06/02 22:44:02 pierre
* previous wrong log corrected * previous wrong log corrected
Revision 1.42 1999/06/02 22:25:27 pierre Revision 1.42 1999/06/02 22:25:27 pierre

View File

@ -27,8 +27,10 @@ interface
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
dos,cobjects,globtype,globals,aasm; cobjects,globtype,globals,aasm;
const const
{$ifdef tp} {$ifdef tp}
@ -555,7 +557,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.51 1999-07-10 10:12:03 peter Revision 1.52 1999-07-18 10:19:42 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.51 1999/07/10 10:12:03 peter
* assembler smartlink message * assembler smartlink message
Revision 1.50 1999/07/03 00:27:05 peter Revision 1.50 1999/07/03 00:27:05 peter

View File

@ -30,7 +30,7 @@ unit cgai386;
{$ifdef dummy} {$ifdef dummy}
end { to get correct syntax highlighting } end { to get correct syntax highlighting }
{$endif dummy} {$endif dummy}
aasm,symtable; aasm,symtable,win_targ;
{$define TESTGETTEMP to store const that {$define TESTGETTEMP to store const that
are written into temps for later release PM } are written into temps for later release PM }
@ -2351,6 +2351,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
r : preference; r : preference;
len : longint; len : longint;
opsize : topsize; opsize : topsize;
again,ok : pasmlabel;
begin begin
if (psym(p)^.typ=varsym) and if (psym(p)^.typ=varsym) and
(pvarsym(p)^.varspez=vs_value) and (pvarsym(p)^.varspez=vs_value) and
@ -2373,9 +2374,47 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
exprasmlist^.concat(new(pai386, exprasmlist^.concat(new(pai386,
op_const_reg(A_IMUL,S_L, op_const_reg(A_IMUL,S_L,
parraydef(pvarsym(p)^.definition)^.definition^.size,R_EDI))); parraydef(pvarsym(p)^.definition)^.definition^.size,R_EDI)));
{ windows guards only a few pages for stack growing, }
{ so we have to access every page first }
if target_os.id=os_i386_win32 then
begin
getlabel(again);
getlabel(ok);
exprasmlist^.concat(new(pai386,
op_const_reg(A_CMP,S_L,winstackpagesize,R_EDI)));
emitjmp(C_NC,ok);
emitlab(again);
exprasmlist^.concat(new(pai386,
op_const_reg(A_SUB,S_L,winstackpagesize-4,R_ESP)));
exprasmlist^.concat(new(pai386,
op_reg(A_PUSH,S_L,R_EAX)));
exprasmlist^.concat(new(pai386,
op_const_reg(A_SUB,S_L,winstackpagesize,R_EDI)));
emitjmp(C_NC,again);
emitlab(ok);
exprasmlist^.concat(new(pai386, exprasmlist^.concat(new(pai386,
op_reg_reg(A_SUB,S_L,R_EDI,R_ESP))); op_reg_reg(A_SUB,S_L,R_EDI,R_ESP)));
{ now reload EDI }
new(r);
reset_reference(r^);
r^.base:=procinfo.framepointer;
r^.offset:=pvarsym(p)^.address+4+procinfo.call_offset;
exprasmlist^.concat(new(pai386,
op_ref_reg(A_MOV,S_L,r,R_EDI)));
exprasmlist^.concat(new(pai386,
op_reg(A_INC,S_L,R_EDI)));
exprasmlist^.concat(new(pai386,
op_const_reg(A_IMUL,S_L,
parraydef(pvarsym(p)^.definition)^.definition^.size,R_EDI)));
end
else
begin
exprasmlist^.concat(new(pai386,
op_reg_reg(A_SUB,S_L,R_EDI,R_ESP)));
end;
{ load destination } { load destination }
exprasmlist^.concat(new(pai386, exprasmlist^.concat(new(pai386,
op_reg_reg(A_MOV,S_L,R_ESP,R_EDI))); op_reg_reg(A_MOV,S_L,R_ESP,R_EDI)));
@ -2530,6 +2569,9 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
r : treference; r : treference;
oldlist, oldlist,
oldexprasmlist : paasmoutput; oldexprasmlist : paasmoutput;
again : pasmlabel;
i : longint;
begin begin
oldexprasmlist:=exprasmlist; oldexprasmlist:=exprasmlist;
exprasmlist:=alist; exprasmlist:=alist;
@ -2644,6 +2686,41 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
else else
{$endif unused} {$endif unused}
begin begin
{ windows guards only a few pages for stack growing, }
{ so we have to access every page first }
if (target_os.id=os_i386_win32) and
(stackframe>=winstackpagesize) then
begin
if stackframe div winstackpagesize<=5 then
begin
exprasmlist^.insert(new(pai386,op_const_reg(A_SUB,S_L,stackframe-4,R_ESP)));
for i:=1 to stackframe div winstackpagesize do
begin
hr:=new_reference(R_ESP,stackframe-i*winstackpagesize);
exprasmlist^.concat(new(pai386,
op_const_ref(A_MOV,S_L,0,hr)));
end;
exprasmlist^.concat(new(pai386,
op_reg(A_PUSH,S_L,R_EAX)));
end
else
begin
getlabel(again);
exprasmlist^.concat(new(pai386,
op_const_reg(A_MOV,S_L,stackframe div winstackpagesize,R_EDI)));
emitlab(again);
exprasmlist^.concat(new(pai386,
op_const_reg(A_SUB,S_L,winstackpagesize-4,R_ESP)));
exprasmlist^.concat(new(pai386,
op_reg(A_PUSH,S_L,R_EAX)));
exprasmlist^.concat(new(pai386,
op_reg(A_DEC,S_L,R_EDI)));
emitjmp(C_NZ,again);
exprasmlist^.concat(new(pai386,
op_const_reg(A_SUB,S_L,stackframe mod winstackpagesize,R_ESP)));
end
end
else
exprasmlist^.insert(new(pai386,op_const_reg(A_SUB,S_L,stackframe,R_ESP))); exprasmlist^.insert(new(pai386,op_const_reg(A_SUB,S_L,stackframe,R_ESP)));
if (cs_check_stack in aktlocalswitches) and if (cs_check_stack in aktlocalswitches) and
not(target_info.target in [target_i386_linux,target_i386_win32]) then not(target_info.target in [target_i386_linux,target_i386_win32]) then
@ -3033,7 +3110,11 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
end. end.
{ {
$Log$ $Log$
Revision 1.14 1999-07-06 21:48:11 florian Revision 1.15 1999-07-18 10:19:44 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.14 1999/07/06 21:48:11 florian
* a lot bug fixes: * a lot bug fixes:
- po_external isn't any longer necessary for procedure compatibility - po_external isn't any longer necessary for procedure compatibility
- m_tp_procvar is in -Sd now available - m_tp_procvar is in -Sd now available

View File

@ -34,12 +34,17 @@ unit cobjects;
interface interface
uses uses
{$ifdef DELPHI4}
dmisc,
sysutils
{$else DELPHI4}
strings strings
{$ifndef linux} {$ifndef linux}
,dos ,dos
{$else} {$else}
,linux ,linux
{$endif} {$endif}
{$endif DELPHI4}
; ;
const const
@ -2204,7 +2209,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.37 1999-07-03 00:29:45 peter Revision 1.38 1999-07-18 10:19:46 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.37 1999/07/03 00:29:45 peter
* new link writing to the ppu, one .ppu is needed for all link types, * new link writing to the ppu, one .ppu is needed for all link types,
static (.o) is now always created also when smartlinking is used static (.o) is now always created also when smartlinking is used

View File

@ -94,8 +94,10 @@ uses
{$endif BrowserCol} {$endif BrowserCol}
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
dos,verbose,comphook,systems, verbose,comphook,systems,
globals,options,parser,symtable,link,import,export; globals,options,parser,symtable,link,import,export;
function Compile(const cmd:string):longint; function Compile(const cmd:string):longint;
@ -271,7 +273,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.23 1999-06-22 16:24:41 pierre Revision 1.24 1999-07-18 10:19:48 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.23 1999/06/22 16:24:41 pierre
* local browser stuff corrected * local browser stuff corrected
Revision 1.22 1999/05/17 14:24:32 pierre Revision 1.22 1999/05/17 14:24:32 pierre

View File

@ -32,8 +32,9 @@ implementation
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
Dos,
Systems,Globtype,Globals,Verbose,Files, Systems,Globtype,Globals,Verbose,Files,
Script; Script;
@ -110,7 +111,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.5 1999-07-03 00:29:46 peter Revision 1.6 1999-07-18 10:19:49 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.5 1999/07/03 00:29:46 peter
* new link writing to the ppu, one .ppu is needed for all link types, * new link writing to the ppu, one .ppu is needed for all link types,
static (.o) is now always created also when smartlinking is used static (.o) is now always created also when smartlinking is used

View File

@ -151,7 +151,7 @@ Procedure SetIntVec(intno: byte; vector: pointer);
Procedure Keep(exitcode: word); Procedure Keep(exitcode: word);
implementation implementation
uses strings,globals; uses globals;
{****************************************************************************** {******************************************************************************
--- Conversion --- --- Conversion ---
@ -847,7 +847,11 @@ End;
end. end.
{ {
$Log$ $Log$
Revision 1.4 1999-05-05 09:19:05 florian Revision 1.5 1999-07-18 10:19:50 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.4 1999/05/05 09:19:05 florian
* more fixes to get it with delphi running * more fixes to get it with delphi running
Revision 1.3 1999/05/05 08:20:12 michael Revision 1.3 1999/05/05 08:20:12 michael

View File

@ -264,8 +264,10 @@ implementation
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
dos,verbose,systems, verbose,systems,
symtable,scanner; symtable,scanner;
{**************************************************************************** {****************************************************************************
@ -1312,7 +1314,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.97 1999-07-14 21:19:03 florian Revision 1.98 1999-07-18 10:19:51 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.97 1999/07/14 21:19:03 florian
+ implemented a better error message if a PPU file isn't found as suggested + implemented a better error message if a PPU file isn't found as suggested
by Lee John by Lee John

View File

@ -30,17 +30,18 @@ unit globals;
interface interface
uses uses
{$ifdef TP}
objects,
{$endif}
{$ifdef Delphi4} {$ifdef Delphi4}
dmisc, dmisc,
sysutils, sysutils,
{$else}
strings,dos,
{$endif} {$endif}
{$ifdef linux} {$ifdef linux}
{$ifdef TP}
objects,
{$endif}
linux, linux,
{$endif} {$endif}
strings,dos,
globtype,version,tokens,systems,cobjects; globtype,version,tokens,systems,cobjects;
const const
@ -1209,7 +1210,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.12 1999-07-13 19:14:44 michael Revision 1.13 1999-07-18 10:19:52 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.12 1999/07/13 19:14:44 michael
+ Defaultreplacemens now more logical + Defaultreplacemens now more logical
Revision 1.11 1999/07/10 10:26:18 peter Revision 1.11 1999/07/10 10:26:18 peter

View File

@ -72,6 +72,8 @@ Implementation
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
globtype,systems, globtype,systems,
script,globals,verbose,ppu script,globals,verbose,ppu
@ -81,7 +83,6 @@ uses
{$ifdef linux} {$ifdef linux}
,linux ,linux
{$endif} {$endif}
,dos
; ;
{$ifndef linux} {$ifndef linux}
@ -715,7 +716,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.60 1999-07-07 20:33:53 peter Revision 1.61 1999-07-18 10:19:53 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.60 1999/07/07 20:33:53 peter
* warning instead of error when switching to static linking * warning instead of error when switching to static linking
Revision 1.59 1999/07/05 16:21:26 peter Revision 1.59 1999/07/05 16:21:26 peter

View File

@ -46,7 +46,11 @@ type
implementation implementation
uses uses
{$ifdef DELPHI}
sysutils;
{$else DELPHI}
strings; strings;
{$endif DELPHI}
constructor TMessage.Init(p:pointer;n:longint); constructor TMessage.Init(p:pointer;n:longint);
begin begin
@ -260,7 +264,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.7 1999-05-01 12:27:51 peter Revision 1.8 1999-07-18 10:19:55 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.7 1999/05/01 12:27:51 peter
* fixed endless loop with replace $1 with $1 * fixed endless loop with replace $1 with $1
Revision 1.6 1998/12/11 00:03:20 peter Revision 1.6 1998/12/11 00:03:20 peter

View File

@ -30,8 +30,9 @@ unit og386;
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$endif Delphi} {$else Delphi}
dos, dos,
{$endif Delphi}
owbase,owar, owbase,owar,
systems,i386base,aasm; systems,i386base,aasm;
@ -277,7 +278,11 @@ unit og386;
end. end.
{ {
$Log$ $Log$
Revision 1.9 1999-07-03 00:27:03 peter Revision 1.10 1999-07-18 10:19:56 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.9 1999/07/03 00:27:03 peter
* better smartlinking support * better smartlinking support
Revision 1.8 1999/05/19 12:41:48 florian Revision 1.8 1999/05/19 12:41:48 florian

View File

@ -57,9 +57,11 @@ implementation
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
globtype,version,systems, globtype,version,systems,
dos,cobjects,globals, cobjects,globals,
scanner,link,messages scanner,link,messages
{$ifdef BrowserLog} {$ifdef BrowserLog}
,browlog ,browlog
@ -1139,7 +1141,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.4 1999-07-05 20:13:14 peter Revision 1.5 1999-07-18 10:19:57 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.4 1999/07/05 20:13:14 peter
* removed temp defines * removed temp defines
Revision 1.3 1999/07/03 00:29:54 peter Revision 1.3 1999/07/03 00:29:54 peter

View File

@ -50,8 +50,10 @@ implementation
uses uses
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc,
{$else Delphi}
dos,
{$endif Delphi} {$endif Delphi}
globtype,dos,strings,globals,link,files; globtype,strings,globals,link,files;
const profile_flag:boolean=false; const profile_flag:boolean=false;
@ -333,7 +335,11 @@ end.
{ {
$Log$ $Log$
Revision 1.8 1999-07-03 00:29:55 peter Revision 1.9 1999-07-18 10:19:58 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.8 1999/07/03 00:29:55 peter
* new link writing to the ppu, one .ppu is needed for all link types, * new link writing to the ppu, one .ppu is needed for all link types,
static (.o) is now always created also when smartlinking is used static (.o) is now always created also when smartlinking is used

View File

@ -66,9 +66,10 @@ implementation
uses uses
verbose, verbose,
{$ifdef Delphi} {$ifdef Delphi}
dmisc, dmisc;
{$endif Delphi} {$else Delphi}
dos; dos;
{$endif Delphi}
const const
{$ifdef TP} {$ifdef TP}
@ -278,7 +279,11 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.3 1999-05-09 11:38:06 peter Revision 1.4 1999-07-18 10:19:59 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.3 1999/05/09 11:38:06 peter
* don't write .o and link if errors occure during assembling * don't write .o and link if errors occure during assembling
Revision 1.2 1999/05/04 21:44:53 florian Revision 1.2 1999/05/04 21:44:53 florian

View File

@ -81,6 +81,7 @@
{$endif support_mmx} {$endif support_mmx}
{$endif} {$endif}
{$ifndef DELPHI}
{$ifdef TP} {$ifdef TP}
{$IFNDEF DPMI} {$IFNDEF DPMI}
{$M 24000,0,655360} {$M 24000,0,655360}
@ -89,6 +90,7 @@
{$ENDIF DPMI} {$ENDIF DPMI}
{$E+,N+,F+,S-,R-} {$E+,N+,F+,S-,R-}
{$endif TP} {$endif TP}
{$endif DELPHI}
program pp; program pp;
@ -243,7 +245,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.2 1999-05-04 21:44:58 florian Revision 1.3 1999-07-18 10:20:00 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.2 1999/05/04 21:44:58 florian
* changes to compile it with Delphi 4.0 * changes to compile it with Delphi 4.0
Revision 1.1 1998/09/18 16:03:44 florian Revision 1.1 1998/09/18 16:03:44 florian

View File

@ -130,7 +130,10 @@ unit scanner;
implementation implementation
uses uses
dos,systems,symtable,switches; {$ifndef delphi}
dos,
{$endif delphi}
systems,symtable,switches;
{***************************************************************************** {*****************************************************************************
Helper routines Helper routines
@ -1670,7 +1673,11 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.86 1999-06-02 22:44:19 pierre Revision 1.87 1999-07-18 10:20:02 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.86 1999/06/02 22:44:19 pierre
* previous wrong log corrected * previous wrong log corrected
Revision 1.85 1999/06/02 22:25:49 pierre Revision 1.85 1999/06/02 22:25:49 pierre

View File

@ -27,6 +27,9 @@ unit win_targ;
uses import,export; uses import,export;
const
winstackpagesize = 4096;
type type
pimportlibwin32=^timportlibwin32; pimportlibwin32=^timportlibwin32;
timportlibwin32=object(timportlib) timportlibwin32=object(timportlib)
@ -714,7 +717,11 @@ unit win_targ;
end. end.
{ {
$Log$ $Log$
Revision 1.27 1999-05-27 19:45:30 peter Revision 1.28 1999-07-18 10:20:03 florian
* made it compilable with Dlephi 4 again
+ fixed problem with large stack allocations on win32
Revision 1.27 1999/05/27 19:45:30 peter
* removed oldasm * removed oldasm
* plabel -> pasmlabel * plabel -> pasmlabel
* -a switches to source writing automaticly * -a switches to source writing automaticly