Browse Source

Merged revisions 7003 via svnmerge from
svn+ssh://[email protected]/FPC/svn/fpc/trunk

........
r7003 | florian | 2007-03-25 22:26:59 +0200 (Sun, 25 Mar 2007) | 2 lines

* fix gprof support for win32

........

git-svn-id: branches/fixes_2_2@7194 -

joost 18 năm trước cách đây
mục cha
commit
7c1f7777e6

+ 1 - 0
compiler/systems/t_win.pas

@@ -960,6 +960,7 @@ implementation
             Concat('IMAGEBASE $' + ibase);
             Concat('HEADER');
             Concat('EXESECTION .text');
+            Concat('  SYMBOL __text_start__');
             Concat('  OBJSECTION .text*');
             Concat('  SYMBOL ___CTOR_LIST__');
             Concat('  SYMBOL __CTOR_LIST__');

+ 4 - 0
rtl/win32/sysinitcyg.pp

@@ -99,4 +99,8 @@ unit sysinitcyg;
         Cygwin_crt0(@CMainDLL);
       end;
 
+    procedure asm_exit;stdcall;public name 'asm_exit';
+      begin
+      end;
+
 end.

+ 13 - 3
rtl/win32/sysinitgprof.pp

@@ -25,16 +25,20 @@ unit sysinitgprof;
     {$linklib user32}
     {$linklib kernel32}
 
+    const
+      monstarted : dword = 0;
+
     var
       SysInstance : Longint;external name '_FPC_SysInstance';
+      stext : record end;external name '__text_start__';
       etext : record end;external name 'etext';
-      monstarted : dword;
 
     procedure EXE_Entry; external name '_FPC_EXE_Entry';
     function DLL_Entry : longbool; external name '_FPC_DLL_Entry';
 
     procedure Cygwin_crt0(p : pointer);cdecl;external name 'cygwin_crt0';
     procedure __main;cdecl;external name '__main';
+    procedure _mcleanup;cdecl;external name '_mcleanup';
 
     procedure monstartup(main,etext : pointer);cdecl;external name 'monstartup';
 
@@ -46,7 +50,7 @@ unit sysinitgprof;
         if monstarted=0 then
           begin
             inc(monstarted);
-            monstartup(@CMainExe,@etext);
+            monstartup(@stext,@etext);
           end;
       end;
 
@@ -56,7 +60,7 @@ unit sysinitgprof;
         if monstarted=0 then
           begin
             inc(monstarted);
-            monstartup(@CMainDLL,@etext);
+            monstartup(@stext,@etext);
           end;
       end;
 
@@ -134,5 +138,11 @@ unit sysinitgprof;
         Cygwin_crt0(@CMainDLL);
       end;
 
+
+    procedure asm_exit;stdcall;public name 'asm_exit';
+      begin
+        _mcleanup;
+      end;
+
 end.
 

+ 4 - 0
rtl/win32/sysinitpas.pp

@@ -59,4 +59,8 @@ unit sysinitpas;
       DLL_Entry;
     end;
 
+    procedure asm_exit;stdcall;public name 'asm_exit';
+      begin
+      end;
+
 end.

+ 7 - 0
rtl/win32/system.pp

@@ -311,6 +311,7 @@ procedure remove_exception_handlers;forward;
 procedure PascalMain;stdcall;external name 'PASCALMAIN';
 procedure fpc_do_exit;stdcall;external name 'FPC_DO_EXIT';
 Procedure ExitDLL(Exitcode : longint); forward;
+procedure asm_exit;stdcall;external name 'asm_exit';
 
 Procedure system_exit;
 begin
@@ -331,6 +332,12 @@ begin
    end;
   remove_exception_handlers;
 
+  { in 2.0 asm_exit does an exitprocess }
+{$ifndef ver2_0}
+  { do cleanup required by the startup code }
+  asm_exit;
+{$endif ver2_0}
+
   { call exitprocess, with cleanup as required }
   ExitProcess(exitcode);
 end;