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

r5907 - in glibc-package/branches/eglibc-2.18/debian: . patches patches/powerpc



Author: adconrad
Date: 2014-01-10 17:43:01 +0000 (Fri, 10 Jan 2014)
New Revision: 5907

Added:
   glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.diff
Removed:
   glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.patch
Modified:
   glibc-package/branches/eglibc-2.18/debian/changelog
   glibc-package/branches/eglibc-2.18/debian/patches/series
Log:
Rename last patch from .patch to .diff

Modified: glibc-package/branches/eglibc-2.18/debian/changelog
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/changelog	2014-01-10 17:37:25 UTC (rev 5906)
+++ glibc-package/branches/eglibc-2.18/debian/changelog	2014-01-10 17:43:01 UTC (rev 5907)
@@ -10,7 +10,7 @@
     drop buggy SSE4.2 srtstr implementations in favour of an SSE2 version.
   * debian/patches/any/cvs-ptrace_peeksiginfo_args.diff: Prepend __ prefix
     to ptrace_peeksiginfo_args struct to prevent namespace clash w/ linux.
-  * debian/patches/powerpc/cvs-ppc64-vdso-ifunc.patch: New upstream fix to
+  * debian/patches/powerpc/cvs-ppc64-vdso-ifunc.diff: Pull upstream fix to
     squash undefined behaviour in PowerPC64 vDSO IFUNC symbol resolutions.
 
   [ Aurelien Jarno ]

Copied: glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.diff (from rev 5906, glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.patch)
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.diff	                        (rev 0)
+++ glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.diff	2014-01-10 17:43:01 UTC (rev 5907)
@@ -0,0 +1,86 @@
+commit 76a9b9986141b1a7d9fd290c349d27fcee780c7a
+Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+Date:   Thu Nov 7 05:34:22 2013 -0600
+
+    PowerPC: Fix vDSO missing ODP entries
+    
+    This patch fixes the vDSO symbol used directed in IFUNC resolver where
+    they do not have an associated ODP entry leading to undefined behavior
+    in some cases. It adds an artificial OPD static entry to such cases
+    and set its TOC to non 0 to avoid triggering lazy resolutions.
+
+2013-11-08  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+
+	* sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h (VDSO_IFUNC_RET):
+	Add artificial ODP entry for vDSO symbol for PPC64.
+	* sysdeps/unix/sysv/linux/powerpc/gettimeofday.c: Adjust includes.
+	* sysdeps/unix/sysv/linux/powerpc/time.c: Likewise.
+
+diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h
+index ba54de4..d189169 100644
+--- a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h
++++ b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h
+@@ -41,12 +41,32 @@ extern void *__vdso_sigtramp32;
+ 
+ extern void *__vdso_time;
+ 
+-/* This macro is needed for PPC64 to return a skeleton OPD entry of a vDSO
+-   symbol.  This works because _dl_vdso_vsym always return the function
+-   address, and no vDSO symbols use the TOC or chain pointers from the OPD
+-   so we can allow them to be garbage.  */
+ #if defined(__PPC64__) || defined(__powerpc64__)
+-#define VDSO_IFUNC_RET(value)  ((void *) &(value))
++/* The correct solution is for _dl_vdso_vsym to return the address of the OPD
++   for the kernel VDSO function.  That address would then be stored in the
++   __vdso_* variables and returned as the result of the IFUNC resolver function.
++   Yet, the kernel does not contain any OPD entries for the VDSO functions
++   (incomplete implementation).  However, PLT relocations for IFUNCs still expect
++   the address of an OPD to be returned from the IFUNC resolver function (since
++   PLT entries on PPC64 are just copies of OPDs).  The solution for now is to
++   create an artificial static OPD for each VDSO function returned by a resolver
++   function.  The TOC value is set to a non-zero value to avoid triggering lazy
++   symbol resolution via .glink0/.plt0 for a zero TOC (requires thread-safe PLT
++   sequences) when the dynamic linker isn't prepared for it e.g. RTLD_NOW.  None
++   of the kernel VDSO routines use the TOC or AUX values so any non-zero value
++   will work.  Note that function pointer comparisons will not use this artificial
++   static OPD since those are resolved via ADDR64 relocations and will point at
++   the non-IFUNC default OPD for the symbol.  Lastly, because the IFUNC relocations
++   are processed immediately at startup the resolver functions and this code need
++   not be thread-safe, but if the caller writes to a PLT slot it must do so in a
++   thread-safe manner with all the required barriers.  */
++#define VDSO_IFUNC_RET(value)                            \
++  ({                                                     \
++    static Elf64_FuncDesc vdso_opd = { .fd_toc = ~0x0 }; \
++    vdso_opd.fd_func = (Elf64_Addr)value;                \
++    &vdso_opd;                                           \
++  })
++
+ #else
+ #define VDSO_IFUNC_RET(value)  ((void *) (value))
+ #endif
+diff --git a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
+index 6506d75..48c3f84 100644
+--- a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
++++ b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
+@@ -22,6 +22,7 @@
+ 
+ # include <dl-vdso.h>
+ # include <bits/libc-vdso.h>
++# include <dl-machine.h>
+ 
+ void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday");
+ 
+diff --git a/sysdeps/unix/sysv/linux/powerpc/time.c b/sysdeps/unix/sysv/linux/powerpc/time.c
+index 66b4eb3..2d77ece 100644
+--- a/sysdeps/unix/sysv/linux/powerpc/time.c
++++ b/sysdeps/unix/sysv/linux/powerpc/time.c
+@@ -20,7 +20,9 @@
+ 
+ # include <time.h>
+ # include <sysdep.h>
++# include <dl-vdso.h>
+ # include <bits/libc-vdso.h>
++# include <dl-machine.h>
+ 
+ void *time_ifunc (void) asm ("time");
+ 

Deleted: glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.patch
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.patch	2014-01-10 17:37:25 UTC (rev 5906)
+++ glibc-package/branches/eglibc-2.18/debian/patches/powerpc/cvs-ppc64-vdso-ifunc.patch	2014-01-10 17:43:01 UTC (rev 5907)
@@ -1,86 +0,0 @@
-commit 76a9b9986141b1a7d9fd290c349d27fcee780c7a
-Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
-Date:   Thu Nov 7 05:34:22 2013 -0600
-
-    PowerPC: Fix vDSO missing ODP entries
-    
-    This patch fixes the vDSO symbol used directed in IFUNC resolver where
-    they do not have an associated ODP entry leading to undefined behavior
-    in some cases. It adds an artificial OPD static entry to such cases
-    and set its TOC to non 0 to avoid triggering lazy resolutions.
-
-2013-11-08  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
-
-	* sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h (VDSO_IFUNC_RET):
-	Add artificial ODP entry for vDSO symbol for PPC64.
-	* sysdeps/unix/sysv/linux/powerpc/gettimeofday.c: Adjust includes.
-	* sysdeps/unix/sysv/linux/powerpc/time.c: Likewise.
-
-diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h
-index ba54de4..d189169 100644
---- a/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h
-+++ b/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h
-@@ -41,12 +41,32 @@ extern void *__vdso_sigtramp32;
- 
- extern void *__vdso_time;
- 
--/* This macro is needed for PPC64 to return a skeleton OPD entry of a vDSO
--   symbol.  This works because _dl_vdso_vsym always return the function
--   address, and no vDSO symbols use the TOC or chain pointers from the OPD
--   so we can allow them to be garbage.  */
- #if defined(__PPC64__) || defined(__powerpc64__)
--#define VDSO_IFUNC_RET(value)  ((void *) &(value))
-+/* The correct solution is for _dl_vdso_vsym to return the address of the OPD
-+   for the kernel VDSO function.  That address would then be stored in the
-+   __vdso_* variables and returned as the result of the IFUNC resolver function.
-+   Yet, the kernel does not contain any OPD entries for the VDSO functions
-+   (incomplete implementation).  However, PLT relocations for IFUNCs still expect
-+   the address of an OPD to be returned from the IFUNC resolver function (since
-+   PLT entries on PPC64 are just copies of OPDs).  The solution for now is to
-+   create an artificial static OPD for each VDSO function returned by a resolver
-+   function.  The TOC value is set to a non-zero value to avoid triggering lazy
-+   symbol resolution via .glink0/.plt0 for a zero TOC (requires thread-safe PLT
-+   sequences) when the dynamic linker isn't prepared for it e.g. RTLD_NOW.  None
-+   of the kernel VDSO routines use the TOC or AUX values so any non-zero value
-+   will work.  Note that function pointer comparisons will not use this artificial
-+   static OPD since those are resolved via ADDR64 relocations and will point at
-+   the non-IFUNC default OPD for the symbol.  Lastly, because the IFUNC relocations
-+   are processed immediately at startup the resolver functions and this code need
-+   not be thread-safe, but if the caller writes to a PLT slot it must do so in a
-+   thread-safe manner with all the required barriers.  */
-+#define VDSO_IFUNC_RET(value)                            \
-+  ({                                                     \
-+    static Elf64_FuncDesc vdso_opd = { .fd_toc = ~0x0 }; \
-+    vdso_opd.fd_func = (Elf64_Addr)value;                \
-+    &vdso_opd;                                           \
-+  })
-+
- #else
- #define VDSO_IFUNC_RET(value)  ((void *) (value))
- #endif
-diff --git a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
-index 6506d75..48c3f84 100644
---- a/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
-+++ b/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
-@@ -22,6 +22,7 @@
- 
- # include <dl-vdso.h>
- # include <bits/libc-vdso.h>
-+# include <dl-machine.h>
- 
- void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday");
- 
-diff --git a/sysdeps/unix/sysv/linux/powerpc/time.c b/sysdeps/unix/sysv/linux/powerpc/time.c
-index 66b4eb3..2d77ece 100644
---- a/sysdeps/unix/sysv/linux/powerpc/time.c
-+++ b/sysdeps/unix/sysv/linux/powerpc/time.c
-@@ -20,7 +20,9 @@
- 
- # include <time.h>
- # include <sysdep.h>
-+# include <dl-vdso.h>
- # include <bits/libc-vdso.h>
-+# include <dl-machine.h>
- 
- void *time_ifunc (void) asm ("time");
- 

Modified: glibc-package/branches/eglibc-2.18/debian/patches/series
===================================================================
--- glibc-package/branches/eglibc-2.18/debian/patches/series	2014-01-10 17:37:25 UTC (rev 5906)
+++ glibc-package/branches/eglibc-2.18/debian/patches/series	2014-01-10 17:43:01 UTC (rev 5907)
@@ -178,7 +178,7 @@
 mips/cvs-prlimit64.diff
 
 powerpc/local-math-logb.diff
-powerpc/cvs-ppc64-vdso-ifunc.patch
+powerpc/cvs-ppc64-vdso-ifunc.diff
 
 s390/submitted-nexttowardf.diff
 s390/cvs-s390-tls-got-pointer.diff


Reply to: