Bläddra i källkod

* Fix PIC code for BSD x86_64 syscall and x86_64 freebsd startup assembler files

git-svn-id: trunk@19181 -
pierre 14 år sedan
förälder
incheckning
b9009d8c02
4 ändrade filer med 41 tillägg och 11 borttagningar
  1. 32 0
      rtl/bsd/x86_64/syscall.inc
  2. 3 3
      rtl/freebsd/x86_64/cprt0.as
  3. 3 4
      rtl/freebsd/x86_64/gprt0.as
  4. 3 4
      rtl/freebsd/x86_64/prt0.as

+ 32 - 0
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

+ 3 - 3
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

+ 3 - 4
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

+ 3 - 4
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