[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commits] r3253 - in /fsf/trunk/libc: ChangeLog sysdeps/i386/dl-trampoline.S sysdeps/x86_64/dl-trampoline.S



Author: eglibc
Date: Fri Aug 24 00:03:30 2007
New Revision: 3253

Log:
Import glibc-mainline for 2007-08-24

Modified:
    fsf/trunk/libc/ChangeLog
    fsf/trunk/libc/sysdeps/i386/dl-trampoline.S
    fsf/trunk/libc/sysdeps/x86_64/dl-trampoline.S

Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Fri Aug 24 00:03:30 2007
@@ -1,3 +1,16 @@
+2007-08-23  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Correctly
+	align stack for call if pltexit is to be used.
+
+	[BZ #3924]
+	* sysdeps/i386/dl-trampoline.S (_dl_runtime_profile): Correctly
+	align for function call in case pltexit has to be called later.
+
+	* sysdeps/i386/dl-trampoline.S (_dl_runtime_resolve): Avoid
+	implicit atomic operation when storing function pointer.
+	(_dl_runtime_profile): Likewise.
+
 2007-08-17  Jakub Jelinek  <jakub@xxxxxxxxxx>
 
 	* nis/nis_table.c (nis_list): Don't fail if __follow_path returned

Modified: fsf/trunk/libc/sysdeps/i386/dl-trampoline.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/dl-trampoline.S (original)
+++ fsf/trunk/libc/sysdeps/i386/dl-trampoline.S Fri Aug 24 00:03:30 2007
@@ -37,10 +37,10 @@
 	call _dl_fixup		# Call resolver.
 	popl %edx		# Get register content back.
 	cfi_adjust_cfa_offset (-4)
-	popl %ecx
-	cfi_adjust_cfa_offset (-4)
-	xchgl %eax, (%esp)	# Get %eax contents end store function address.
-	ret $8			# Jump to function address.
+	movl (%esp), %ecx
+	movl %eax, (%esp)	# Store the function address.
+	movl 4(%esp), %eax
+	ret $12			# Jump to function address.
 	cfi_endproc
 	.size _dl_runtime_resolve, .-_dl_runtime_resolve
 
@@ -83,10 +83,10 @@
 	cfi_adjust_cfa_offset (-4)
 	popl %edx		# Get register content back.
 	cfi_adjust_cfa_offset (-4)
-	popl %ecx
-	cfi_adjust_cfa_offset (-4)
-	xchgl %eax, (%esp)	# Get %eax contents end store function address.
-	ret $16			# Jump to function address.
+	movl (%esp), %ecx
+	movl %eax, (%esp)	# Store the function address.
+	movl 4(%esp), %eax
+	ret $20			# Jump to function address.
 
 	/*
 	    +32     return address
@@ -111,9 +111,10 @@
 	cfi_rel_offset (esi, 0)
 	leal 44(%esp), %esi
 	movl %ebx, %ecx
+	orl $4, %ebx		# Increase frame size if necessary to align
+				# stack for the function call
 	movl %esp, %edi
 	subl %ebx, %edi
-	andl $0xfffffff0, %edi	# Align stack
 	movl %esp, %ebx
 	cfi_def_cfa_register (ebx)
 	movl %edi, %esp

Modified: fsf/trunk/libc/sysdeps/x86_64/dl-trampoline.S
==============================================================================
--- fsf/trunk/libc/sysdeps/x86_64/dl-trampoline.S (original)
+++ fsf/trunk/libc/sysdeps/x86_64/dl-trampoline.S Fri Aug 24 00:03:30 2007
@@ -1,5 +1,5 @@
 /* PLT trampolines.  x86-64 version.
-   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -120,13 +120,14 @@
 	leaq 104(%rsp), %rsi
 	movq %rsp, %rbx
 	cfi_def_cfa_register (1)
+	movq %r10, %rcx
+	addq $8, %r10
+	andq $0xfffffffffffffff0, %r10
 	subq %r10, %rsp
 	movq %rsp, %rdi
-	movq %r10, %rcx
 	shrq $3, %rcx
 	rep
 	movsq
-	andq $0xfffffffffffffff0, %rsp
 	movq 32(%rbx), %rcx
 	movq 40(%rbx), %rsi
 	movq 48(%rbx), %rdi