From b9009d8c027475f31f6a3eb6b521f77e86b836a8 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 22 Sep 2011 21:16:42 +0000 Subject: [PATCH] * Fix PIC code for BSD x86_64 syscall and x86_64 freebsd startup assembler files git-svn-id: trunk@19181 - --- rtl/bsd/x86_64/syscall.inc | 32 ++++++++++++++++++++++++++++++++ rtl/freebsd/x86_64/cprt0.as | 6 +++--- rtl/freebsd/x86_64/gprt0.as | 7 +++---- rtl/freebsd/x86_64/prt0.as | 7 +++---- 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/rtl/bsd/x86_64/syscall.inc b/rtl/bsd/x86_64/syscall.inc index a0722f5912..cca7ab5e2c 100644 --- a/rtl/bsd/x86_64/syscall.inc +++ b/rtl/bsd/x86_64/syscall.inc @@ -34,7 +34,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 @@ -65,7 +69,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 @@ -97,7 +105,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 @@ -130,7 +142,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 @@ -164,7 +180,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 @@ -199,7 +219,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 @@ -235,7 +259,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 @@ -275,7 +303,11 @@ asm {$ifdef FPC_PIC} movq fpc_threadvar_relocate_proc@GOTPCREL(%rip),%rax movq (%rax),%rax +{$ifndef FPC_STATICRIPFIXED} movq Errno@GOTPCREL(%rip),%r11 +{$else} + leaq Errno(%rip),%r11 +{$endif} {$else FPC_PIC} movq fpc_threadvar_relocate_proc,%rax leaq Errno,%r11 diff --git a/rtl/freebsd/x86_64/cprt0.as b/rtl/freebsd/x86_64/cprt0.as index 1b8defdcba..680935aaf7 100644 --- a/rtl/freebsd/x86_64/cprt0.as +++ b/rtl/freebsd/x86_64/cprt0.as @@ -39,11 +39,11 @@ _start: movq -40(%rbp), %rax movq (%rax), %rax movl %eax, -28(%rbp) - movl %eax, operatingsystem_parameter_argc + movl %eax, operatingsystem_parameter_argc(%rip) movq -40(%rbp), %rax addq $8, %rax movq %rax, -24(%rbp) - movq %rax, operatingsystem_parameter_argv + movq %rax, operatingsystem_parameter_argv(%rip) movq -40(%rbp), %rdx addq $16, %rdx movl -28(%rbp), %eax @@ -52,7 +52,7 @@ _start: leaq (%rdx,%rax), %rax movq %rax, -16(%rbp) movq -16(%rbp), %rax - movq %rax, operatingsystem_parameter_envp + movq %rax, operatingsystem_parameter_envp(%rip) movq %rax, environ(%rip) cmpl $0, -28(%rbp) jle .L2 diff --git a/rtl/freebsd/x86_64/gprt0.as b/rtl/freebsd/x86_64/gprt0.as index 4d6dfd2c7a..2322a1c780 100644 --- a/rtl/freebsd/x86_64/gprt0.as +++ b/rtl/freebsd/x86_64/gprt0.as @@ -39,21 +39,20 @@ _start: movq -8(%rbp), %rax movl (%rax), %eax movl %eax, -20(%rbp) - movl %eax, operatingsystem_parameter_argc + movl %eax, operatingsystem_parameter_argc(%rip) movq -8(%rbp), %rax addq $8, %rax movq %rax, -32(%rbp) - movq %rax, operatingsystem_parameter_argv + movq %rax, operatingsystem_parameter_argv(%rip) movl -20(%rbp), %eax cltq salq $3, %rax addq -8(%rbp), %rax addq $16, %rax movq %rax, -40(%rbp) - movq %rax, operatingsystem_parameter_envp + movq %rax, operatingsystem_parameter_envp(%rip) movq -40(%rbp), %rax movq %rax, environ(%rip) - movq %rax,environ cmpl $0, -20(%rbp) jle .L5 movq -32(%rbp), %rax diff --git a/rtl/freebsd/x86_64/prt0.as b/rtl/freebsd/x86_64/prt0.as index 68f42ca19f..dc53a54008 100644 --- a/rtl/freebsd/x86_64/prt0.as +++ b/rtl/freebsd/x86_64/prt0.as @@ -39,21 +39,20 @@ _start: movq -8(%rbp), %rax movl (%rax), %eax movl %eax, -20(%rbp) - movl %eax, operatingsystem_parameter_argc + movl %eax, operatingsystem_parameter_argc(%rip) movq -8(%rbp), %rax addq $8, %rax movq %rax, -32(%rbp) - movq %rax, operatingsystem_parameter_argv + movq %rax, operatingsystem_parameter_argv(%rip) movl -20(%rbp), %eax cltq salq $3, %rax addq -8(%rbp), %rax addq $16, %rax movq %rax, -40(%rbp) - movq %rax, operatingsystem_parameter_envp + movq %rax, operatingsystem_parameter_envp(%rip) movq -40(%rbp), %rax movq %rax, environ(%rip) - movq %rax,environ cmpl $0, -20(%rbp) jle .L5 movq -32(%rbp), %rax