mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 05:39:29 +01:00 
			
		
		
		
	* problems with procvar address solved
This commit is contained in:
		
							parent
							
								
									39a719b39b
								
							
						
					
					
						commit
						00b80eff57
					
				@ -25,10 +25,12 @@ implementation
 | 
			
		||||
  type
 | 
			
		||||
     simple_proc = procedure;
 | 
			
		||||
  var
 | 
			
		||||
     first_ctor : simple_proc;external name 'djgpp_first_ctor';
 | 
			
		||||
     last_ctor  : simple_proc;external name 'djgpp_last_ctor';
 | 
			
		||||
     first_dtor : simple_proc;external name 'djgpp_first_dtor';
 | 
			
		||||
     last_dtor  : simple_proc;external name 'djgpp_last_dtor';
 | 
			
		||||
     first_ctor : longint;external name 'djgpp_first_ctor';
 | 
			
		||||
     ctor       : array [0..maxlongint] of simple_proc;external name 'djgpp_first_ctor';
 | 
			
		||||
     last_ctor  : longint;external name 'djgpp_last_ctor';
 | 
			
		||||
     first_dtor : longint;external name 'djgpp_first_dtor';
 | 
			
		||||
     dtor 	: array [0..maxlongint] of simple_proc;external name 'djgpp_first_dtor';
 | 
			
		||||
     last_dtor  : longint;external name 'djgpp_last_dtor';
 | 
			
		||||
     bss_count : longint;external name '___bss_count';
 | 
			
		||||
  const
 | 
			
		||||
     save_exit : pointer = nil;
 | 
			
		||||
@ -39,16 +41,17 @@ procedure run_c_constructors;
 | 
			
		||||
     already_done : longint = -1;
 | 
			
		||||
  var
 | 
			
		||||
     f : simple_proc;
 | 
			
		||||
     i : longint;
 | 
			
		||||
     i,nb : longint;
 | 
			
		||||
  begin
 | 
			
		||||
     if already_done=bss_count then
 | 
			
		||||
       exit;
 | 
			
		||||
     already_done:=bss_count;
 | 
			
		||||
     f:=first_ctor;
 | 
			
		||||
     for i:=1 to ((longint(last_ctor)-longint(first_ctor)) div sizeof(pointer)) do
 | 
			
		||||
     f:=ctor[0];
 | 
			
		||||
     nb:=((cardinal(@last_ctor)-cardinal(@first_ctor)) div sizeof(pointer));
 | 
			
		||||
     for i:=1 to nb do
 | 
			
		||||
       begin
 | 
			
		||||
          f();
 | 
			
		||||
          inc(longint(f),sizeof(pointer));
 | 
			
		||||
          f:=ctor[i];
 | 
			
		||||
       end;
 | 
			
		||||
  end;
 | 
			
		||||
  
 | 
			
		||||
@ -57,23 +60,24 @@ procedure run_c_destructors;
 | 
			
		||||
     already_done : longint = -1;
 | 
			
		||||
  var
 | 
			
		||||
     f : simple_proc;
 | 
			
		||||
     i : longint;
 | 
			
		||||
     i,nb : longint;
 | 
			
		||||
  begin
 | 
			
		||||
     exitproc:=save_exit;
 | 
			
		||||
     if already_done=bss_count then
 | 
			
		||||
       exit;
 | 
			
		||||
     already_done:=bss_count;
 | 
			
		||||
     f:=first_dtor;
 | 
			
		||||
     for i:=1 to ((longint(last_dtor)-longint(first_dtor)) div sizeof(pointer)) do
 | 
			
		||||
     f:=dtor[0];
 | 
			
		||||
     nb:=((cardinal(last_dtor)-cardinal(first_dtor)) div sizeof(pointer));
 | 
			
		||||
     for i:=1 to nb do
 | 
			
		||||
       begin
 | 
			
		||||
          f();
 | 
			
		||||
          inc(longint(f),sizeof(pointer));
 | 
			
		||||
          f:=dtor[i];
 | 
			
		||||
       end;
 | 
			
		||||
  end;
 | 
			
		||||
  
 | 
			
		||||
begin
 | 
			
		||||
   run_c_constructors;
 | 
			
		||||
   If first_dtor<>last_dtor then
 | 
			
		||||
   If cardinal(@first_dtor)<>cardinal(@last_dtor) then
 | 
			
		||||
     begin
 | 
			
		||||
        { can exitproc be allready non nil here ?
 | 
			
		||||
          you have to make really weird things to achieve
 | 
			
		||||
@ -85,7 +89,10 @@ end.
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.1  1998-12-21 13:14:30  peter
 | 
			
		||||
  Revision 1.2  1998-12-21 14:13:07  pierre
 | 
			
		||||
   * problems with procvar address solved
 | 
			
		||||
 | 
			
		||||
  Revision 1.1  1998/12/21 13:14:30  peter
 | 
			
		||||
    * moved
 | 
			
		||||
 | 
			
		||||
  Revision 1.1  1998/12/21 11:56:26  pierre
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user