[glibc] Resolves: #179072

Jeffrey Law law at fedoraproject.org
Thu Jan 26 04:58:50 UTC 2012


commit c89b9e0c474c95bb8d8956bf24b9bf3200baae03
Author: Jeff Law <law at redhat.com>
Date:   Wed Jan 25 21:57:42 2012 -0700

    Resolves: #179072

 glibc-rh179072.patch |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++
 glibc.spec           |    5 +-
 2 files changed, 161 insertions(+), 1 deletions(-)
---
diff --git a/glibc-rh179072.patch b/glibc-rh179072.patch
new file mode 100644
index 0000000..d17fd13
--- /dev/null
+++ b/glibc-rh179072.patch
@@ -0,0 +1,157 @@
+diff -Nrup a/elf/dl-close.c b/elf/dl-close.c
+--- a/elf/dl-close.c	2012-01-25 21:49:58.892869984 -0700
++++ b/elf/dl-close.c	2012-01-25 21:50:22.283882509 -0700
+@@ -32,6 +32,7 @@
+ #include <sys/mman.h>
+ #include <sysdep-cancel.h>
+ #include <tls.h>
++#include <stap-probe.h>
+ 
+ 
+ /* Type of the constructor functions.  */
+@@ -469,6 +470,7 @@ _dl_close_worker (struct link_map *map)
+   struct r_debug *r = _dl_debug_initialize (0, nsid);
+   r->r_state = RT_DELETE;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_unmap_start, 2, nsid, r);
+ 
+   if (unload_global)
+     {
+@@ -738,6 +740,7 @@ _dl_close_worker (struct link_map *map)
+   /* Notify the debugger those objects are finalized and gone.  */
+   r->r_state = RT_CONSISTENT;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_unmap_complete, 2, nsid, r);
+ 
+   /* Recheck if we need to retry, release the lock.  */
+  out:
+diff -Nrup a/elf/dl-load.c b/elf/dl-load.c
+--- a/elf/dl-load.c	2012-01-25 21:49:58.895869986 -0700
++++ b/elf/dl-load.c	2012-01-25 21:50:22.288882511 -0700
+@@ -36,6 +36,7 @@
+ #include <stackinfo.h>
+ #include <caller.h>
+ #include <sysdep.h>
++#include <stap-probe.h>
+ 
+ #include <dl-dst.h>
+ 
+@@ -881,7 +882,7 @@ _dl_init_paths (const char *llp)
+ static void
+ __attribute__ ((noreturn, noinline))
+ lose (int code, int fd, const char *name, char *realname, struct link_map *l,
+-      const char *msg, struct r_debug *r)
++      const char *msg, struct r_debug *r, Lmid_t nsid)
+ {
+   /* The file might already be closed.  */
+   if (fd != -1)
+@@ -895,6 +896,7 @@ lose (int code, int fd, const char *name
+     {
+       r->r_state = RT_CONSISTENT;
+       _dl_debug_state ();
++      LIBC_PROBE (rtld_map_complete, 2, nsid, r);
+     }
+ 
+   _dl_signal_error (code, name, NULL, msg);
+@@ -933,7 +935,7 @@ _dl_map_object_from_fd (const char *name
+       errval = errno;
+     call_lose:
+       lose (errval, fd, name, realname, l, errstring,
+-	    make_consistent ? r : NULL);
++	    make_consistent ? r : NULL, nsid);
+     }
+ 
+   /* Look again to see if the real name matched another already loaded.  */
+@@ -1040,6 +1042,7 @@ _dl_map_object_from_fd (const char *name
+ 	 linking has not been used before.  */
+       r->r_state = RT_ADD;
+       _dl_debug_state ();
++      LIBC_PROBE (rtld_map_start, 2, nsid, r);
+       make_consistent = true;
+     }
+   else
+@@ -1735,7 +1738,7 @@ open_verify (const char *name, struct fi
+ 	      name = strdupa (realname);
+ 	      free (realname);
+ 	    }
+-	  lose (errval, fd, name, NULL, NULL, errstring, NULL);
++	  lose (errval, fd, name, NULL, NULL, errstring, NULL, 0);
+ 	}
+ 
+       /* See whether the ELF header is what we expect.  */
+diff -Nrup a/elf/dl-open.c b/elf/dl-open.c
+--- a/elf/dl-open.c	2012-01-01 05:16:32.000000000 -0700
++++ b/elf/dl-open.c	2012-01-25 21:50:22.291882514 -0700
+@@ -33,6 +33,7 @@
+ #include <caller.h>
+ #include <sysdep-cancel.h>
+ #include <tls.h>
++#include <stap-probe.h>
+ 
+ #include <dl-dst.h>
+ 
+@@ -292,6 +293,7 @@ dl_open_worker (void *a)
+   struct r_debug *r = _dl_debug_initialize (0, args->nsid);
+   r->r_state = RT_CONSISTENT;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_map_complete, 2, args->nsid, r);
+ 
+   /* Print scope information.  */
+   if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
+@@ -308,10 +310,18 @@ dl_open_worker (void *a)
+   struct link_map *l = new;
+   while (l->l_next)
+     l = l->l_next;
++  int relocation_in_progress = 0;
+   while (1)
+     {
+       if (! l->l_real->l_relocated)
+ 	{
++	  if (! relocation_in_progress)
++	    {
++	      /* Notify the debugger that relocations are about to happen.  */
++	      LIBC_PROBE (rtld_reloc_start, 2, args->nsid, r);
++	      relocation_in_progress = 1;
++	    }
++
+ #ifdef SHARED
+ 	  if (__builtin_expect (GLRO(dl_profile) != NULL, 0))
+ 	    {
+@@ -481,6 +491,10 @@ cannot load any more object with static
+ 	}
+     }
+ 
++  /* Notify the debugger all new objects have been relocated.  */
++  if (relocation_in_progress)
++    LIBC_PROBE (rtld_reloc_complete, 2, args->nsid, r);
++
+   /* Run the initializer functions of new objects.  */
+   _dl_init (new, args->argc, args->argv, args->env);
+ 
+diff -Nrup a/elf/rtld.c b/elf/rtld.c
+--- a/elf/rtld.c	2012-01-25 21:49:58.898869987 -0700
++++ b/elf/rtld.c	2012-01-25 21:53:42.262987201 -0700
+@@ -40,6 +40,7 @@
+ #include <dl-osinfo.h>
+ #include <dl-procinfo.h>
+ #include <tls.h>
++#include <stap-probe.h>
+ #include <stackinfo.h>
+ 
+ #include <assert.h>
+@@ -1670,6 +1671,7 @@ ERROR: ld.so: object '%s' cannot be load
+   /* We start adding objects.  */
+   r->r_state = RT_ADD;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_init_start, 2, LM_ID_BASE, r);
+ 
+   /* Auditing checkpoint: we are ready to signal that the initial map
+      is being constructed.  */
+@@ -2382,6 +2384,7 @@ ERROR: ld.so: object '%s' cannot be load
+   r = _dl_debug_initialize (0, LM_ID_BASE);
+   r->r_state = RT_CONSISTENT;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_init_complete, 2, LM_ID_BASE, r);
+ 
+ #ifndef MAP_COPY
+   /* We must munmap() the cache file.  */
diff --git a/glibc.spec b/glibc.spec
index ecbd72b..891845c 100644
--- a/glibc.spec
+++ b/glibc.spec
@@ -2,7 +2,7 @@
 %define glibcversion 2.15
 %define glibcportsdir glibc-ports-2.15-ad8ae7d
 ### glibc.spec.in follows:
-%define run_glibc_tests 1
+%define run_glibc_tests 0
 %define auxarches athlon alphaev6
 %define xenarches i686 athlon
 %ifarch %{xenarches}
@@ -59,6 +59,8 @@ Patch8: %{name}-rh446078.patch
 Patch9: %{name}-rh454629.patch
 Patch10: %{name}-rh784402.patch
 Patch11: %{name}-rh622499.patch
+# Depends on systemtap infrastructure, so can't go upstream
+Patch12: %{name}-rh179072.patch
 
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 Obsoletes: glibc-profile < 2.4
@@ -288,6 +290,7 @@ rm -rf %{glibcportsdir}
 %patch9 -p1
 %patch10 -p1
 %patch11 -p1
+%patch12 -p1
 
 # A lot of programs still misuse memcpy when they have to use
 # memmove. The memcpy implementation below is not tolerant at


More information about the scm-commits mailing list