Răsfoiți Sursa

* x86_64-linux: ExitCode is passed as parameter to _haltproc, so assembler hacking with global variable is not necessary.

git-svn-id: trunk@29542 -
sergei 10 ani în urmă
părinte
comite
3a3f7859f7

+ 1 - 2
rtl/linux/x86_64/cprt0.as

@@ -104,8 +104,7 @@ main_stub:
         .globl _haltproc
         .type _haltproc,@function
 _haltproc:
-        movq    operatingsystem_result@GOTPCREL(%rip),%rax
-        movzwl  (%rax),%eax
+        movl    %edi,%eax
 
         /* return to libc */
 	movq    ___fpc_ret_rbp@GOTPCREL(%rip),%rcx

+ 2 - 4
rtl/linux/x86_64/si_c.inc

@@ -153,11 +153,9 @@ procedure _FPC_libc_start; assembler; nostackframe; public name '_start';
   end;
 
 
-procedure _FPC_libc_haltproc; assembler; nostackframe; public name '_haltproc';
+procedure _FPC_libc_haltproc(e:longint); assembler; nostackframe; public name '_haltproc';
   asm
-    movq      ExitCode@GOTPCREL(%rip),%rax
-    movzwq    (%rax),%rax { load and save exitcode }
-
+    movl      %edi,%eax
     movq fpc_ret(%rip),%rdx         { return to libc }
     movq fpc_ret_rbp(%rip),%rbp
     pushq %rdx

+ 2 - 4
rtl/linux/x86_64/si_g.inc

@@ -163,11 +163,9 @@ procedure main_stub; assembler; nostackframe;
     hlt
   end;
 
-procedure _FPC_libc_haltproc; assembler; nostackframe; public name '_haltproc';
+procedure _FPC_libc_haltproc(e:longint); assembler; nostackframe; public name '_haltproc';
   asm
-    movq      ExitCode@GOTPCREL(%rip),%rax
-    movzwq    (%rax),%rax { load and save exitcode }
-
+    movl %edi,%eax
     movq fpc_ret(%rip),%rdx         { return to libc }
     movq fpc_ret_rbp(%rip),%rbp
     pushq %rdx

+ 5 - 3
rtl/linux/x86_64/si_prc.inc

@@ -68,8 +68,11 @@ procedure _FPC_dynamic_proc_start; assembler; nostackframe; public name '_dynami
     jmp _FPC_proc_start
   end;
 
-procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc';
+procedure _FPC_proc_haltproc(e: longint); assembler; public name '_haltproc';
+  var
+    code: longint;
   asm
+    movl    %edi,code
     movq    dlexitproc@GOTPCREL(%rip),%rax
     movq    (%rax),%rdx
     testq   %rdx,%rdx
@@ -79,8 +82,7 @@ procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc';
 
   .Lhaltproc:
     movl    $231,%eax                             { exit_group call }
-    movq    ExitCode@GOTPCREL(%rip),%rdi
-    movzwl  (%rdi),%edi
+    movl    code,%edi
     syscall
     jmp     .Lhaltproc