[oe-commits] Frans Meulenbroeks : glibc 2.10.1: added ifdef around PTR*MANGLE

git version control git at git.openembedded.org
Sat Jul 10 18:31:04 UTC 2010


Module: openembedded.git
Branch: org.openembedded.dev
Commit: a31766f3b10695f9c0cfa051f66d982b0845e2fa
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=a31766f3b10695f9c0cfa051f66d982b0845e2fa

Author: Frans Meulenbroeks <fransmeulenbroeks at gmail.com>
Date:   Sat Jul 10 20:25:48 2010 +0200

glibc 2.10.1: added ifdef around PTR*MANGLE

some of the calls to PTR_MANGLE and PTR_UNMANGLE were
guarded by #ifdef's whereas others were not.
This causes problems on architectures that do not
have those macros.
Fix is to add ifdefs around those invocations
Also added PR to the recipe

Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks at gmail.com>

---

 recipes/glibc/glibc-2.10.1/PTR_MANGLE.patch |  183 +++++++++++++++++++++++++++
 recipes/glibc/glibc_2.10.1.bb               |    3 +
 2 files changed, 186 insertions(+), 0 deletions(-)

diff --git a/recipes/glibc/glibc-2.10.1/PTR_MANGLE.patch b/recipes/glibc/glibc-2.10.1/PTR_MANGLE.patch
new file mode 100644
index 0000000..d88cd76
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/PTR_MANGLE.patch
@@ -0,0 +1,183 @@
+Index: glibc-2.10.1/csu/libc-start.c
+===================================================================
+--- glibc-2.10.1.orig/csu/libc-start.c
++++ glibc-2.10.1/csu/libc-start.c
+@@ -234,7 +234,9 @@ LIBC_START_MAIN (int (*main) (int, char
+       result = 0;
+ # ifdef SHARED
+       unsigned int *ptr = __libc_pthread_functions.ptr_nthreads;
++#ifdef PTR_DEMANGLE
+       PTR_DEMANGLE (ptr);
++#endif
+ # else
+       extern unsigned int __nptl_nthreads __attribute ((weak));
+       unsigned int *const ptr = &__nptl_nthreads;
+Index: glibc-2.10.1/inet/getnetgrent_r.c
+===================================================================
+--- glibc-2.10.1.orig/inet/getnetgrent_r.c
++++ glibc-2.10.1/inet/getnetgrent_r.c
+@@ -57,14 +57,18 @@ setup (void **fctp, service_user **nipp)
+ 	 same result every time.  So we need no locking.  */
+       no_more = __nss_netgroup_lookup (nipp, "setnetgrent", fctp);
+       startp = no_more ? (service_user *) -1 : *nipp;
++#ifdef PTR_MANGLE
+       PTR_MANGLE (startp);
++#endif
+       atomic_write_barrier ();
+       startp_initialized = true;
+     }
+   else
+     {
+       service_user *nip = startp;
++#ifdef PTR_DEMANGLE
+       PTR_DEMANGLE (nip);
++#endif
+       if (nip == (service_user *) -1)
+ 	/* No services at all.  */
+ 	return 1;
+Index: glibc-2.10.1/nptl/sysdeps/pthread/unwind-forcedunwind.c
+===================================================================
+--- glibc-2.10.1.orig/nptl/sysdeps/pthread/unwind-forcedunwind.c
++++ glibc-2.10.1/nptl/sysdeps/pthread/unwind-forcedunwind.c
+@@ -63,13 +63,21 @@ pthread_cancel_init (void)
+       )
+     __libc_fatal ("libgcc_s.so.1 must be installed for pthread_cancel to work\n");
+ 
++#ifdef PTR_MANGLE
+   PTR_MANGLE (resume);
++#endif
+   libgcc_s_resume = resume;
++#ifdef PTR_MANGLE
+   PTR_MANGLE (personality);
++#endif
+   libgcc_s_personality = personality;
++#ifdef PTR_MANGLE
+   PTR_MANGLE (forcedunwind);
++#endif
+   libgcc_s_forcedunwind = forcedunwind;
++#ifdef PTR_MANGLE
+   PTR_MANGLE (getcfa);
++#endif
+   libgcc_s_getcfa = getcfa;
+   /* Make sure libgcc_s_handle is written last.  Otherwise,
+      pthread_cancel_init might return early even when the pointer the
+@@ -97,7 +105,9 @@ _Unwind_Resume (struct _Unwind_Exception
+     pthread_cancel_init ();
+ 
+   void (*resume) (struct _Unwind_Exception *exc) = libgcc_s_resume;
++#ifdef PTR_DEMANGLE
+   PTR_DEMANGLE (resume);
++#endif
+   resume (exc);
+ }
+ 
+@@ -113,7 +123,9 @@ __gcc_personality_v0 (int version, _Unwi
+   _Unwind_Reason_Code (*personality)
+     (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+      struct _Unwind_Context *) = libgcc_s_personality;
++#ifdef PTR_DEMANGLE
+   PTR_DEMANGLE (personality);
++#endif
+   return personality (version, actions, exception_class, ue_header, context);
+ }
+ 
+@@ -127,7 +139,9 @@ _Unwind_ForcedUnwind (struct _Unwind_Exc
+   _Unwind_Reason_Code (*forcedunwind)
+     (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *)
+     = libgcc_s_forcedunwind;
++#ifdef PTR_DEMANGLE
+   PTR_DEMANGLE (forcedunwind);
++#endif
+   return forcedunwind (exc, stop, stop_argument);
+ }
+ 
+@@ -138,6 +152,8 @@ _Unwind_GetCFA (struct _Unwind_Context *
+     pthread_cancel_init ();
+ 
+   _Unwind_Word (*getcfa) (struct _Unwind_Context *) = libgcc_s_getcfa;
++#ifdef PTR_DEMANGLE
+   PTR_DEMANGLE (getcfa);
++#endif
+   return getcfa (context);
+ }
+Index: glibc-2.10.1/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c
+===================================================================
+--- glibc-2.10.1.orig/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c
++++ glibc-2.10.1/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c
+@@ -67,7 +67,9 @@ __libc_pthread_init (ptr, reclaim, funct
+   for (size_t cnt = 0; cnt < NPTRS; ++cnt)
+     {
+       void *p = src->parr[cnt];
++#ifdef PTR_MANGLE
+       PTR_MANGLE (p);
++#endif
+       dest->parr[cnt] = p;
+     }
+   __libc_pthread_functions_init = 1;
+Index: glibc-2.10.1/nss/getXXbyYY_r.c
+===================================================================
+--- glibc-2.10.1.orig/nss/getXXbyYY_r.c
++++ glibc-2.10.1/nss/getXXbyYY_r.c
+@@ -202,7 +202,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, L
+       if (no_more)
+ 	{
+ 	  void *tmp_ptr = (service_user *) -1l;
++#ifdef PTR_MANGLE
+ 	  PTR_MANGLE (tmp_ptr);
++#endif
+ 	  startp = tmp_ptr;
+ 	}
+       else
+@@ -223,10 +225,14 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, L
+ #endif /* need _res_hconf */
+ 
+ 	  void *tmp_ptr = fct.l;
++#ifdef PTR_MANGLE
+ 	  PTR_MANGLE (tmp_ptr);
++#endif
+ 	  start_fct = tmp_ptr;
+ 	  tmp_ptr = nip;
++#ifdef PTR_MANGLE
+ 	  PTR_MANGLE (tmp_ptr);
++#endif
+ 	  startp = tmp_ptr;
+ 	}
+ 
+@@ -238,9 +244,13 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, L
+   else
+     {
+       fct.l = start_fct;
++#ifdef PTR_DEMANGLE
+       PTR_DEMANGLE (fct.l);
++#endif
+       nip = startp;
++#ifdef PTR_DEMANGLE
+       PTR_DEMANGLE (nip);
++#endif
+       no_more = nip == (service_user *) -1l;
+     }
+ 
+Index: glibc-2.10.1/nss/nsswitch.c
+===================================================================
+--- glibc-2.10.1.orig/nss/nsswitch.c
++++ glibc-2.10.1/nss/nsswitch.c
+@@ -303,7 +303,9 @@ __nss_lookup_function (service_user *ni,
+     {
+       /* The search found an existing structure in the tree.  */
+       result = ((known_function *) *found)->fct_ptr;
++#ifdef PTR_DEMANGLE
+       PTR_DEMANGLE (result);
++#endif
+     }
+   else
+     {
+@@ -427,7 +429,9 @@ __nss_lookup_function (service_user *ni,
+ 	  /* Remember function pointer for later calls.  Even if null, we
+ 	     record it so a second try needn't search the library again.  */
+ 	  known->fct_ptr = result;
++#ifdef PTR_MANGLE
+ 	  PTR_MANGLE (known->fct_ptr);
++#endif
+ 	}
+     }
+ 
diff --git a/recipes/glibc/glibc_2.10.1.bb b/recipes/glibc/glibc_2.10.1.bb
index 6f0d0f6..21873ec 100644
--- a/recipes/glibc/glibc_2.10.1.bb
+++ b/recipes/glibc/glibc_2.10.1.bb
@@ -1,5 +1,7 @@
 require glibc.inc
 
+PR = "${INC_PR}.1"
+
 ARM_INSTRUCTION_SET = "arm"
 
 PACKAGES_DYNAMIC = "libc6*"
@@ -57,6 +59,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2;name=archive \
            file://arm-lowlevellock-include-tls.patch \
            file://glibc-2.9-enable-binutils-2.2.patch \
 	   file://armv4t-interworking.patch \
+	   file://PTR_MANGLE.patch \
            "
 
 # Build fails on sh3 and sh4 without additional patches





More information about the Openembedded-commits mailing list