PERFORCE change 31748 for review

Peter Wemm peter at FreeBSD.org
Fri May 23 18:11:56 PDT 2003


http://perforce.freebsd.org/chv.cgi?CH=31748

Change 31748 by peter at peter_hammer on 2003/05/23 18:11:46

	Take a shot at _rtld_bind_start

Affected files ...

.. //depot/projects/hammer/libexec/rtld-elf/amd64/rtld_start.S#8 edit

Differences ...

==== //depot/projects/hammer/libexec/rtld-elf/amd64/rtld_start.S#8 (text+ko) ====

@@ -60,26 +60,52 @@
  * We are careful to preserve all registers, even the the caller-save
  * registers.  That is because this code may be invoked by low-level
  * assembly-language code that is not ABI-compliant.
+ *
+ * Stack map:
+ * obj          0x58
+ * reloff       0x50
+ * return addr  0x48
+ * rflags       0x40
+ * rax          0x38
+ * rdx          0x30
+ * rcx          0x28
+ * rdi          0x20
+ * r8           0x18
+ * r9           0x10
+ * r10          0x8
+ * r11          0x0
  */
 	.align	4
 	.globl	_rtld_bind_start
 	.type	_rtld_bind_start, at function
 _rtld_bind_start:
-	pushfq				# Save eflags
+	pushfq				# Save rflags
 	pushq	%rax			# Save %rax
 	pushq	%rdx			# Save %rdx
 	pushq	%rcx			# Save %rcx
-	pushq	20(%rsp)		# Copy reloff argument
-	pushq	20(%rsp)		# Copy obj argument
+	pushq	%rsi			# Save %rsi
+	pushq	%rdi			# Save %rdi
+	pushq	%r8			# Save %r8
+	pushq	%r9			# Save %r9
+	pushq	%r10			# Save %r10
+	pushq	%r11			# Save %r11
+
+	movq	0x58(%rsp),%rdi		# Fetch obj argument
+	movq	0x50(%rsp),%rsi		# Fetch reloff argument
 
 	call	_rtld_bind at PLT		# Transfer control to the binder
 	/* Now %rax contains the entry point of the function being called. */
 
-	addq	$16,%rsp		# Discard binder arguments
-	movq	%rax,20(%rsp)		# Store target over obj argument
+	movq	%rax,0x58(%rsp)		# Store target over obj argument
+	popq	%r11			# Restore %r11
+	popq	%r10			# Restore %r10
+	popq	%r9			# Restore %r9
+	popq	%r8			# Restore %r8
+	popq	%rdi			# Restore %rdi
+	popq	%rsi			# Restore %rsi
 	popq	%rcx			# Restore %rcx
 	popq	%rdx			# Restore %rdx
 	popq	%rax			# Restore %rax
-	popfq				# Restore eflags
-	leaq	8(%rsp),%rsp		# Discard reloff, do not change eflags
+	popfq				# Restore rflags
+	leaq	8(%rsp),%rsp		# Discard reloff, do not change rflags
 	ret				# "Return" to target address


More information about the p4-projects mailing list