[gdb] Fix yum install command output when the binary RPM is missing (BZ 981154).

Jan Kratochvil jankratochvil at fedoraproject.org
Wed Jul 17 03:55:17 UTC 2013


commit 752ff760ca083e4a0dc5e0cb590bc6c553b1776b
Author: Jan Kratochvil <jan.kratochvil at redhat.com>
Date:   Wed Jul 17 05:55:02 2013 +0200

    Fix yum install command output when the binary RPM is missing (BZ 981154).
    
    - Fix the changlog entry formatting for 6.3.0.0-0.1.

 gdb-6.6-buildid-locate.patch |  171 +++++++++++++++++++++++++++--------------
 gdb.spec                     |   10 ++-
 2 files changed, 119 insertions(+), 62 deletions(-)
---
diff --git a/gdb-6.6-buildid-locate.patch b/gdb-6.6-buildid-locate.patch
index a363d1f..30b4375 100644
--- a/gdb-6.6-buildid-locate.patch
+++ b/gdb-6.6-buildid-locate.patch
@@ -1,7 +1,7 @@
-Index: gdb-7.5.50.20130310/gdb/corelow.c
+Index: gdb-7.6/gdb/corelow.c
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/corelow.c	2013-01-31 19:37:37.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/corelow.c	2013-03-10 16:36:37.019937408 +0100
+--- gdb-7.6.orig/gdb/corelow.c	2013-01-31 19:37:37.000000000 +0100
++++ gdb-7.6/gdb/corelow.c	2013-07-17 05:28:49.277203536 +0200
 @@ -46,6 +46,9 @@
  #include "progspace.h"
  #include "objfiles.h"
@@ -93,11 +93,11 @@ Index: gdb-7.5.50.20130310/gdb/corelow.c
 +			   NULL, NULL, NULL,
 +			   &setlist, &showlist);
  }
-Index: gdb-7.5.50.20130310/gdb/doc/gdb.texinfo
+Index: gdb-7.6/gdb/doc/gdb.texinfo
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/doc/gdb.texinfo	2013-03-10 16:16:23.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/doc/gdb.texinfo	2013-03-10 16:17:15.216114613 +0100
-@@ -16680,6 +16680,27 @@ information files.
+--- gdb-7.6.orig/gdb/doc/gdb.texinfo	2013-07-17 05:28:48.882203384 +0200
++++ gdb-7.6/gdb/doc/gdb.texinfo	2013-07-17 05:28:49.286203539 +0200
+@@ -16831,6 +16831,27 @@ information files.
  
  @end table
  
@@ -125,10 +125,10 @@ Index: gdb-7.5.50.20130310/gdb/doc/gdb.texinfo
  @cindex @code{.gnu_debuglink} sections
  @cindex debug link sections
  A debug link is a special section of the executable file named
-Index: gdb-7.5.50.20130310/gdb/solib-svr4.c
+Index: gdb-7.6/gdb/solib-svr4.c
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/solib-svr4.c	2013-01-31 14:52:52.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/solib-svr4.c	2013-03-10 16:37:49.842963280 +0100
+--- gdb-7.6.orig/gdb/solib-svr4.c	2013-01-31 14:52:52.000000000 +0100
++++ gdb-7.6/gdb/solib-svr4.c	2013-07-17 05:28:49.287203539 +0200
 @@ -1224,9 +1224,52 @@ svr4_read_so_list (CORE_ADDR lm, struct
  	  continue;
  	}
@@ -185,10 +185,10 @@ Index: gdb-7.5.50.20130310/gdb/solib-svr4.c
        xfree (buffer);
  
        /* If this entry has no name, or its name matches the name
-Index: gdb-7.5.50.20130310/gdb/elfread.c
+Index: gdb-7.6/gdb/elfread.c
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/elfread.c	2013-03-06 22:20:02.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/elfread.c	2013-03-10 16:38:01.506968687 +0100
+--- gdb-7.6.orig/gdb/elfread.c	2013-03-18 10:20:02.000000000 +0100
++++ gdb-7.6/gdb/elfread.c	2013-07-17 05:31:21.242256141 +0200
 @@ -45,6 +45,11 @@
  #include "regcache.h"
  #include "bcache.h"
@@ -201,7 +201,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
  
  extern void _initialize_elfread (void);
  
-@@ -1067,10 +1072,59 @@ elf_gnu_ifunc_resolver_return_stop (stru
+@@ -1068,10 +1073,59 @@ elf_gnu_ifunc_resolver_return_stop (stru
    update_breakpoint_locations (b, sals, sals_end);
  }
  
@@ -263,7 +263,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
  {
    if (!bfd_check_format (abfd, bfd_object)
        || bfd_get_flavour (abfd) != bfd_target_elf_flavour
-@@ -1080,6 +1134,348 @@ build_id_bfd_get (bfd *abfd)
+@@ -1081,6 +1135,348 @@ build_id_bfd_get (bfd *abfd)
    return elf_tdata (abfd)->build_id;
  }
  
@@ -612,7 +612,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
  /* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value.  */
  
  static int
-@@ -1094,7 +1490,7 @@ build_id_verify (const char *filename, c
+@@ -1095,7 +1491,7 @@ build_id_verify (const char *filename, c
    if (abfd == NULL)
      return 0;
  
@@ -621,12 +621,46 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
  
    if (found == NULL)
      warning (_("File \"%s\" has no build-id, file skipped"), filename);
-@@ -1110,17 +1506,18 @@ build_id_verify (const char *filename, c
-   return retval;
+@@ -1112,16 +1508,53 @@ build_id_verify (const char *filename, c
  }
  
--static char *
+ static char *
 -build_id_to_debug_filename (const struct elf_build_id *build_id)
++link_resolve (const char *symlink, int level)
++{
++  char buf[PATH_MAX + 1], *target, *retval;
++  ssize_t got;
++
++  if (level > 10)
++    return xstrdup (symlink);
++
++  got = readlink (symlink, buf, sizeof (buf));
++  if (got < 0 || got >= sizeof (buf))
++    return xstrdup (symlink);
++  buf[got] = '\0';
++
++  if (IS_ABSOLUTE_PATH (buf))
++    target = xstrdup (buf);
++  else
++    {
++      char *dir = ldirname (symlink);
++
++      if (dir == NULL)
++	return xstrdup (symlink);
++      target = xstrprintf ("%s"
++#ifndef HAVE_DOS_BASED_FILE_SYSTEM
++			   "/"
++#else /* HAVE_DOS_BASED_FILE_SYSTEM */
++			   "\\"
++#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
++			   "%s", dir, buf);
++    }
++
++  retval = link_resolve (target, level + 1);
++  xfree (target);
++  return retval;
++}
++
 +char *
 +build_id_to_filename (const struct elf_build_id *build_id, char **link_return,
 +		      int add_debug_suffix)
@@ -644,16 +678,19 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
  
    /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
       cause "/.build-id/..." lookups.  */
-@@ -1133,6 +1530,8 @@ build_id_to_debug_filename (const struct
+@@ -1134,7 +1567,10 @@ build_id_to_debug_filename (const struct
        size_t debugdir_len = strlen (debugdir);
        const gdb_byte *data = build_id->data;
        size_t size = build_id->size;
+-      char *s;
 +      unsigned seqno;
 +      struct stat statbuf_trash;
-       char *s;
++      /* Initialize it just to avoid a GCC false warning.  */
++      char *s, *link0 = NULL, *link0_resolved;
  
        memcpy (link, debugdir, debugdir_len);
-@@ -1147,37 +1546,240 @@ build_id_to_debug_filename (const struct
+       s = &link[debugdir_len];
+@@ -1148,37 +1584,256 @@ build_id_to_debug_filename (const struct
  	*s++ = '/';
        while (size-- > 0)
  	s += sprintf (s, "%02x", (unsigned) *data++);
@@ -682,14 +719,20 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
 +	  else
 +	    *s2 = 0;
 +
++	  if (!seqno)
++	    {
++	      /* If none of the real files is found report as missing file
++		 always the non-.%u-suffixed file.  */
++	      link0 = xstrdup (link);
++	    }
++
 +	  /* `access' automatically dereferences LINK.  */
 +	  if (lstat (link, &statbuf_trash) != 0)
 +	    {
 +	      /* Stop increasing SEQNO.  */
 +	      break;
 +	    }
- 
--      if (retval != NULL && !build_id_verify (retval, build_id))
++
 +	  retval = lrealpath (link);
 +
 +	  if (retval != NULL && !build_id_verify (retval, build_id))
@@ -703,29 +746,39 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
 +	}
 +
 +      if (retval != NULL)
- 	{
--	  xfree (retval);
--	  retval = NULL;
++	{
 +	  /* LINK_ALL is not used below in this non-NULL RETVAL case.  */
++	  xfree (link0);
 +	  break;
- 	}
++	}
++
++      /* If the symlink has target request to install the target.
++         BASE-debuginfo.rpm contains the symlink but BASE.rpm may be missing.
++         https://bugzilla.redhat.com/show_bug.cgi?id=981154  */
++      link0_resolved = link_resolve (link0, 0);
++      xfree (link0);
  
-+	if (link_all == NULL)
-+	  link_all = xstrdup (link);
-+	else
-+	  {
-+	    size_t len_orig = strlen (link_all);
+-      if (retval != NULL && !build_id_verify (retval, build_id))
++      if (link_all == NULL)
++	link_all = xstrdup (link0_resolved);
++      else
+ 	{
+-	  xfree (retval);
+-	  retval = NULL;
++	  size_t len_orig = strlen (link_all);
 +
-+	    link_all = xrealloc (link_all, len_orig + 1 + strlen (link) + 1);
++	  link_all = xrealloc (link_all,
++			       len_orig + 1 + strlen (link0_resolved) + 1);
 +
-+	    /* Use whitespace instead of DIRNAME_SEPARATOR to be compatible with
-+	       its possible use as an argument for installation command.  */
-+	    link_all[len_orig] = ' ';
++	  /* Use whitespace instead of DIRNAME_SEPARATOR to be compatible with
++	     its possible use as an argument for installation command.  */
++	  link_all[len_orig] = ' ';
 +
-+	    strcpy (&link_all[len_orig + 1], link);
-+	  }
++	  strcpy (&link_all[len_orig + 1], link0_resolved);
+ 	}
++      xfree (link0_resolved);
 +    }
-+
+ 
 +  if (link_return != NULL)
 +    {
        if (retval != NULL)
@@ -905,7 +958,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
        /* Prevent looping on a stripped .debug file.  */
        if (build_id_name != NULL
  	  && filename_cmp (build_id_name, objfile->name) == 0)
-@@ -1187,7 +1789,7 @@ find_separate_debug_file_by_buildid (str
+@@ -1188,7 +1843,7 @@ find_separate_debug_file_by_buildid (str
  	  xfree (build_id_name);
  	}
        else if (build_id_name != NULL)
@@ -914,7 +967,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
      }
    return NULL;
  }
-@@ -1425,9 +2027,10 @@ elf_symfile_read (struct objfile *objfil
+@@ -1426,9 +2081,10 @@ elf_symfile_read (struct objfile *objfil
  	   && objfile->separate_debug_objfile == NULL
  	   && objfile->separate_debug_objfile_backlink == NULL)
      {
@@ -927,7 +980,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
  
        if (debugfile == NULL)
  	debugfile = find_separate_debug_file_by_debuglink (objfile);
-@@ -1441,6 +2044,12 @@ elf_symfile_read (struct objfile *objfil
+@@ -1442,6 +2098,12 @@ elf_symfile_read (struct objfile *objfil
  	  symbol_file_add_separate (abfd, symfile_flags, objfile);
  	  do_cleanups (cleanup);
  	}
@@ -940,7 +993,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
      }
  }
  
-@@ -1760,4 +2369,16 @@ _initialize_elfread (void)
+@@ -1761,4 +2423,16 @@ _initialize_elfread (void)
  
    elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
    gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
@@ -957,10 +1010,10 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
 +
 +  observer_attach_executable_changed (debug_print_executable_changed);
  }
-Index: gdb-7.5.50.20130310/gdb/symfile.h
+Index: gdb-7.6/gdb/symfile.h
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/symfile.h	2013-02-03 17:20:18.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/symfile.h	2013-03-10 16:37:41.203959517 +0100
+--- gdb-7.6.orig/gdb/symfile.h	2013-02-03 17:20:18.000000000 +0100
++++ gdb-7.6/gdb/symfile.h	2013-07-17 05:28:49.291203541 +0200
 @@ -593,6 +593,12 @@ void free_symfile_segment_data (struct s
  
  extern struct cleanup *increment_reading_symtab (void);
@@ -974,10 +1027,10 @@ Index: gdb-7.5.50.20130310/gdb/symfile.h
  /* From dwarf2read.c */
  
  /* Names for a dwarf2 debugging section.  The field NORMAL is the normal
-Index: gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp
+Index: gdb-7.6/gdb/testsuite/lib/gdb.exp
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/testsuite/lib/gdb.exp	2013-03-10 16:16:22.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp	2013-03-10 16:17:15.219114612 +0100
+--- gdb-7.6.orig/gdb/testsuite/lib/gdb.exp	2013-07-17 05:28:48.334203172 +0200
++++ gdb-7.6/gdb/testsuite/lib/gdb.exp	2013-07-17 05:28:49.292203541 +0200
 @@ -1482,6 +1482,16 @@ proc default_gdb_start { } {
  	    warning "Couldn't set the width to 0."
  	}
@@ -995,10 +1048,10 @@ Index: gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp
      return 0;
  }
  
-Index: gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp
+Index: gdb-7.6/gdb/testsuite/lib/mi-support.exp
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/testsuite/lib/mi-support.exp	2013-01-22 00:57:59.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp	2013-03-10 16:17:15.220114612 +0100
+--- gdb-7.6.orig/gdb/testsuite/lib/mi-support.exp	2013-01-22 00:57:59.000000000 +0100
++++ gdb-7.6/gdb/testsuite/lib/mi-support.exp	2013-07-17 05:28:49.292203541 +0200
 @@ -212,6 +212,16 @@ proc default_mi_gdb_start { args } {
  	    warning "Couldn't set the width to 0."
  	}
@@ -1016,10 +1069,10 @@ Index: gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp
      # If allowing the inferior to have its own PTY then assign the inferior
      # its own terminal device here.
      if { $separate_inferior_pty } {
-Index: gdb-7.5.50.20130310/gdb/objfiles.h
+Index: gdb-7.6/gdb/objfiles.h
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/objfiles.h	2013-02-28 20:00:31.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/objfiles.h	2013-03-10 16:17:15.220114612 +0100
+--- gdb-7.6.orig/gdb/objfiles.h	2013-02-28 20:00:31.000000000 +0100
++++ gdb-7.6/gdb/objfiles.h	2013-07-17 05:28:49.293203542 +0200
 @@ -432,6 +432,10 @@ struct objfile
  
  #define OBJF_MAINLINE (1 << 5)
@@ -1031,10 +1084,10 @@ Index: gdb-7.5.50.20130310/gdb/objfiles.h
  /* The object file that contains the runtime common minimal symbols
     for SunOS4.  Note that this objfile has no associated BFD.  */
  
-Index: gdb-7.5.50.20130310/gdb/testsuite/gdb.base/corefile.exp
+Index: gdb-7.6/gdb/testsuite/gdb.base/corefile.exp
 ===================================================================
---- gdb-7.5.50.20130310.orig/gdb/testsuite/gdb.base/corefile.exp	2013-01-01 07:33:25.000000000 +0100
-+++ gdb-7.5.50.20130310/gdb/testsuite/gdb.base/corefile.exp	2013-03-10 16:17:15.220114612 +0100
+--- gdb-7.6.orig/gdb/testsuite/gdb.base/corefile.exp	2013-01-01 07:33:25.000000000 +0100
++++ gdb-7.6/gdb/testsuite/gdb.base/corefile.exp	2013-07-17 05:28:49.293203542 +0200
 @@ -256,3 +256,33 @@ if ![is_remote target] {
  
      gdb_exit
diff --git a/gdb.spec b/gdb.spec
index 5e27ca2..6108450 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -36,7 +36,7 @@ Version: 7.6
 
 # The release always contains a leading reserved number, start it at 1.
 # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 32%{?dist}
+Release: 33%{?dist}
 
 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
 Group: Development/Debuggers
@@ -1417,6 +1417,10 @@ fi
 %endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
 
 %changelog
+* Wed Jul 17 2013 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.6-33.fc20
+- Fix yum install command output when the binary RPM is missing (BZ 981154).
+- Fix the changlog entry formatting for 6.3.0.0-0.1.
+
 * Mon Jun 10 2013 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.6-32.fc19
 - [scl] Disable Python frame filters on scl.
 - Update libraries opening performance fix from upstream.
@@ -3744,8 +3748,8 @@ prelink base addresses.  Fixes BZ 175075, BZ 190545.
 - Enable PPC CFI, remove merged ppc patches.
 
 * Wed Jan 12 2005 Elena Zannoni <ezannoni at redhat.com> - 6.3.0.0-0.1
-		  Andrew Cagney <cagney at redhat.com>
-		  Jeff Johnston <jjohnstn at redhat.com>
+- commit co-authors Andrew Cagney <cagney at redhat.com> and
+  Jeff Johnston <jjohnstn at redhat.com>.
 - Various fixes to complete the import and merge.
 
 * Wed Dec 01 2004 Andrew Cagney <cagney at redhat.com> - 6.3.0.0


More information about the scm-commits mailing list