diff --git a/rtl/linux/i386/si_prc.inc b/rtl/linux/i386/si_prc.inc
index 41c49fef0b..f7783de509 100644
--- a/rtl/linux/i386/si_prc.inc
+++ b/rtl/linux/i386/si_prc.inc
@@ -116,10 +116,9 @@ asm
 end;
 
 
-procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc';
+procedure _FPC_proc_haltproc(e:longint); cdecl; assembler; public name '_haltproc';
 asm
-  addl  $12, %esp  { align stack back to 16 bytes }
-.Lhaltproc:
+  //addl  $12, %esp  { align stack back to 16 bytes }
   {$ifdef FPC_PIC}
         call  fpc_geteipasebxlocal
         addl  $_GLOBAL_OFFSET_TABLE_,%ebx
@@ -134,44 +133,12 @@ asm
 .Lnodlexitproc:
   movl    syscall_nr_exit_group,%eax
 
-{$ifdef FPC_PIC}
-  call    fpc_geteipasebxlocal
-  addl    $_GLOBAL_OFFSET_TABLE_,%ebx
-  movl    ExitCode@GOT(%ebx),%ebx
- {$if sizeof(ExitCode)=2}
-  movzwl  (%ebx),%ebx
- {$else}
-  mov     (%ebx),%ebx
- {$endif}
-{$else FPC_PIC}
- {$if sizeof(ExitCode)=2}
-  movzwl  ExitCode,%ebx
- {$else}
-  mov     ExitCode,%ebx
- {$endif}
-{$endif FPC_PIC}
-
+  movl    e,%ebx
   int     $0x80
   movl    syscall_nr_exit,%eax
 
-{$ifdef FPC_PIC}
-  call    fpc_geteipasebxlocal
-  addl    $_GLOBAL_OFFSET_TABLE_,%ebx
-  movl    ExitCode@GOT(%ebx),%ebx
- {$if sizeof(ExitCode)=2}
-  movzwl  (%ebx),%ebx
- {$else}
-  mov     (%ebx),%ebx
- {$endif}
-{$else FPC_PIC}
- {$if sizeof(ExitCode)=2}
-  movzwl  ExitCode,%ebx
- {$else}
-  mov     ExitCode,%ebx
- {$endif}
-{$endif FPC_PIC}
-
+  movl    e,%ebx
   int     $0x80
-  jmp     .Lhaltproc
+  jmp     .Lnodlexitproc
 end;