[glibc] - Replace patch for 179072 with offical version from upstream.

Jeffrey Law law at fedoraproject.org
Mon Aug 13 17:14:52 UTC 2012


commit f5845e2bd56f4b74cea839e92ba99815f32420f6
Author: Jeff Law <law at redhat.com>
Date:   Mon Aug 13 11:14:38 2012 -0600

      - Replace patch for 179072 with offical version from upstream.

 glibc-rh179072.patch |  215 +++++++++++++++++++++++++++++++++++++++++++-------
 glibc.spec           |   18 +++--
 2 files changed, 196 insertions(+), 37 deletions(-)
---
diff --git a/glibc-rh179072.patch b/glibc-rh179072.patch
index 0ce664c..2ae7d32 100644
--- a/glibc-rh179072.patch
+++ b/glibc-rh179072.patch
@@ -1,6 +1,32 @@
-diff -Nrup c/elf/dl-close.c d/elf/dl-close.c
---- c/elf/dl-close.c	2012-05-21 00:08:02.410897531 -0600
-+++ d/elf/dl-close.c	2012-05-21 00:08:40.874716006 -0600
+commit 815e6fa3e010628f77838abec18692cbfeb60809
+Author: Gary Benson <gbenson at redhat.com>
+Date:   Thu Jul 26 11:03:35 2012 +0100
+
+    Add SystemTap static probes to the runtime linker.  [BZ #14298]
+
+2012-07-27  Gary Benson  <gbenson at redhat.com>
+
+	[BZ #14298]
+	* elf/rtld.c: Include <stap-probe.h>.
+	(dl_main): Added static probes "init_start" and "init_complete".
+	* elf/dl-load.c: Include <stap-probe.h>.
+	(lose): Take new parameter "nsid".
+	Added static probe "map_failed".
+	(_dl_map_object_from_fd): Pass namespace id to lose.
+	Added static probe "map_start".
+	(open_verify): Pass namespace id to lose.
+	* elf/dl-open.c: Include <stap-probe.h>.
+	(dl_open_worker) Added static probes "map_complete", "reloc_start"
+	and "reloc_complete".
+	* elf/dl-close.c: Include <stap-probe.h>.
+	(_dl_close_worker): Added static probes "unmap_start" and
+	"unmap_complete".
+	* elf/rtld-debugger-interface.txt: New file documenting the above.
+ 
+diff --git a/elf/dl-close.c b/elf/dl-close.c
+index a250ea5..45b2187 100644
+--- a/elf/dl-close.c
++++ b/elf/dl-close.c
 @@ -31,6 +31,7 @@
  #include <sys/mman.h>
  #include <sysdep-cancel.h>
@@ -13,7 +39,7 @@ diff -Nrup c/elf/dl-close.c d/elf/dl-close.c
    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);
++  LIBC_PROBE (unmap_start, 2, nsid, r);
  
    if (unload_global)
      {
@@ -21,13 +47,14 @@ diff -Nrup c/elf/dl-close.c d/elf/dl-close.c
    /* 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);
++  LIBC_PROBE (unmap_complete, 2, nsid, r);
  
    /* Recheck if we need to retry, release the lock.  */
   out:
-diff -Nrup c/elf/dl-load.c d/elf/dl-load.c
---- c/elf/dl-load.c	2012-05-21 00:08:02.219898432 -0600
-+++ d/elf/dl-load.c	2012-05-21 00:08:40.876715997 -0600
+diff --git a/elf/dl-load.c b/elf/dl-load.c
+index fe83f87..43e1269 100644
+--- a/elf/dl-load.c
++++ b/elf/dl-load.c
 @@ -35,6 +35,7 @@
  #include <stackinfo.h>
  #include <caller.h>
@@ -36,7 +63,7 @@ diff -Nrup c/elf/dl-load.c d/elf/dl-load.c
  
  #include <dl-dst.h>
  
-@@ -880,7 +881,7 @@ _dl_init_paths (const char *llp)
+@@ -882,7 +883,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,
@@ -45,15 +72,15 @@ diff -Nrup c/elf/dl-load.c d/elf/dl-load.c
  {
    /* The file might already be closed.  */
    if (fd != -1)
-@@ -894,6 +895,7 @@ lose (int code, int fd, const char *name
+@@ -896,6 +897,7 @@ lose (int code, int fd, const char *name, char *realname, struct link_map *l,
      {
        r->r_state = RT_CONSISTENT;
        _dl_debug_state ();
-+      LIBC_PROBE (rtld_map_complete, 2, nsid, r);
++      LIBC_PROBE (map_failed, 2, nsid, r);
      }
  
    _dl_signal_error (code, name, NULL, msg);
-@@ -932,7 +934,7 @@ _dl_map_object_from_fd (const char *name
+@@ -934,7 +936,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
        errval = errno;
      call_lose:
        lose (errval, fd, name, realname, l, errstring,
@@ -62,15 +89,15 @@ diff -Nrup c/elf/dl-load.c d/elf/dl-load.c
      }
  
    /* Look again to see if the real name matched another already loaded.  */
-@@ -1039,6 +1041,7 @@ _dl_map_object_from_fd (const char *name
+@@ -1041,6 +1043,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
  	 linking has not been used before.  */
        r->r_state = RT_ADD;
        _dl_debug_state ();
-+      LIBC_PROBE (rtld_map_start, 2, nsid, r);
++      LIBC_PROBE (map_start, 2, nsid, r);
        make_consistent = true;
      }
    else
-@@ -1734,7 +1737,7 @@ open_verify (const char *name, struct fi
+@@ -1736,7 +1739,7 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader,
  	      name = strdupa (realname);
  	      free (realname);
  	    }
@@ -79,9 +106,10 @@ diff -Nrup c/elf/dl-load.c d/elf/dl-load.c
  	}
  
        /* See whether the ELF header is what we expect.  */
-diff -Nrup c/elf/dl-open.c d/elf/dl-open.c
---- c/elf/dl-open.c	2012-05-20 19:47:38.000000000 -0600
-+++ d/elf/dl-open.c	2012-05-21 00:11:29.229920776 -0600
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index e2780a4..00781af 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
 @@ -32,6 +32,7 @@
  #include <caller.h>
  #include <sysdep-cancel.h>
@@ -94,7 +122,7 @@ diff -Nrup c/elf/dl-open.c d/elf/dl-open.c
    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);
++  LIBC_PROBE (map_complete, 3, args->nsid, r, new);
  
    /* Print scope information.  */
    if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
@@ -111,27 +139,156 @@ diff -Nrup c/elf/dl-open.c d/elf/dl-open.c
 +      if (! relocation_in_progress)
 +	{
 +	  /* Notify the debugger that relocations are about to happen.  */
-+	  LIBC_PROBE (rtld_reloc_start, 2, args->nsid, r);
++	  LIBC_PROBE (reloc_start, 2, args->nsid, r);
 +	  relocation_in_progress = 1;
 +	}
 +
  #ifdef SHARED
        if (__builtin_expect (GLRO(dl_profile) != NULL, 0))
  	{
-@@ -544,6 +555,10 @@ cannot load any more object with static
+@@ -544,6 +555,10 @@ cannot load any more object with static TLS"));
  	}
      }
  
 +  /* Notify the debugger all new objects have been relocated.  */
 +  if (relocation_in_progress)
-+    LIBC_PROBE (rtld_reloc_complete, 2, args->nsid, r);
++    LIBC_PROBE (reloc_complete, 3, args->nsid, r, new);
 +
    /* Run the initializer functions of new objects.  */
    _dl_init (new, args->argc, args->argv, args->env);
  
-diff -Nrup c/elf/rtld.c d/elf/rtld.c
---- c/elf/rtld.c	2012-05-21 00:08:02.415897505 -0600
-+++ d/elf/rtld.c	2012-05-21 00:08:40.917715803 -0600
+diff --git a/elf/rtld-debugger-interface.txt b/elf/rtld-debugger-interface.txt
+new file mode 100644
+index 0000000..61bc99e
+--- /dev/null
++++ b/elf/rtld-debugger-interface.txt
+@@ -0,0 +1,122 @@
++Standard debugger interface
++===========================
++
++The run-time linker exposes a rendezvous structure to allow debuggers
++to interface with it.  This structure, r_debug, is defined in link.h.
++If the executable's dynamic section has a DT_DEBUG element, the
++run-time linker sets that element's value to the address where this
++structure can be found.
++
++The r_debug structure contains (amongst others) the following fields:
++
++  struct link_map *r_map:
++    A linked list of loaded objects.
++
++  enum { RT_CONSISTENT, RT_ADD, RT_DELETE } r_state:
++    The current state of the r_map list.  RT_CONSISTENT means that r_map
++    is not currently being modified and may safely be inspected.  RT_ADD
++    means that an object is being added to r_map, and that the list is
++    not guaranteed to be consistent.  Likewise RT_DELETE means that an
++    object is being removed from the list.
++
++  ElfW(Addr) r_brk:
++    The address of a function internal to the run-time linker which is
++    called whenever r_state is changed.  The debugger should set a
++    breakpoint at this address if it wants to notice mapping changes.
++
++This protocol is widely supported, but somewhat limited in that it
++has no provision to provide access to multiple namespaces, and that
++the notifications (via r_brk) only refer to changes to r_map--the
++debugger is notified that a new object has been added, for instance,
++but there is no way for the debugger to discover whether any of the
++objects in the link-map have been relocated or not.
++
++
++Probe-based debugger interface
++==============================
++
++Systemtap is a dynamic tracing/instrumenting tool available on Linux.
++Probes that are not fired at run time have close to zero overhead.
++glibc contains a number of probes that debuggers can set breakpoints
++on in order to notice certain events.
++
++All rtld probes have the following arguments:
++
++  arg1: Lmid_t lmid:
++    The link-map ID of the link-map list that the object was loaded
++    into.  This will be LM_ID_BASE for the application's main link-map
++    list, or some other value for different namespaces.
++
++  arg2: struct r_debug *r_debug:
++    A pointer to the r_debug structure containing the link-map list
++    that the object was loaded into.  This will be the value stored in
++    DT_DEBUG for the application's main link-map list, or some other
++    value for different namespaces.
++
++map_complete and reloc_complete may have the following additional
++argument:
++
++  arg3: struct link_map *new:
++    A pointer which, if not NULL, points to the entry in the specified
++    r_debug structure's link-map list corresponding to the first new
++    object to have been mapped or relocated, with new->l_next pointing
++    to the link-map of the next new object to have been mapped or
++    relocated, and so on.  Note that because `new' is an entry in a
++    larger list, new->l_prev (if not NULL) will point to what was the
++    last link-map in the link-map list prior to the new objects being
++    mapped or relocated.
++
++The following probes are available:
++
++  init_start:
++    This is called once, when the linker is about to fill in the main
++    r_debug structure at application startup.  init_start always has
++    lmid set to LM_ID_BASE and r_debug set to the value stored in
++    DT_DEBUG.  r_debug is not guaranteed to be consistent until
++    init_complete is fired.
++
++  init_complete:
++    This is called once, when the linker has filled in the main
++    r_debug structure at application startup. init_complete always
++    has lmid set to LM_ID_BASE and r_debug set to the value stored
++    in DT_DEBUG.  The r_debug structure is consistent and may be
++    inspected, and all objects in the link-map are guaranteed to
++    have been relocated.
++
++  map_start:
++    The linker is about to map new objects into the specified
++    namespace.  The namespace's r_debug structure is not guaranteed
++    to be consistent until a corresponding map_complete is fired.
++
++  map_complete:
++    The linker has finished mapping new objects into the specified
++    namespace.  The namespace's r_debug structure is consistent and
++    may be inspected, although objects in the namespace's link-map
++    are not guaranteed to have been relocated.
++
++  map_failed:
++    The linker failed while attempting to map new objects into
++    the specified namespace.  The namespace's r_debug structure
++    is consistent and may be inspected.
++
++  reloc_start:
++    The linker is about to relocate all unrelocated objects in the
++    specified namespace.  The namespace's r_debug structure is not
++    guaranteed to be consistent until a corresponding reloc_complete
++    is fired.
++
++  reloc_complete:
++    The linker has relocated all objects in the specified namespace.
++    The namespace's r_debug structure is consistent and may be
++    inspected, and all objects in the namespace's link-map are
++    guaranteed to have been relocated.
++
++  unmap_start:
++    The linker is about to remove objects from the specified
++    namespace.  The namespace's r_debug structure is not guaranteed to
++    be consistent until a corresponding unmap_complete is fired.
++
++  unmap_complete:
++    The linker has finished removing objects into the specified
++    namespace.  The namespace's r_debug structure is consistent and
++    may be inspected.
+diff --git a/elf/rtld.c b/elf/rtld.c
+index 6bcf224..06c4220 100644
+--- a/elf/rtld.c
++++ b/elf/rtld.c
 @@ -39,6 +39,7 @@
  #include <dl-osinfo.h>
  #include <dl-procinfo.h>
@@ -140,19 +297,19 @@ diff -Nrup c/elf/rtld.c d/elf/rtld.c
  #include <stackinfo.h>
  
  #include <assert.h>
-@@ -1681,6 +1682,7 @@ ERROR: ld.so: object '%s' cannot be load
+@@ -1683,6 +1684,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
    /* We start adding objects.  */
    r->r_state = RT_ADD;
    _dl_debug_state ();
-+  LIBC_PROBE (rtld_init_start, 2, LM_ID_BASE, r);
++  LIBC_PROBE (init_start, 2, LM_ID_BASE, r);
  
    /* Auditing checkpoint: we are ready to signal that the initial map
       is being constructed.  */
-@@ -2398,6 +2400,7 @@ ERROR: ld.so: object '%s' cannot be load
+@@ -2402,6 +2404,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
    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);
++  LIBC_PROBE (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 751eb68..c3f7255 100644
--- a/glibc.spec
+++ b/glibc.spec
@@ -85,9 +85,6 @@ Patch0005: %{name}-rh825061.patch
 Patch0006: %{name}-arm-hardfloat-3.patch
 
 
-# stap, needs to be sent upstream
-Patch0007: %{name}-rh179072.patch
-
 # Needs to be sent upstream
 Patch0008: %{name}-rh697421.patch
 
@@ -97,9 +94,6 @@ Patch0009: %{name}-rh740682.patch
 # Needs to be sent upstream
 Patch0010: %{name}-rh657588.patch
 
-# Needs to be sent upstream
-Patch0011: %{name}-rh564528.patch
-
 # stap, needs to be sent upstream
 Patch0012: %{name}-stap-libm.patch
 
@@ -109,6 +103,8 @@ Patch0034: %{name}-rh841318.patch
 #
 # Patches from upstream
 #
+Patch1007: %{name}-rh179072.patch
+
 Patch1025: %{name}-rh789238.patch
 Patch1035: %{name}-rh845960.patch
 
@@ -119,6 +115,9 @@ Patch1035: %{name}-rh845960.patch
 # Obviously we're not there right now, but that's the goal
 #
 
+# http://sourceware.org/ml/libc-alpha/2012-08/msg00224.html
+Patch2011: %{name}-rh564528.patch
+
 Patch2013: %{name}-rh757881.patch
 
 # Upstream BZ 13013
@@ -391,11 +390,11 @@ rm -rf %{glibcportsdir}
 %patch0004 -p1
 %patch0005 -p1
 %patch0006 -p1
-%patch0007 -p1
+%patch1007 -p1
 %patch0008 -p1
 %patch0009 -p1
 %patch0010 -p1
-%patch0011 -p1
+%patch2011 -p1
 %patch0012 -p1
 %patch2013 -p1
 %patch2014 -p1
@@ -1302,6 +1301,9 @@ rm -f *.filelist*
 %endif
 
 %changelog
+* Mon Aug 13 2012 Jeff Law <law at redhat.com> - 2.16-9
+  - Replace patch for 179072 with official version from upstream.
+
 * Fri Aug 10 2012 Jeff Law <law at redhat.com> - 2.16-8
   - Replace patch for 789238 with official version from upstream.
 


More information about the scm-commits mailing list