Re: [OE-core] [PATCH] eglibc-2.14: add patch to fix libdl crash

2011-10-04 Thread Klaus 'mrmoku' Kurzmann
Hello,

On Mon, 03 Oct 2011, Khem Raj wrote:

 On 10/3/2011 2:30 AM, mo...@mnet-online.de wrote:
 From: Klaus Kurzmannm...@fluxnetz.de
 
 * Without this patch programs using alsa-lib crash (alsamixer for example).
 * This patch is taken verbatim from ArchLinux.
 

 can you add appropriate header for this?

Sorry, still have to find my way into the new stuff :) Martin pointed
that out to me - after I sent the mail.

I tried googling to find out about the upstream status for more than an
hour - without success. And glibc commit messages seem to be not very
informative mostly ;)

 secondly this reverts the license year text
 from 2011 to 2010 that should not be needed.

yeah, I have seen that. I think that comes from the patch being a revert
(or partial revert) of some commit. If it is ok to change 'stolen'
patches I can remove that.

Klaus 'mrmoku' Kurzmann

 Signed-off-by: Klaus Kurzmannm...@fluxnetz.de
 ---
   .../eglibc-2.14/glibc-2.14-libdl-crash.patch   |  132 
  
   meta/recipes-core/eglibc/eglibc_2.14.bb|3 +-
   2 files changed, 134 insertions(+), 1 deletions(-)
   create mode 100644 
  meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
 
 diff --git 
 a/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch 
 b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
 new file mode 100644
 index 000..ee29f8c
 --- /dev/null
 +++ b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
 @@ -0,0 +1,132 @@
 +diff --git a/elf/dl-close.c b/elf/dl-close.c
 +index 73b2a2f..9bd91e3 100644
 +--- a/elf/dl-close.c
  b/elf/dl-close.c
 +@@ -1,5 +1,5 @@
 + /* Close a shared object opened by `_dl_open'.
 +-   Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
 ++   Copyright (C) 1996-2007, 2009, 2010 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
 +@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
 +   if (map-l_direct_opencount  0 || map-l_type != lt_loaded
 +   || dl_close_state != not_pending)
 + {
 +-  if (map-l_direct_opencount == 0)
 +-   {
 +- if (map-l_type == lt_loaded)
 +-   dl_close_state = rerun;
 +- else if (map-l_type == lt_library)
 +-   {
 +- struct link_map **oldp = map-l_initfini;
 +- map-l_initfini = map-l_orig_initfini;
 +- _dl_scope_free (oldp);
 +-   }
 +-   }
 ++  if (map-l_direct_opencount == 0  map-l_type == lt_loaded)
 ++   dl_close_state = rerun;
 +
 +   /* There are still references to this object.  Do nothing more.  */
 +   if (__builtin_expect (GLRO(dl_debug_mask)  DL_DEBUG_FILES, 0))
 +diff --git a/elf/dl-deps.c b/elf/dl-deps.c
 +index 9e30594..3890d00 100644
 +--- a/elf/dl-deps.c
  b/elf/dl-deps.c
 +@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
 +  nneeded * sizeof needed[0]);
 +  atomic_write_barrier ();
 +  l-l_initfini = l_initfini;
 ++ l-l_free_initfini = 1;
 +}
 +
 +   /* If we have no auxiliary objects just go on to the next map.  */
 +@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING));
 +   l_initfini[nlist] = NULL;
 +   atomic_write_barrier ();
 +   map-l_initfini = l_initfini;
 ++  map-l_free_initfini = 1;
 +   if (l_reldeps != NULL)
 + {
 +   atomic_write_barrier ();
 +@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING));
 +   _dl_scope_free (old_l_reldeps);
 + }
 +   if (old_l_initfini != NULL)
 +-  map-l_orig_initfini = old_l_initfini;
 ++_dl_scope_free (old_l_initfini);
 + }
 +diff --git a/elf/dl-libc.c b/elf/dl-libc.c
 +index 7be9483..a13fce3 100644
 +--- a/elf/dl-libc.c
  b/elf/dl-libc.c
 +@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
 +
 +   for (Lmid_t ns = 0; ns  GL(dl_nns); ++ns)
 + {
 +-  /* Remove all additional names added to the objects.  */
 +   for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l-l_next)
 +{
 +  struct libname_list *lnp = l-l_libname-next;
 +
 +  l-l_libname-next = NULL;
 +
 ++ /* Remove all additional names added to the objects.  */
 +  while (lnp != NULL)
 +{
 +  struct libname_list *old = lnp;
 +@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
 +  if (! old-dont_free)
 +free (old);
 +}
 ++
 ++ /* Free the initfini dependency list.  */
 ++ if (l-l_free_initfini)
 ++   free (l-l_initfini);
 +}
 +
 +   if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
 +diff --git a/elf/rtld.c b/elf/rtld.c
 +index 4a9109e..617e30e 100644
 +--- a/elf/rtld.c
  b/elf/rtld.c
 +@@ -2251,6 +2251,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit 
 interface: %s; ignored.\n,
 +  lnp-dont_free = 1;
 +  lnp = lnp-next;
 +}
 ++ l-l_free_initfini = 0;
 +
 +  if (l !=GL(dl_rtld_map))
 +

Re: [OE-core] [PATCH] eglibc-2.14: add patch to fix libdl crash

2011-10-04 Thread Khem Raj
On Tue, Oct 4, 2011 at 1:05 PM, Klaus 'mrmoku' Kurzmann
mo...@mnet-online.de wrote:
 Hello,

 On Mon, 03 Oct 2011, Khem Raj wrote:

 On 10/3/2011 2:30 AM, mo...@mnet-online.de wrote:
 From: Klaus Kurzmannm...@fluxnetz.de
 
 * Without this patch programs using alsa-lib crash (alsamixer for example).
 * This patch is taken verbatim from ArchLinux.
 

 can you add appropriate header for this?

 Sorry, still have to find my way into the new stuff :) Martin pointed
 that out to me - after I sent the mail.

 I tried googling to find out about the upstream status for more than an
 hour - without success. And glibc commit messages seem to be not very
 informative mostly ;)


the patch is not applied upstream last time I looked quickly.

 secondly this reverts the license year text
 from 2011 to 2010 that should not be needed.

 yeah, I have seen that. I think that comes from the patch being a revert
 (or partial revert) of some commit. If it is ok to change 'stolen'
 patches I can remove that.\

yes licenses dont change because of a single revert there might be more
changes that were done in that time frame which should have used the
current year.


 Klaus 'mrmoku' Kurzmann

 Signed-off-by: Klaus Kurzmannm...@fluxnetz.de
 ---
   .../eglibc-2.14/glibc-2.14-libdl-crash.patch       |  132 
  
   meta/recipes-core/eglibc/eglibc_2.14.bb            |    3 +-
   2 files changed, 134 insertions(+), 1 deletions(-)
   create mode 100644 
  meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
 
 diff --git 
 a/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch 
 b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
 new file mode 100644
 index 000..ee29f8c
 --- /dev/null
 +++ b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
 @@ -0,0 +1,132 @@
 +diff --git a/elf/dl-close.c b/elf/dl-close.c
 +index 73b2a2f..9bd91e3 100644
 +--- a/elf/dl-close.c
  b/elf/dl-close.c
 +@@ -1,5 +1,5 @@
 + /* Close a shared object opened by `_dl_open'.
 +-   Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, 
 Inc.
 ++   Copyright (C) 1996-2007, 2009, 2010 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
 +@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
 +   if (map-l_direct_opencount  0 || map-l_type != lt_loaded
 +       || dl_close_state != not_pending)
 +     {
 +-      if (map-l_direct_opencount == 0)
 +-   {
 +-     if (map-l_type == lt_loaded)
 +-       dl_close_state = rerun;
 +-     else if (map-l_type == lt_library)
 +-       {
 +-         struct link_map **oldp = map-l_initfini;
 +-         map-l_initfini = map-l_orig_initfini;
 +-         _dl_scope_free (oldp);
 +-       }
 +-   }
 ++      if (map-l_direct_opencount == 0  map-l_type == lt_loaded)
 ++   dl_close_state = rerun;
 +
 +       /* There are still references to this object.  Do nothing more.  */
 +       if (__builtin_expect (GLRO(dl_debug_mask)  DL_DEBUG_FILES, 0))
 +diff --git a/elf/dl-deps.c b/elf/dl-deps.c
 +index 9e30594..3890d00 100644
 +--- a/elf/dl-deps.c
  b/elf/dl-deps.c
 +@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
 +              nneeded * sizeof needed[0]);
 +      atomic_write_barrier ();
 +      l-l_initfini = l_initfini;
 ++     l-l_free_initfini = 1;
 +    }
 +
 +       /* If we have no auxiliary objects just go on to the next map.  */
 +@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING));
 +   l_initfini[nlist] = NULL;
 +   atomic_write_barrier ();
 +   map-l_initfini = l_initfini;
 ++  map-l_free_initfini = 1;
 +   if (l_reldeps != NULL)
 +     {
 +       atomic_write_barrier ();
 +@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING));
 +       _dl_scope_free (old_l_reldeps);
 +     }
 +   if (old_l_initfini != NULL)
 +-      map-l_orig_initfini = old_l_initfini;
 ++    _dl_scope_free (old_l_initfini);
 + }
 +diff --git a/elf/dl-libc.c b/elf/dl-libc.c
 +index 7be9483..a13fce3 100644
 +--- a/elf/dl-libc.c
  b/elf/dl-libc.c
 +@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
 +
 +   for (Lmid_t ns = 0; ns  GL(dl_nns); ++ns)
 +     {
 +-      /* Remove all additional names added to the objects.  */
 +       for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l-l_next)
 +    {
 +      struct libname_list *lnp = l-l_libname-next;
 +
 +      l-l_libname-next = NULL;
 +
 ++     /* Remove all additional names added to the objects.  */
 +      while (lnp != NULL)
 +        {
 +          struct libname_list *old = lnp;
 +@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
 +          if (! old-dont_free)
 +            free (old);
 +        }
 ++
 ++     /* Free the initfini dependency list.  */
 ++     if (l-l_free_initfini)
 ++       free (l-l_initfini);
 +    }
 +
 +       if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
 +diff --git a/elf/rtld.c b/elf/rtld.c
 +index 

Re: [OE-core] [PATCH] eglibc-2.14: add patch to fix libdl crash

2011-10-04 Thread Saul Wold

On 10/04/2011 01:17 PM, Khem Raj wrote:

On Tue, Oct 4, 2011 at 1:05 PM, Klaus 'mrmoku' Kurzmann
mo...@mnet-online.de  wrote:

Hello,

On Mon, 03 Oct 2011, Khem Raj wrote:


On 10/3/2011 2:30 AM, mo...@mnet-online.de wrote:

From: Klaus Kurzmannm...@fluxnetz.de

* Without this patch programs using alsa-lib crash (alsamixer for example).
* This patch is taken verbatim from ArchLinux.




can you add appropriate header for this?


Sorry, still have to find my way into the new stuff :) Martin pointed
that out to me - after I sent the mail.

I tried googling to find out about the upstream status for more than an
hour - without success. And glibc commit messages seem to be not very
informative mostly ;)

I think you should look at the following wiki page for the header and 
SOB info:


http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines

Sau!



the patch is not applied upstream last time I looked quickly.


secondly this reverts the license year text
from 2011 to 2010 that should not be needed.


yeah, I have seen that. I think that comes from the patch being a revert
(or partial revert) of some commit. If it is ok to change 'stolen'
patches I can remove that.\


yes licenses dont change because of a single revert there might be more
changes that were done in that time frame which should have used the
current year.



Klaus 'mrmoku' Kurzmann


Signed-off-by: Klaus Kurzmannm...@fluxnetz.de
---
  .../eglibc-2.14/glibc-2.14-libdl-crash.patch   |  132 
  meta/recipes-core/eglibc/eglibc_2.14.bb|3 +-
  2 files changed, 134 insertions(+), 1 deletions(-)
  create mode 100644 
meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch

diff --git a/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch 
b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
new file mode 100644
index 000..ee29f8c
--- /dev/null
+++ b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
@@ -0,0 +1,132 @@
+diff --git a/elf/dl-close.c b/elf/dl-close.c
+index 73b2a2f..9bd91e3 100644
+--- a/elf/dl-close.c
 b/elf/dl-close.c
+@@ -1,5 +1,5 @@
+ /* Close a shared object opened by `_dl_open'.
+-   Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
++   Copyright (C) 1996-2007, 2009, 2010 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
+@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
+   if (map-l_direct_opencount0 || map-l_type != lt_loaded
+   || dl_close_state != not_pending)
+ {
+-  if (map-l_direct_opencount == 0)
+-   {
+- if (map-l_type == lt_loaded)
+-   dl_close_state = rerun;
+- else if (map-l_type == lt_library)
+-   {
+- struct link_map **oldp = map-l_initfini;
+- map-l_initfini = map-l_orig_initfini;
+- _dl_scope_free (oldp);
+-   }
+-   }
++  if (map-l_direct_opencount == 0map-l_type == lt_loaded)
++   dl_close_state = rerun;
+
+   /* There are still references to this object.  Do nothing more.  */
+   if (__builtin_expect (GLRO(dl_debug_mask)DL_DEBUG_FILES, 0))
+diff --git a/elf/dl-deps.c b/elf/dl-deps.c
+index 9e30594..3890d00 100644
+--- a/elf/dl-deps.c
 b/elf/dl-deps.c
+@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
+  nneeded * sizeof needed[0]);
+  atomic_write_barrier ();
+  l-l_initfini = l_initfini;
++ l-l_free_initfini = 1;
+}
+
+   /* If we have no auxiliary objects just go on to the next map.  */
+@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING));
+   l_initfini[nlist] = NULL;
+   atomic_write_barrier ();
+   map-l_initfini = l_initfini;
++  map-l_free_initfini = 1;
+   if (l_reldeps != NULL)
+ {
+   atomic_write_barrier ();
+@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING));
+   _dl_scope_free (old_l_reldeps);
+ }
+   if (old_l_initfini != NULL)
+-  map-l_orig_initfini = old_l_initfini;
++_dl_scope_free (old_l_initfini);
+ }
+diff --git a/elf/dl-libc.c b/elf/dl-libc.c
+index 7be9483..a13fce3 100644
+--- a/elf/dl-libc.c
 b/elf/dl-libc.c
+@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
+
+   for (Lmid_t ns = 0; nsGL(dl_nns); ++ns)
+ {
+-  /* Remove all additional names added to the objects.  */
+   for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l-l_next)
+{
+  struct libname_list *lnp = l-l_libname-next;
+
+  l-l_libname-next = NULL;
+
++ /* Remove all additional names added to the objects.  */
+  while (lnp != NULL)
+{
+  struct libname_list *old = lnp;
+@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
+  if (! old-dont_free)
+free (old);
+}
++
++ /* Free the initfini dependency list.  */
++ if (l-l_free_initfini)
++   free (l-l_initfini);
+}
+
+   if (__builtin_expect 

[OE-core] [PATCH] eglibc-2.14: add patch to fix libdl crash

2011-10-03 Thread mokml
From: Klaus Kurzmann m...@fluxnetz.de

* Without this patch programs using alsa-lib crash (alsamixer for example).
* This patch is taken verbatim from ArchLinux.

Signed-off-by: Klaus Kurzmann m...@fluxnetz.de
---
 .../eglibc-2.14/glibc-2.14-libdl-crash.patch   |  132 
 meta/recipes-core/eglibc/eglibc_2.14.bb|3 +-
 2 files changed, 134 insertions(+), 1 deletions(-)
 create mode 100644 
meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch

diff --git a/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch 
b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
new file mode 100644
index 000..ee29f8c
--- /dev/null
+++ b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
@@ -0,0 +1,132 @@
+diff --git a/elf/dl-close.c b/elf/dl-close.c
+index 73b2a2f..9bd91e3 100644
+--- a/elf/dl-close.c
 b/elf/dl-close.c
+@@ -1,5 +1,5 @@
+ /* Close a shared object opened by `_dl_open'.
+-   Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
++   Copyright (C) 1996-2007, 2009, 2010 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
+@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
+   if (map-l_direct_opencount  0 || map-l_type != lt_loaded
+   || dl_close_state != not_pending)
+ {
+-  if (map-l_direct_opencount == 0)
+-  {
+-if (map-l_type == lt_loaded)
+-  dl_close_state = rerun;
+-else if (map-l_type == lt_library)
+-  {
+-struct link_map **oldp = map-l_initfini;
+-map-l_initfini = map-l_orig_initfini;
+-_dl_scope_free (oldp);
+-  }
+-  }
++  if (map-l_direct_opencount == 0  map-l_type == lt_loaded)
++  dl_close_state = rerun;
+ 
+   /* There are still references to this object.  Do nothing more.  */
+   if (__builtin_expect (GLRO(dl_debug_mask)  DL_DEBUG_FILES, 0))
+diff --git a/elf/dl-deps.c b/elf/dl-deps.c
+index 9e30594..3890d00 100644
+--- a/elf/dl-deps.c
 b/elf/dl-deps.c
+@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
+ nneeded * sizeof needed[0]);
+ atomic_write_barrier ();
+ l-l_initfini = l_initfini;
++l-l_free_initfini = 1;
+   }
+ 
+   /* If we have no auxiliary objects just go on to the next map.  */
+@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING));
+   l_initfini[nlist] = NULL;
+   atomic_write_barrier ();
+   map-l_initfini = l_initfini;
++  map-l_free_initfini = 1;
+   if (l_reldeps != NULL)
+ {
+   atomic_write_barrier ();
+@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING));
+   _dl_scope_free (old_l_reldeps);
+ }
+   if (old_l_initfini != NULL)
+-  map-l_orig_initfini = old_l_initfini;
++_dl_scope_free (old_l_initfini);
+ }
+diff --git a/elf/dl-libc.c b/elf/dl-libc.c
+index 7be9483..a13fce3 100644
+--- a/elf/dl-libc.c
 b/elf/dl-libc.c
+@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
+ 
+   for (Lmid_t ns = 0; ns  GL(dl_nns); ++ns)
+ {
+-  /* Remove all additional names added to the objects.  */
+   for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l-l_next)
+   {
+ struct libname_list *lnp = l-l_libname-next;
+ 
+ l-l_libname-next = NULL;
+ 
++/* Remove all additional names added to the objects.  */
+ while (lnp != NULL)
+   {
+ struct libname_list *old = lnp;
+@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
+ if (! old-dont_free)
+   free (old);
+   }
++
++/* Free the initfini dependency list.  */
++if (l-l_free_initfini)
++  free (l-l_initfini);
+   }
+ 
+   if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
+diff --git a/elf/rtld.c b/elf/rtld.c
+index 4a9109e..617e30e 100644
+--- a/elf/rtld.c
 b/elf/rtld.c
+@@ -2251,6 +2251,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit 
interface: %s; ignored.\n,
+ lnp-dont_free = 1;
+ lnp = lnp-next;
+   }
++l-l_free_initfini = 0;
+ 
+ if (l != GL(dl_rtld_map))
+   _dl_relocate_object (l, l-l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
+diff --git a/include/link.h b/include/link.h
+index e877104..051b99a 100644
+--- a/include/link.h
 b/include/link.h
+@@ -1,6 +1,6 @@
+ /* Data structure for communication from the run-time dynamic linker for
+loaded ELF shared objects.
+-   Copyright (C) 1995-2006, 2007, 2009, 2010, 2011 Free Software Foundation, 
Inc.
++   Copyright (C) 1995-2006, 2007, 2009, 2010 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
+@@ -192,6 +192,9 @@ struct link_map
+during LD_TRACE_PRELINKING=1
+

Re: [OE-core] [PATCH] eglibc-2.14: add patch to fix libdl crash

2011-10-03 Thread Khem Raj

On 10/3/2011 2:30 AM, mo...@mnet-online.de wrote:

From: Klaus Kurzmannm...@fluxnetz.de

* Without this patch programs using alsa-lib crash (alsamixer for example).
* This patch is taken verbatim from ArchLinux.



can you add appropriate header for this?
secondly this reverts the license year text
from 2011 to 2010 that should not be needed.


Signed-off-by: Klaus Kurzmannm...@fluxnetz.de
---
  .../eglibc-2.14/glibc-2.14-libdl-crash.patch   |  132 
  meta/recipes-core/eglibc/eglibc_2.14.bb|3 +-
  2 files changed, 134 insertions(+), 1 deletions(-)
  create mode 100644 
meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch

diff --git a/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch 
b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
new file mode 100644
index 000..ee29f8c
--- /dev/null
+++ b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
@@ -0,0 +1,132 @@
+diff --git a/elf/dl-close.c b/elf/dl-close.c
+index 73b2a2f..9bd91e3 100644
+--- a/elf/dl-close.c
 b/elf/dl-close.c
+@@ -1,5 +1,5 @@
+ /* Close a shared object opened by `_dl_open'.
+-   Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
++   Copyright (C) 1996-2007, 2009, 2010 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
+@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
+   if (map-l_direct_opencount  0 || map-l_type != lt_loaded
+   || dl_close_state != not_pending)
+ {
+-  if (map-l_direct_opencount == 0)
+-  {
+-if (map-l_type == lt_loaded)
+-  dl_close_state = rerun;
+-else if (map-l_type == lt_library)
+-  {
+-struct link_map **oldp = map-l_initfini;
+-map-l_initfini = map-l_orig_initfini;
+-_dl_scope_free (oldp);
+-  }
+-  }
++  if (map-l_direct_opencount == 0  map-l_type == lt_loaded)
++  dl_close_state = rerun;
+
+   /* There are still references to this object.  Do nothing more.  */
+   if (__builtin_expect (GLRO(dl_debug_mask)  DL_DEBUG_FILES, 0))
+diff --git a/elf/dl-deps.c b/elf/dl-deps.c
+index 9e30594..3890d00 100644
+--- a/elf/dl-deps.c
 b/elf/dl-deps.c
+@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
+ nneeded * sizeof needed[0]);
+ atomic_write_barrier ();
+ l-l_initfini = l_initfini;
++l-l_free_initfini = 1;
+   }
+
+   /* If we have no auxiliary objects just go on to the next map.  */
+@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING));
+   l_initfini[nlist] = NULL;
+   atomic_write_barrier ();
+   map-l_initfini = l_initfini;
++  map-l_free_initfini = 1;
+   if (l_reldeps != NULL)
+ {
+   atomic_write_barrier ();
+@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING));
+   _dl_scope_free (old_l_reldeps);
+ }
+   if (old_l_initfini != NULL)
+-  map-l_orig_initfini = old_l_initfini;
++_dl_scope_free (old_l_initfini);
+ }
+diff --git a/elf/dl-libc.c b/elf/dl-libc.c
+index 7be9483..a13fce3 100644
+--- a/elf/dl-libc.c
 b/elf/dl-libc.c
+@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
+
+   for (Lmid_t ns = 0; ns  GL(dl_nns); ++ns)
+ {
+-  /* Remove all additional names added to the objects.  */
+   for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l-l_next)
+   {
+ struct libname_list *lnp = l-l_libname-next;
+
+ l-l_libname-next = NULL;
+
++/* Remove all additional names added to the objects.  */
+ while (lnp != NULL)
+   {
+ struct libname_list *old = lnp;
+@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
+ if (! old-dont_free)
+   free (old);
+   }
++
++/* Free the initfini dependency list.  */
++if (l-l_free_initfini)
++  free (l-l_initfini);
+   }
+
+   if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
+diff --git a/elf/rtld.c b/elf/rtld.c
+index 4a9109e..617e30e 100644
+--- a/elf/rtld.c
 b/elf/rtld.c
+@@ -2251,6 +2251,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit 
interface: %s; ignored.\n,
+ lnp-dont_free = 1;
+ lnp = lnp-next;
+   }
++l-l_free_initfini = 0;
+
+ if (l !=GL(dl_rtld_map))
+   _dl_relocate_object (l, l-l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
+diff --git a/include/link.h b/include/link.h
+index e877104..051b99a 100644
+--- a/include/link.h
 b/include/link.h
+@@ -1,6 +1,6 @@
+ /* Data structure for communication from the run-time dynamic linker for
+loaded ELF shared objects.
+-   Copyright (C) 1995-2006, 2007, 2009, 2010, 2011 Free Software Foundation, 
Inc.
++   Copyright (C) 1995-2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is