public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM]  jankratochvil/gdbserverbuildid2: misc
@ 2015-07-30 21:00 jkratoch
  0 siblings, 0 replies; only message in thread
From: jkratoch @ 2015-07-30 21:00 UTC (permalink / raw)
  To: archer-commits

The branch, jankratochvil/gdbserverbuildid2 has been updated
  discards  c15b4dc5da134d1fc80131d025459adab9edb071 (commit)
       via  45d37a2219f903f60c90320bd2413c21c3fe869d (commit)
       via  1f03224f89445002273becf43bc2fe64936f4671 (commit)
       via  9798e192499c9161e7061fce9cde90dd89b3da18 (commit)
       via  32254f93ab5c6271456b689dcd16fdad0cc2129d (commit)
       via  cf02f297ca1c72089dc6cbcd6557d0a68757127d (commit)
      from  c15b4dc5da134d1fc80131d025459adab9edb071 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 45d37a2219f903f60c90320bd2413c21c3fe869d
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Thu Jul 30 20:49:10 2015 +0200

    misc

commit 1f03224f89445002273becf43bc2fe64936f4671
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Thu Jul 30 20:48:50 2015 +0200

    locatetest

commit 9798e192499c9161e7061fce9cde90dd89b3da18
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Thu Jul 30 20:48:14 2015 +0200

    mainbuildid

commit 32254f93ab5c6271456b689dcd16fdad0cc2129d
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Thu Jul 30 20:31:46 2015 +0200

    hexallocate

commit cf02f297ca1c72089dc6cbcd6557d0a68757127d
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Tue Jul 28 22:13:31 2015 +0200

    buildid

-----------------------------------------------------------------------

Summary of changes:
 gdb/build-id.c                            |   40 ++++++--
 gdb/doc/gdb.texinfo                       |   20 +++--
 gdb/features/library-list-svr4.dtd        |    5 +-
 gdb/gdbserver/linux-low.c                 |   17 +++
 gdb/solib-darwin.c                        |    1 -
 gdb/solib-dsbt.c                          |    1 -
 gdb/solib-frv.c                           |    1 -
 gdb/solib-spu.c                           |    1 -
 gdb/solib-svr4.c                          |  152 ++++++++++++-----------------
 gdb/solib-target.c                        |    1 -
 gdb/solib.c                               |   35 +-------
 gdb/solib.h                               |    4 -
 gdb/solist.h                              |    5 -
 gdb/testsuite/gdb.base/solib-mismatch.exp |   46 ++++++++-
 14 files changed, 170 insertions(+), 159 deletions(-)

First 500 lines of diff:
diff --git a/gdb/build-id.c b/gdb/build-id.c
index 636d5c3..f3948bf 100644
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
@@ -28,6 +28,7 @@
 #include "gdbcore.h"
 #include "gdbcmd.h"
 #include "source.h"
+#include "rsp-low.h"
 
 /* Boolean for command 'set validate-build-id'.  */
 int validate_build_id = 1;
@@ -63,22 +64,41 @@ build_id_bfd_get (bfd *abfd)
 int
 build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
 {
-  const struct bfd_build_id *found;
-  int retval = 0;
+  const struct bfd_build_id *found = build_id_bfd_get (abfd);
+  char *message, *check_hex = alloca (check_len * 2 + 1);
 
-  found = build_id_bfd_get (abfd);
+  bin2hex (check, check_hex, check_len);
 
   if (found == NULL)
-    warning (_("File \"%s\" has no build-id, file skipped"),
-	     bfd_get_filename (abfd));
+    message = xstrprintf (_("inferior build ID is %s but symbol file \"%s\" "
+			    "does not have build ID"),
+			  check_hex, bfd_get_filename (abfd));
   else if (found->size != check_len
            || memcmp (found->data, check, found->size) != 0)
-    warning (_("File \"%s\" has a different build-id, file skipped"),
-	     bfd_get_filename (abfd));
+    {
+      char *abfd_hex = alloca (found->size * 2 + 1);
+
+      bin2hex (found->data, abfd_hex, found->size);
+      message = xstrprintf (_("inferior build ID %s is not identical to "
+			      "symbol file \"%s\" build ID %s"),
+			    check_hex, bfd_get_filename (abfd), abfd_hex);
+    }
   else
-    retval = 1;
+    return 1;
 
-  return retval;
+  if (validate_build_id)
+    {
+      warning (_("Symbol file \"%s\" could not be validated (%s) and "
+		 "will be ignored; or use 'set build-id-force'."),
+	       bfd_get_filename (abfd), message);
+      xfree (message);
+      return 0;
+    }
+  warning (_("Symbol file \"%s\" could not be validated (%s) "
+	     "but it is being loaded due to 'set build-id-force'."),
+	   bfd_get_filename (abfd), message);
+  xfree (message);
+  return 1;
 }
 
 /* Find and open a BFD given a build-id.  If no BFD can be found,
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 513c08e..752b9d4 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -17957,8 +17957,10 @@ discarded.
 Setting to override @value{GDBN} build-id check.
 
 Inferior shared libraries and symbol files may contain unique build-id.
-By default @value{GDBN} will ignore symbol files with non-matching build-id
-while printing:
+@value{GDBN} expects the build-ids of each shared library and its corresponding
+symbol file to be identical.  If they are not identical, then by default
+@value{GDBN} will @value{GDBN} will ignore symbol files with non-matching
+build-id while printing:
 
 @smallexample
   warning: Shared object "libfoo.so.1" could not be validated (remote
@@ -39556,8 +39558,10 @@ address the file was prelinked to during the library load.
 @end itemize
 
 Additionally the single @code{main-lm} attribute specifies address of
-@code{struct link_map} used for the main executable.  This parameter is used
-for TLS access and its presence is optional.
+@code{struct link_map} used for the main executable.  This parameter is
+used for TLS access and its presence is optional.  Similarly the single
+@code{main-build-id} optional attribute specifies hex encoded
+@code{NT_GNU_BUILD_ID} note for the main executable.
 
 @value{GDBN} must be linked with the Expat library to support XML
 SVR4 library lists.  @xref{Expat}.
@@ -39566,7 +39570,8 @@ A simple memory map, with two loaded libraries (which do not use prelink),
 looks like this:
 
 @smallexample
-<library-list-svr4 version="1.0" main-lm="0xe4f8f8">
+<library-list-svr4 version="1.0" main-lm="0xe4f8f8"
+    main-build-id="b96b2f6fbfb7d144b676cb66f56b6100">
   <library name="/lib/ld-linux.so.2" lm="0xe4f51c" l_addr="0xe2d000"
            l_ld="0xe4eefc"/>
   <library name="/lib/libc.so.6" lm="0xe4fbe8" l_addr="0x154000"
@@ -39579,8 +39584,9 @@ The format of an SVR4 library list is described by this DTD:
 @smallexample
 <!-- library-list-svr4: Root element with versioning -->
 <!ELEMENT library-list-svr4  (library)*>
-<!ATTLIST library-list-svr4  version  CDATA   #FIXED  "1.0">
-<!ATTLIST library-list-svr4  main-lm  CDATA   #IMPLIED>
+<!ATTLIST library-list-svr4  version       CDATA   #FIXED  "1.0">
+<!ATTLIST library-list-svr4  main-lm       CDATA   #IMPLIED>
+<!ATTLIST library-list-svr4  main-build-id CDATA   #IMPLIED>
 <!ELEMENT library            EMPTY>
 <!ATTLIST library            name     CDATA   #REQUIRED>
 <!ATTLIST library            lm       CDATA   #REQUIRED>
diff --git a/gdb/features/library-list-svr4.dtd b/gdb/features/library-list-svr4.dtd
index 5741f03..27799a6 100644
--- a/gdb/features/library-list-svr4.dtd
+++ b/gdb/features/library-list-svr4.dtd
@@ -6,8 +6,9 @@
 
 <!-- library-list-svr4: Root element with versioning -->
 <!ELEMENT library-list-svr4  (library)*>
-<!ATTLIST library-list-svr4  version  CDATA   #FIXED  "1.0">
-<!ATTLIST library-list-svr4  main-lm  CDATA   #IMPLIED>
+<!ATTLIST library-list-svr4  version       CDATA   #FIXED  "1.0">
+<!ATTLIST library-list-svr4  main-lm       CDATA   #IMPLIED>
+<!ATTLIST library-list-svr4  main-build-id CDATA   #IMPLIED>
 
 <!ELEMENT library            EMPTY>
 <!ATTLIST library            name     CDATA   #REQUIRED>
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index eedd652..8c8339c 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -6680,8 +6680,25 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
 	 exited above due to failed get_r_debug.  */
       if (lm_prev == 0)
 	{
+	  const char *hex_enc_build_id = get_hex_build_id (l_addr, l_ld, &data);
+
 	  sprintf (p, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
 	  p = p + strlen (p);
+
+	  if (hex_enc_build_id != NULL)
+	    {
+	      while (allocated
+		     < p - document + 200 + strlen (hex_enc_build_id))
+		{
+		  /* Expand to guarantee sufficient storage.  */
+		  uintptr_t document_len = p - document;
+
+		  document = xrealloc (document, 2 * allocated);
+		  allocated *= 2;
+		  p = document + document_len;
+		}
+	      p += sprintf (p, " main-build-id=\"%s\"", hex_enc_build_id);
+	    }
 	}
       else
 	{
diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c
index 57f9923..8f75a96 100644
--- a/gdb/solib-darwin.c
+++ b/gdb/solib-darwin.c
@@ -634,5 +634,4 @@ _initialize_darwin_solib (void)
   darwin_so_ops.in_dynsym_resolve_code = darwin_in_dynsym_resolve_code;
   darwin_so_ops.lookup_lib_global_symbol = darwin_lookup_lib_symbol;
   darwin_so_ops.bfd_open = darwin_bfd_open;
-  darwin_so_ops.validate = default_solib_validate;
 }
diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c
index 780b8f7..d55a9ed 100644
--- a/gdb/solib-dsbt.c
+++ b/gdb/solib-dsbt.c
@@ -1080,7 +1080,6 @@ _initialize_dsbt_solib (void)
   dsbt_so_ops.open_symbol_file_object = open_symbol_file_object;
   dsbt_so_ops.in_dynsym_resolve_code = dsbt_in_dynsym_resolve_code;
   dsbt_so_ops.bfd_open = solib_bfd_open;
-  dsbt_so_ops.validate = default_solib_validate;
 
   /* Debug this file's internals.  */
   add_setshow_zuinteger_cmd ("solib-dsbt", class_maintenance,
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c
index 7ee9950..87b0a68 100644
--- a/gdb/solib-frv.c
+++ b/gdb/solib-frv.c
@@ -1183,7 +1183,6 @@ _initialize_frv_solib (void)
   frv_so_ops.open_symbol_file_object = open_symbol_file_object;
   frv_so_ops.in_dynsym_resolve_code = frv_in_dynsym_resolve_code;
   frv_so_ops.bfd_open = solib_bfd_open;
-  frv_so_ops.validate = default_solib_validate;
 
   /* Debug this file's internals.  */
   add_setshow_zuinteger_cmd ("solib-frv", class_maintenance,
diff --git a/gdb/solib-spu.c b/gdb/solib-spu.c
index 4695b19..fd78684 100644
--- a/gdb/solib-spu.c
+++ b/gdb/solib-spu.c
@@ -519,7 +519,6 @@ set_spu_solib_ops (struct gdbarch *gdbarch)
       spu_so_ops.current_sos = spu_current_sos;
       spu_so_ops.bfd_open = spu_bfd_open;
       spu_so_ops.lookup_lib_global_symbol = spu_lookup_lib_symbol;
-      spu_so_ops.validate = default_solib_validate;
     }
 
   set_solib_ops (gdbarch, &spu_so_ops);
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 8791f5d..80d5cfd 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -360,6 +360,8 @@ struct svr4_info
 
   /* Load map address for the main executable.  */
   CORE_ADDR main_lm_addr;
+  size_t main_build_idsz;
+  gdb_byte *main_build_id;
 
   CORE_ADDR interp_text_sect_low;
   CORE_ADDR interp_text_sect_high;
@@ -973,64 +975,6 @@ svr4_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
   return (name_lm >= vaddr && name_lm < vaddr + size);
 }
 
-/* Validate SO by comparing build-id from the associated bfd and
-   corresponding build-id from target memory.  Return NULL for success
-   or a string for error.  Caller must call xfree for the error string.  */
-
-static char *
-svr4_validate (const struct so_list *const so)
-{
-  const bfd_byte *local_id;
-  size_t local_idsz;
-
-  gdb_assert (so != NULL);
-
-  /* Target doesn't support reporting the build ID or the remote shared library
-     does not have build ID.  */
-  if (so->build_id == NULL)
-    return NULL;
-
-  /* Build ID may be present in the local file, just GDB is unable to retrieve
-     it.  As it has been reported by gdbserver it is not FSF gdbserver.  */
-  if (so->abfd == NULL
-      || !bfd_check_format (so->abfd, bfd_object))
-    return NULL;
-
-  /* GDB has verified the local file really does not contain the build ID.  */
-  if (so->abfd->build_id == NULL)
-    {
-      char *remote_hex;
-
-      remote_hex = alloca (so->build_idsz * 2 + 1);
-      bin2hex (so->build_id, remote_hex, so->build_idsz);
-
-      return xstrprintf (_("remote build ID is %s "
-			   "but local file does not have build ID"),
-			 remote_hex);
-    }
-
-  local_id = so->abfd->build_id->data;
-  local_idsz = so->abfd->build_id->size;
-
-  if (so->build_idsz != local_idsz
-      || memcmp (so->build_id, local_id, so->build_idsz) != 0)
-    {
-      char *remote_hex, *local_hex;
-
-      remote_hex = alloca (so->build_idsz * 2 + 1);
-      bin2hex (so->build_id, remote_hex, so->build_idsz);
-      local_hex = alloca (local_idsz * 2 + 1);
-      bin2hex (local_id, local_hex, local_idsz);
-
-      return xstrprintf (_("remote build ID %s "
-			   "does not match local build ID %s"),
-			 remote_hex, local_hex);
-    }
-
-  /* Both build IDs are present and they match.  */
-  return NULL;
-}
-
 /* Implement the "open_symbol_file_object" target_so_ops method.
 
    If no open symbol file, attempt to locate and open the main symbol
@@ -1116,6 +1060,9 @@ struct svr4_library_list
   /* Inferior address of struct link_map used for the main executable.  It is
      NULL if not known.  */
   CORE_ADDR main_lm;
+
+  size_t main_build_idsz;
+  gdb_byte *main_build_id;
 };
 
 /* Implementation for target_so_ops.free_so.  */
@@ -1189,6 +1136,43 @@ svr4_copy_library_list (struct so_list *src)
 
 #include "xml-support.h"
 
+static void
+hex2bin_allocate (const char *hex, gdb_byte **binp, size_t *binszp,
+		  const char *filename)
+{
+  size_t hex_len, binsz;
+
+  if (hex == NULL)
+    return;
+  hex_len = strlen (hex);
+  if (hex_len == 0)
+    {
+      warning (_("Binary file \"%s\" received empty build-id "
+		 "from gdbserver"), filename);
+      return;
+    }
+  if ((hex_len & 1U) != 0)
+    {
+      warning (_("Binary file \"%s\" received odd number "
+		 "of build-id \"%s\" hex characters from gdbserver"),
+	       filename, hex);
+      return;
+    }
+  binsz = hex_len / 2;
+  *binp = xmalloc (binsz);
+  *binszp = hex2bin (hex, *binp, binsz);
+  if (*binszp != binsz)
+    {
+      warning (_("Binary file \"%s\" received invalid "
+		 "build-id \"%s\" hex character at encoded byte "
+		 "position %s (first as 0) from gdbserver"),
+	       filename, hex, pulongest (*binszp));
+      xfree (*binp);
+      *binp = NULL;
+      *binszp = 0;
+    }
+}
+
 /* Handle the start of a <library> element.  Note: new elements are added
    at the tail of the list, keeping the list in order.  */
 
@@ -1216,37 +1200,8 @@ library_list_start_library (struct gdb_xml_parser *parser,
   strncpy (new_elem->so_name, name, sizeof (new_elem->so_name) - 1);
   new_elem->so_name[sizeof (new_elem->so_name) - 1] = 0;
   strcpy (new_elem->so_original_name, new_elem->so_name);
-  if (hex_build_id != NULL)
-    {
-      const size_t hex_build_id_len = strlen (hex_build_id);
-
-      if (hex_build_id_len == 0)
-	warning (_("Shared library \"%s\" received empty build-id "
-	           "from gdbserver"), new_elem->so_original_name);
-      else if ((hex_build_id_len & 1U) != 0)
-	warning (_("Shared library \"%s\" received odd number "
-		   "of build-id \"%s\" hex characters from gdbserver"),
-		 new_elem->so_original_name, hex_build_id);
-      else
-	{
-	  const size_t build_idsz = hex_build_id_len / 2;
-
-	  new_elem->build_id = xmalloc (build_idsz);
-	  new_elem->build_idsz = hex2bin (hex_build_id, new_elem->build_id,
-					  build_idsz);
-	  if (new_elem->build_idsz != build_idsz)
-	    {
-	      warning (_("Shared library \"%s\" received invalid "
-			 "build-id \"%s\" hex character at encoded byte "
-			 "position %s (first as 0) from gdbserver"),
-		       new_elem->so_original_name, hex_build_id,
-		       pulongest (new_elem->build_idsz));
-	      xfree (new_elem->build_id);
-	      new_elem->build_id = NULL;
-	      new_elem->build_idsz = 0;
-	    }
-	}
-    }
+  hex2bin_allocate (hex_build_id, &new_elem->build_id, &new_elem->build_idsz,
+		    new_elem->so_original_name);
 
   *list->tailp = new_elem;
   list->tailp = &new_elem->next;
@@ -1262,6 +1217,9 @@ svr4_library_list_start_list (struct gdb_xml_parser *parser,
   struct svr4_library_list *list = user_data;
   const char *version = xml_find_attribute (attributes, "version")->value;
   struct gdb_xml_value *main_lm = xml_find_attribute (attributes, "main-lm");
+  const struct gdb_xml_value *const att_build_id
+    = xml_find_attribute (attributes, "build-id");
+  const char *const hex_build_id = att_build_id ? att_build_id->value : NULL;
 
   if (strcmp (version, "1.0") != 0)
     gdb_xml_error (parser,
@@ -1270,6 +1228,8 @@ svr4_library_list_start_list (struct gdb_xml_parser *parser,
 
   if (main_lm)
     list->main_lm = *(ULONGEST *) main_lm->value;
+  hex2bin_allocate (hex_build_id, &list->main_build_id, &list->main_build_idsz,
+		    _("main executable"));
 }
 
 /* The allowed elements and attributes for an XML library list.
@@ -1299,6 +1259,7 @@ static const struct gdb_xml_attribute svr4_library_list_attributes[] =
 {
   { "version", GDB_XML_AF_NONE, NULL, NULL },
   { "main-lm", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
+  { "main-build-id", GDB_XML_AF_OPTIONAL, NULL, NULL },
   { NULL, GDB_XML_AF_NONE, NULL, NULL }
 };
 
@@ -1526,15 +1487,24 @@ svr4_current_sos_direct (struct svr4_info *info)
      Unfortunately statically linked inferiors will also fall back through this
      suboptimal code path.  */
 
+  library_list.main_build_id = NULL;
+  library_list.main_build_idsz = 0;
   info->using_xfer = svr4_current_sos_via_xfer_libraries (&library_list,
 							  NULL);
   if (info->using_xfer)
     {
       if (library_list.main_lm)
 	info->main_lm_addr = library_list.main_lm;
+      if (library_list.main_build_id != NULL)
+	{
+	  xfree (info->main_build_id);
+	  info->main_build_id = library_list.main_build_id;
+	  info->main_build_idsz = library_list.main_build_idsz;
+	}
 
       return library_list.head ? library_list.head : svr4_default_sos ();
     }
+  xfree (library_list.main_build_id);
 
   /* Always locate the debug struct, in case it has moved.  */
   info->debug_base = 0;
@@ -3142,6 +3112,9 @@ svr4_clear_solib (void)
   info->debug_loader_offset = 0;
   xfree (info->debug_loader_name);
   info->debug_loader_name = NULL;
+  xfree (info->main_build_id);
+  info->main_build_id = NULL;
+  info->main_build_idsz = 0;
 }
 
 /* Clear any bits of ADDR that wouldn't fit in a target-format
@@ -3360,5 +3333,4 @@ _initialize_svr4_solib (void)
   svr4_so_ops.keep_data_in_core = svr4_keep_data_in_core;
   svr4_so_ops.update_breakpoints = svr4_update_solib_event_breakpoints;
   svr4_so_ops.handle_event = svr4_handle_solib_event;
-  svr4_so_ops.validate = svr4_validate;
 }
diff --git a/gdb/solib-target.c b/gdb/solib-target.c
index 13cbd26..150f565 100644
--- a/gdb/solib-target.c
+++ b/gdb/solib-target.c
@@ -507,7 +507,6 @@ _initialize_solib_target (void)
   solib_target_so_ops.in_dynsym_resolve_code
     = solib_target_in_dynsym_resolve_code;
   solib_target_so_ops.bfd_open = solib_bfd_open;
-  solib_target_so_ops.validate = default_solib_validate;
 
   /* Set current_target_so_ops to solib_target_so_ops if not already
      set.  */
diff --git a/gdb/solib.c b/gdb/solib.c
index e5c1272..361382d 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -657,29 +657,6 @@ solib_map_sections (struct so_list *so)
   /* Leave bfd open, core_xfer_memory and "info files" need it.  */
   so->abfd = abfd;
 
-  gdb_assert (ops->validate != NULL);
-
-  validate_error = ops->validate (so);
-  if (validate_error != NULL)
-    {
-      if (validate_build_id)
-	{
-	  warning (_("Shared object \"%s\" could not be validated (%s) and "
-	             "will be ignored; "
-		     "or use 'set validate-build-id off'."),
-		   so->so_name, validate_error);
-	  xfree (validate_error);
-	  gdb_bfd_unref (so->abfd);
-	  so->abfd = NULL;
-	  return 0;
-	}
-      warning (_("Shared object \"%s\" could not be validated (%s) "
-		 "but it is being loaded due to "
-		 "'set validate-build-id off'."),
-	       so->so_name, validate_error);
-      xfree (validate_error);
-    }
-
   /* Copy the full path name into so_name, allowing symbol_file_add
      to find it later.  This also affects the =library-loaded GDB/MI
      event, and in particular the part of that notification providing
@@ -756,9 +733,6 @@ clear_so (struct so_list *so)
      of the symbol file.  */
   strcpy (so->so_name, so->so_original_name);
 
-  xfree (so->build_id);
-  so->build_id = NULL;
-


hooks/post-receive
--
Repository for Project Archer.


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2015-07-30 21:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-30 21:00 [SCM] jankratochvil/gdbserverbuildid2: misc jkratoch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).