|
@@ -43,6 +43,10 @@ procedure PASCALMAIN; external name 'PASCALMAIN';
|
|
var
|
|
var
|
|
dlexitproc: pointer;
|
|
dlexitproc: pointer;
|
|
|
|
|
|
|
|
+{$ifdef FPC_PIC}
|
|
|
|
+function fpc_geteipasebxlocal : pointer; [external name 'fpc_geteipasebx'];
|
|
|
|
+{$endif}
|
|
|
|
+
|
|
procedure _FPC_proc_start; assembler; nostackframe; public name '_start';
|
|
procedure _FPC_proc_start; assembler; nostackframe; public name '_start';
|
|
asm
|
|
asm
|
|
{ First locate the start of the environment variables }
|
|
{ First locate the start of the environment variables }
|
|
@@ -57,7 +61,7 @@ asm
|
|
pushl %ebx
|
|
pushl %ebx
|
|
pushl %ecx
|
|
pushl %ecx
|
|
|
|
|
|
- call fpc_geteipasebx
|
|
|
|
|
|
+ call fpc_geteipasebxlocal
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
|
|
|
|
movl dlexitproc@GOT(%ebx),%ecx
|
|
movl dlexitproc@GOT(%ebx),%ecx
|
|
@@ -86,7 +90,7 @@ asm
|
|
{ Save initial stackpointer }
|
|
{ Save initial stackpointer }
|
|
{$ifdef FPC_PIC}
|
|
{$ifdef FPC_PIC}
|
|
pushl %ebx
|
|
pushl %ebx
|
|
- call fpc_geteipasebx
|
|
|
|
|
|
+ call fpc_geteipasebxlocal
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
movl initialstkptr@GOT(%ebx),%ebx
|
|
movl initialstkptr@GOT(%ebx),%ebx
|
|
movl %esp,(%ebx)
|
|
movl %esp,(%ebx)
|
|
@@ -104,7 +108,7 @@ asm
|
|
|
|
|
|
.Lhaltproc:
|
|
.Lhaltproc:
|
|
{$ifdef FPC_PIC}
|
|
{$ifdef FPC_PIC}
|
|
- call fpc_geteipasebx
|
|
|
|
|
|
+ call fpc_geteipasebxlocal
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
movl dlexitproc@GOT(%ebx),%eax
|
|
movl dlexitproc@GOT(%ebx),%eax
|
|
movl (%eax),%eax
|
|
movl (%eax),%eax
|
|
@@ -118,7 +122,7 @@ asm
|
|
movl syscall_nr_exit_group,%eax
|
|
movl syscall_nr_exit_group,%eax
|
|
|
|
|
|
{$ifdef FPC_PIC}
|
|
{$ifdef FPC_PIC}
|
|
- call fpc_geteipasebx
|
|
|
|
|
|
+ call fpc_geteipasebxlocal
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
movl ExitCode@GOT(%ebx),%ebx
|
|
movl ExitCode@GOT(%ebx),%ebx
|
|
{$if sizeof(ExitCode)=2}
|
|
{$if sizeof(ExitCode)=2}
|
|
@@ -138,7 +142,7 @@ asm
|
|
movl syscall_nr_exit,%eax
|
|
movl syscall_nr_exit,%eax
|
|
|
|
|
|
{$ifdef FPC_PIC}
|
|
{$ifdef FPC_PIC}
|
|
- call fpc_geteipasebx
|
|
|
|
|
|
+ call fpc_geteipasebxlocal
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
|
movl ExitCode@GOT(%ebx),%ebx
|
|
movl ExitCode@GOT(%ebx),%ebx
|
|
{$if sizeof(ExitCode)=2}
|
|
{$if sizeof(ExitCode)=2}
|