Sfoglia il codice sorgente

* updated the asm parts of the i386 OpenBSD startup code as well

git-svn-id: trunk@42080 -
nickysn 6 anni fa
parent
commit
e0b523ef14

+ 7 - 6
rtl/openbsd/i386/prt0.as

@@ -42,15 +42,16 @@ ___fpc_brk_addr:
 	.globl  _start
 _start:
 __start:
-	pushl	%ebx			#ps_strings
-	pushl   %ecx                    # obj
-	pushl   %edx                    # cleanup
-	movl    12(%esp),%eax
-	leal    20(%esp,%eax,4),%ecx
-	leal    16(%esp),%edx
+	movl    %esp,%ebp
+	andl    $~15,%esp
+	pushl   %edx
+	movl    0(%ebp),%eax
+	leal    8(%ebp,%eax,4),%ecx
+	leal    4(%ebp),%edx
 	pushl   %ecx
 	pushl   %edx
 	pushl   %eax
+	xorl    %ebp,%ebp
 	call    ___start
 
 #NO_APP

+ 9 - 8
rtl/openbsd/i386/si_c.inc

@@ -19,25 +19,26 @@
 procedure __init; cdecl; external name '__init';
 procedure c_exit(exit_code: cint); cdecl; noreturn; external name 'exit';
 
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl; forward;
+procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl; forward;
 
 procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
   asm
-    pushl   %ebx                    { ps_strings }
-    pushl   %ecx                    { obj }
-    pushl   %edx                    { cleanup }
-    movl    12(%esp),%eax
-    leal    20(%esp,%eax,4),%ecx
-    leal    16(%esp),%edx
+    movl    %esp,%ebp
+    andl    $0xFFFFFFF0,%esp
+    pushl   %edx
+    movl    0(%ebp),%eax
+    leal    8(%ebp,%eax,4),%ecx
+    leal    4(%ebp),%edx
     pushl   %ecx
     pushl   %edx
     pushl   %eax
+    xorl    %ebp,%ebp
     call    _FPC_proc___start
   end;
 
 function _strrchr(str: PChar; character: LongInt): PChar; forward;
 
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl;
+procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl;
   var
     I: SizeUInt;
   begin

+ 9 - 8
rtl/openbsd/i386/si_g.inc

@@ -26,25 +26,26 @@ procedure _monstartup(lowpc, highpc: u_long); cdecl; external name '_monstartup'
 procedure __init; cdecl; external name '__init';
 procedure c_exit(exit_code: cint); cdecl; noreturn; external name 'exit';
 
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl; forward;
+procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl; forward;
 
 procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
   asm
-    pushl   %ebx                    { ps_strings }
-    pushl   %ecx                    { obj }
-    pushl   %edx                    { cleanup }
-    movl    12(%esp),%eax
-    leal    20(%esp,%eax,4),%ecx
-    leal    16(%esp),%edx
+    movl    %esp,%ebp
+    andl    $0xFFFFFFF0,%esp
+    pushl   %edx
+    movl    0(%ebp),%eax
+    leal    8(%ebp,%eax,4),%ecx
+    leal    4(%ebp),%edx
     pushl   %ecx
     pushl   %edx
     pushl   %eax
+    xorl    %ebp,%ebp
     call    _FPC_proc___start
   end;
 
 function _strrchr(str: PChar; character: LongInt): PChar; forward;
 
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl;
+procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl;
   var
     I: SizeUInt;
   begin

+ 9 - 8
rtl/openbsd/i386/si_prc.inc

@@ -16,26 +16,27 @@
 
 {$asmmode att}
 
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl; forward;
+procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl; forward;
 
 procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
   asm
-    pushl   %ebx                    { ps_strings }
-    pushl   %ecx                    { obj }
-    pushl   %edx                    { cleanup }
-    movl    12(%esp),%eax
-    leal    20(%esp,%eax,4),%ecx
-    leal    16(%esp),%edx
+    movl    %esp,%ebp
+    andl    $0xFFFFFFF0,%esp
+    pushl   %edx
+    movl    0(%ebp),%eax
+    leal    8(%ebp,%eax,4),%ecx
+    leal    4(%ebp),%edx
     pushl   %ecx
     pushl   %edx
     pushl   %eax
+    xorl    %ebp,%ebp
     call    _FPC_proc___start
   end;
 
 procedure _FPC_proc_haltproc; cdecl; noreturn; forward;
 function _strrchr(str: PChar; character: LongInt): PChar; forward;
 
-procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl;
+procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl;
   var
     I: SizeUInt;
   begin