[packages/gdb] up to 15.2

atler atler at pld-linux.org
Mon Oct 7 14:18:53 CEST 2024


commit 4528ecde4121e96e86f0a532c3a6b9b341162e18
Author: Jan Palus <atler at pld-linux.org>
Date:   Mon Oct 7 13:29:32 2024 +0200

    up to 15.2

 buildid-locate-rpm-pld.patch                   |   20 +-
 gdb-6.3-gstack-20050411.patch                  |   24 +-
 gdb-6.6-buildid-locate-rpm.patch               | 1084 ------------------------
 gdb-6.6-buildid-locate-solib-missing-ids.patch |  130 +--
 gdb-6.6-buildid-locate.patch                   |  925 +++-----------------
 gdb.spec                                       |   29 +-
 6 files changed, 215 insertions(+), 1997 deletions(-)
---
diff --git a/gdb.spec b/gdb.spec
index 1d4b3d5..65d0775 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -21,18 +21,17 @@ Summary(uk.UTF-8):	Символьний відладчик для С та інш
 Summary(zh_CN.UTF-8):	[开发]C和其他语言的调试器
 Summary(zh_TW.UTF-8):	[.-A開發]C和.$)B其.-A他語.$)B言的調試器
 Name:		gdb
-Version:	14.2
+Version:	15.2
 Release:	1
 License:	GPL v3+
 Group:		Development/Debuggers
 Source0:	https://ftp.gnu.org/gnu/gdb/%{name}-%{version}.tar.xz
-# Source0-md5:	4452f575d09f94276cb0a1e95ecff856
+# Source0-md5:	85c722e2f2baea2b7820a6a7eaea2ce8
 Source1:	http://www.mif.pg.gda.pl/homepages/ankry/man-PLD/%{name}-non-english-man-pages.tar.bz2
 # Source1-md5:	2e8a48939ae282c12bbacdd54e398247
 Source3:	%{name}-gstack.man
 Patch100:	gdb-6.6-buildid-locate.patch
 Patch101:	gdb-6.6-buildid-locate-solib-missing-ids.patch
-Patch102:	gdb-6.6-buildid-locate-rpm.patch
 Patch104:	gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
 Patch105:	gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
 Patch110:	gdb-6.3-gstack-20050411.patch
@@ -59,14 +58,13 @@ BuildRequires:	libipt-devel
 %endif
 BuildRequires:	libmpc-devel >= 0.8.1
 BuildRequires:	libselinux-devel
-BuildRequires:	libstdc++-devel >= 6:4.8
+BuildRequires:	libstdc++-devel >= 6:8
 BuildRequires:	libtool >= 2:2
-BuildRequires:	make >= 3.81
+BuildRequires:	make >= 1:3.81
 BuildRequires:	mpfr-devel >= 3.1.6
 BuildRequires:	ncurses-devel >= 5.2
 BuildRequires:	pkgconfig
 BuildRequires:	readline-devel
-BuildRequires:	rpm-devel >= 1:4.6
 BuildRequires:	rpmbuild(macros) >= 1.219
 BuildRequires:	source-highlight-devel >= 3.0
 BuildRequires:	tar >= 1:1.22
@@ -75,8 +73,10 @@ BuildRequires:	xxHash-devel
 BuildRequires:	xz
 BuildRequires:	xz-devel
 BuildRequires:	zlib-devel
+BuildRequires:	zstd-devel
 %if %{with python}
 BuildRequires:	python3-devel >= 1:3.2
+BuildRequires:	python3-modules >= 1:3.2
 BuildRequires:	rpm-pythonprov
 Obsoletes:	python-gdb < 7.3
 # for traceback module
@@ -193,7 +193,6 @@ GDB w postaci biblioteki statycznej.
 
 %patch100 -p1
 %patch101 -p1
-%patch102 -p1
 %patch104 -p1
 %patch105 -p1
 %patch110 -p1
@@ -210,20 +209,20 @@ cat > gdb/version.in << EOF
 EOF
 
 %{__sed} -i -e '1s,/usr/bin/python$,%{__python},' \
-      contrib/dg-extract-results.py \
+	contrib/dg-extract-results.py \
 
 %{__sed} -i -e '1s,/usr/bin/env python$,%{__python},' \
-      gdb/contrib/test_pubnames_and_indexes.py \
-      gdb/testsuite/print-ts.py
+	gdb/contrib/test_pubnames_and_indexes.py \
+	gdb/testsuite/print-ts.py
 
 %{__sed} -i -e '1s,/usr/bin/env python3,%{__python3},' \
-      gdb/testsuite/analyze-racy-logs.py \
-      gdb/copyright.py
+	gdb/testsuite/analyze-racy-logs.py \
+	gdb/copyright.py
 
 %{__sed} -i -e '1s,/usr/bin/env bash,/bin/bash,' \
-      gdb/contrib/cc-with-tweaks.sh \
-      gdb/gcore.in \
-      src-release.sh
+	gdb/contrib/cc-with-tweaks.sh \
+	gdb/gcore.in \
+	src-release.sh
 
 sed -i -e 's/\[2\.69\]/[%{autoconf_ver}]/' config/override.m4
 
diff --git a/buildid-locate-rpm-pld.patch b/buildid-locate-rpm-pld.patch
index d5e0914..a4fd3fb 100644
--- a/buildid-locate-rpm-pld.patch
+++ b/buildid-locate-rpm-pld.patch
@@ -1,18 +1,18 @@
 --- gdb-14.1/gdb/build-id.c.old	2014-06-05 14:31:11.000000000 +0200
 +++ gdb-14.1/gdb/build-id.c	2014-06-05 14:33:12.248235380 +0200
 @@ -1306,13 +1306,8 @@ debug_print_missing (const char *binary,
- 	if (debug != NULL)
- 	{
- 	  if (access (debug, F_OK) == 0) {
--	    gdb_printf (gdb_stdlog, _("Try: %s %s\n"),
+ 	      _("Missing separate debuginfo for %s.\n"), binary);
+   if (debug != NULL)
+     {
+-      gdb_printf (gdb_stdlog, _("Try: %s %s\n"),
 -#ifdef DNF_DEBUGINFO_INSTALL
--			"dnf"
+-		  "dnf"
 -#else
--			"yum"
+-		  "yum"
 -#endif
--			" --enablerepo='*debug*' install", debug);
+-		  " --enablerepo='*debug*' install", debug);
 +	    gdb_printf (gdb_stdlog, _("Try to install package that provides `%s' file\n"),
 +			debug);
- 	  } else
- 	    gdb_printf (gdb_stdlog, _("The debuginfo package for this file is probably broken.\n"));
- 	}
+     }
+ }
+ 
diff --git a/gdb-6.3-gstack-20050411.patch b/gdb-6.3-gstack-20050411.patch
index 01e8ffa..90fbfa1 100644
--- a/gdb-6.3-gstack-20050411.patch
+++ b/gdb-6.3-gstack-20050411.patch
@@ -16,7 +16,7 @@ Subject: gdb-6.3-gstack-20050411.patch
 diff --git a/gdb/Makefile.in b/gdb/Makefile.in
 --- a/gdb/Makefile.in
 +++ b/gdb/Makefile.in
-@@ -2035,7 +2035,7 @@ info install-info clean-info dvi pdf install-pdf html install-html: force
+@@ -2071,7 +2071,7 @@ info install-info clean-info dvi install-dvi pdf install-pdf html install-html:
  install: all
  	@$(MAKE) $(FLAGS_TO_PASS) install-only
  
@@ -25,7 +25,7 @@ diff --git a/gdb/Makefile.in b/gdb/Makefile.in
  	transformed_name=`t='$(program_transform_name)'; \
  			  echo gdb | sed -e "$$t"` ; \
  		if test "x$$transformed_name" = x; then \
-@@ -2085,7 +2085,25 @@ install-guile:
+@@ -2121,7 +2121,25 @@ install-guile:
  install-python:
  	$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
  
@@ -52,7 +52,7 @@ diff --git a/gdb/Makefile.in b/gdb/Makefile.in
  	transformed_name=`t='$(program_transform_name)'; \
  			  echo gdb | sed -e $$t` ; \
  		if test "x$$transformed_name" = x; then \
-@@ -2116,6 +2134,18 @@ uninstall: force $(CONFIG_UNINSTALL)
+@@ -2152,6 +2170,28 @@ uninstall: force $(CONFIG_UNINSTALL)
  	rm -f $(DESTDIR)$(bindir)/$$transformed_name
  	@$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
  
@@ -68,9 +68,19 @@ diff --git a/gdb/Makefile.in b/gdb/Makefile.in
 +		rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
 +		      $(DESTDIR)$(man1dir)/$$transformed_name.1
 +
- # The C++ name parser can be built standalone for testing.
- test-cp-name-parser.o: cp-name-parser.c
- 	$(COMPILE) -DTEST_CPNAMES cp-name-parser.c
++# The C++ name parser can be built standalone for testing.
++test-cp-name-parser.o: cp-name-parser.c
++	$(COMPILE) -DTEST_CPNAMES cp-name-parser.c
++	$(POSTCOMPILE)
++
++test-cp-name-parser$(EXEEXT): test-cp-name-parser.o $(LIBIBERTY)
++	$(ECHO_CXXLD) $(CC_LD) $(INTERNAL_LDFLAGS) \
++		-o test-cp-name-parser$(EXEEXT) test-cp-name-parser.o \
++		$(LIBIBERTY)
++
+ # We do this by grepping through sources.  If that turns out to be too slow,
+ # maybe we could just require every .o file to have an initialization routine
+ # of a given name (top.o -> _initialize_top, etc.).
 diff --git a/gdb/gstack.sh b/gdb/gstack.sh
 new file mode 100644
 --- /dev/null
@@ -226,7 +236,7 @@ new file mode 100644
 +# exiting the function.  Still we could retry the gstack command if we fail.
 +
 +set test "spawn gstack"
-+set command "sh -c GDB=$GDB\\ GDBARGS=-data-directory\\\\\\ $BUILD_DATA_DIRECTORY\\ sh\\ ${srcdir}/../gstack.sh\\ $pid\\;echo\\ GSTACK-END"
++set command "sh -c GDB=$GDB\\ GDBARGS=-data-directory\\\\\\ $GDB_DATA_DIRECTORY\\ sh\\ ${srcdir}/../gstack.sh\\ $pid\\;echo\\ GSTACK-END"
 +set res [remote_spawn host $command];
 +if { $res < 0 || $res == "" } {
 +    perror "Spawning $command failed."
diff --git a/gdb-6.6-buildid-locate-rpm.patch b/gdb-6.6-buildid-locate-rpm.patch
deleted file mode 100644
index f38fdd5..0000000
--- a/gdb-6.6-buildid-locate-rpm.patch
+++ /dev/null
@@ -1,1084 +0,0 @@
-From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
-From: Kevin Buettner <kevinb at redhat.com>
-Date: Wed, 22 Feb 2023 22:30:40 -0700
-Subject: gdb-6.6-buildid-locate-rpm.patch
-
-;;=push+jan
-
-diff --git a/gdb/aclocal.m4 b/gdb/aclocal.m4
---- a/gdb/aclocal.m4
-+++ b/gdb/aclocal.m4
-@@ -11,7 +11,223 @@
- # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- # PARTICULAR PURPOSE.
- 
-+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-+# serial 1 (pkg-config-0.24)
-+#
-+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+#
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-+# ----------------------------------
-+AC_DEFUN([PKG_PROG_PKG_CONFIG],
-+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
-+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
-+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
-+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
-+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
-+
-+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
-+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-+fi
-+if test -n "$PKG_CONFIG"; then
-+	_pkg_min_version=m4_default([$1], [0.9.0])
-+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
-+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-+		AC_MSG_RESULT([yes])
-+	else
-+		AC_MSG_RESULT([no])
-+		PKG_CONFIG=""
-+	fi
-+fi[]dnl
-+])# PKG_PROG_PKG_CONFIG
-+
-+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-+#
-+# Check to see whether a particular set of modules exists.  Similar
-+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-+#
-+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+# only at the first occurence in configure.ac, so if the first place
-+# it's called might be skipped (such as if it is within an "if", you
-+# have to call PKG_CHECK_EXISTS manually
-+# --------------------------------------------------------------
-+AC_DEFUN([PKG_CHECK_EXISTS],
-+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-+if test -n "$PKG_CONFIG" && \
-+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
-+  m4_default([$2], [:])
-+m4_ifvaln([$3], [else
-+  $3])dnl
-+fi])
-+
-+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-+# ---------------------------------------------
-+m4_define([_PKG_CONFIG],
-+[if test -n "$$1"; then
-+    pkg_cv_[]$1="$$1"
-+ elif test -n "$PKG_CONFIG"; then
-+    PKG_CHECK_EXISTS([$3],
-+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
-+		      test "x$?" != "x0" && pkg_failed=yes ],
-+		     [pkg_failed=yes])
-+ else
-+    pkg_failed=untried
-+fi[]dnl
-+])# _PKG_CONFIG
-+
-+# _PKG_SHORT_ERRORS_SUPPORTED
-+# -----------------------------
-+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-+        _pkg_short_errors_supported=yes
-+else
-+        _pkg_short_errors_supported=no
-+fi[]dnl
-+])# _PKG_SHORT_ERRORS_SUPPORTED
-+
-+
-+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-+# [ACTION-IF-NOT-FOUND])
-+#
-+#
-+# Note that if there is a possibility the first call to
-+# PKG_CHECK_MODULES might not happen, you should be sure to include an
-+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-+#
-+#
-+# --------------------------------------------------------------
-+AC_DEFUN([PKG_CHECK_MODULES],
-+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-+
-+pkg_failed=no
-+AC_MSG_CHECKING([for $1])
-+
-+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-+
-+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-+and $1[]_LIBS to avoid the need to call pkg-config.
-+See the pkg-config man page for more details.])
-+
-+if test $pkg_failed = yes; then
-+        AC_MSG_RESULT([no])
-+        _PKG_SHORT_ERRORS_SUPPORTED
-+        if test $_pkg_short_errors_supported = yes; then
-+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
-+        else
-+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
-+        fi
-+	# Put the nasty error message in config.log where it belongs
-+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-+
-+	m4_default([$4], [AC_MSG_ERROR(
-+[Package requirements ($2) were not met:
-+
-+$$1_PKG_ERRORS
-+
-+Consider adjusting the PKG_CONFIG_PATH environment variable if you
-+installed software in a non-standard prefix.
-+
-+_PKG_TEXT])[]dnl
-+        ])
-+elif test $pkg_failed = untried; then
-+        AC_MSG_RESULT([no])
-+	m4_default([$4], [AC_MSG_FAILURE(
-+[The pkg-config script could not be found or is too old.  Make sure it
-+is in your PATH or set the PKG_CONFIG environment variable to the full
-+path to pkg-config.
-+
-+_PKG_TEXT
-+
-+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
-+        ])
-+else
-+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
-+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
-+        AC_MSG_RESULT([yes])
-+	$3
-+fi[]dnl
-+])# PKG_CHECK_MODULES
-+
-+
-+# PKG_INSTALLDIR(DIRECTORY)
-+# -------------------------
-+# Substitutes the variable pkgconfigdir as the location where a module
-+# should install pkg-config .pc files. By default the directory is
-+# $libdir/pkgconfig, but the default can be changed by passing
-+# DIRECTORY. The user can override through the --with-pkgconfigdir
-+# parameter.
-+AC_DEFUN([PKG_INSTALLDIR],
-+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
-+m4_pushdef([pkg_description],
-+    [pkg-config installation directory @<:@]pkg_default[@:>@])
-+AC_ARG_WITH([pkgconfigdir],
-+    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
-+    [with_pkgconfigdir=]pkg_default)
-+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
-+m4_popdef([pkg_default])
-+m4_popdef([pkg_description])
-+]) dnl PKG_INSTALLDIR
-+
-+
-+# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-+# -------------------------
-+# Substitutes the variable noarch_pkgconfigdir as the location where a
-+# module should install arch-independent pkg-config .pc files. By
-+# default the directory is $datadir/pkgconfig, but the default can be
-+# changed by passing DIRECTORY. The user can override through the
-+# --with-noarch-pkgconfigdir parameter.
-+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
-+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
-+m4_pushdef([pkg_description],
-+    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
-+AC_ARG_WITH([noarch-pkgconfigdir],
-+    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
-+    [with_noarch_pkgconfigdir=]pkg_default)
-+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
-+m4_popdef([pkg_default])
-+m4_popdef([pkg_description])
-+]) dnl PKG_NOARCH_INSTALLDIR
-+
-+
-+# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
-+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-+# -------------------------------------------
-+# Retrieves the value of the pkg-config variable for the given module.
-+AC_DEFUN([PKG_CHECK_VAR],
-+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
-+
-+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
-+AS_VAR_COPY([$1], [pkg_cv_][$1])
-+
-+AS_VAR_IF([$1], [""], [$5], [$4])dnl
-+])# PKG_CHECK_VAR
-+
- m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-+
- # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
- 
- # Copyright (C) 2001-2017 Free Software Foundation, Inc.
-diff --git a/gdb/build-id.c b/gdb/build-id.c
---- a/gdb/build-id.c
-+++ b/gdb/build-id.c
-@@ -780,10 +780,10 @@ missing_rpm_enlist_1 (const char *filename, int verify_vendor)
-   static rpmts (*rpmtsCreate_p) (void);
-   extern rpmts rpmtsFree(rpmts ts);
-   static rpmts (*rpmtsFree_p) (rpmts ts);
--  extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
-+  extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
-                                               const void * keyp, size_t keylen);
-   static rpmdbMatchIterator (*rpmtsInitIterator_p) (const rpmts ts,
--						    rpmTag rpmtag,
-+						    rpmDbiTagVal rpmtag,
- 						    const void *keyp,
- 						    size_t keylen);
- #else	/* !DLOPEN_LIBRPM */
-@@ -838,7 +838,7 @@ missing_rpm_enlist_1 (const char *filename, int verify_vendor)
- 	      && (rpmdbNextIterator_p = (Header (*) (rpmdbMatchIterator mi)) dlsym (h, "rpmdbNextIterator"))
- 	      && (rpmtsCreate_p = (rpmts (*) (void)) dlsym (h, "rpmtsCreate"))
- 	      && (rpmtsFree_p = (rpmts (*) (rpmts ts)) dlsym (h, "rpmtsFree"))
--	      && (rpmtsInitIterator_p = (rpmdbMatchIterator (*) (const rpmts ts, rpmTag rpmtag, const void *keyp, size_t keylen)) dlsym (h, "rpmtsInitIterator"))))
-+	      && (rpmtsInitIterator_p = (rpmdbMatchIterator (*) (const rpmts ts, rpmDbiTagVal rpmtag, const void *keyp, size_t keylen)) dlsym (h, "rpmtsInitIterator"))))
- 	  {
- 	    warning (_("Opened library \"%s\" is incompatible (%s), "
- 		      "missing debuginfos notifications will not be displayed"),
-@@ -926,7 +926,7 @@ missing_rpm_enlist_1 (const char *filename, int verify_vendor)
- 
- 	  /* RPMDBI_PACKAGES requires keylen == sizeof (int).  */
- 	  /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel().  */
--	  mi_debuginfo = rpmtsInitIterator_p (ts, (rpmTag) RPMDBI_LABEL, debuginfo, 0);
-+	  mi_debuginfo = rpmtsInitIterator_p (ts, (rpmDbiTagVal) RPMDBI_LABEL, debuginfo, 0);
- 	  xfree (debuginfo);
- 	  if (mi_debuginfo)
- 	    {
-diff --git a/gdb/config.in b/gdb/config.in
---- a/gdb/config.in
-+++ b/gdb/config.in
-@@ -42,6 +42,9 @@
- /* Handle .ctf type-info sections */
- #undef ENABLE_LIBCTF
- 
-+/* librpm version specific library name to dlopen. */
-+#undef DLOPEN_LIBRPM
-+
- /* Define to 1 if translation of program messages to the user's native
-    language is requested. */
- #undef ENABLE_NLS
-@@ -265,6 +268,9 @@
- /* Define to 1 if you have the `m' library (-lm). */
- #undef HAVE_LIBM
- 
-+/* Define if librpm library is being used. */
-+#undef HAVE_LIBRPM
-+
- /* Define to 1 if you have the <libunwind-ia64.h> header file. */
- #undef HAVE_LIBUNWIND_IA64_H
- 
-diff --git a/gdb/configure b/gdb/configure
---- a/gdb/configure
-+++ b/gdb/configure
-@@ -778,6 +778,11 @@ AMD_DBGAPI_CFLAGS
- ENABLE_BFD_64_BIT_FALSE
- ENABLE_BFD_64_BIT_TRUE
- subdirs
-+RPM_LIBS
-+RPM_CFLAGS
-+PKG_CONFIG_LIBDIR
-+PKG_CONFIG_PATH
-+PKG_CONFIG
- GDB_DATADIR
- DEBUGDIR
- MAKEINFO_EXTRA_FLAGS
-@@ -911,6 +916,7 @@ with_gdb_datadir
- with_relocated_sources
- with_auto_load_dir
- with_auto_load_safe_path
-+with_rpm
- enable_targets
- enable_64_bit_bfd
- with_amd_dbgapi
-@@ -988,6 +994,8 @@ AMD_DBGAPI_CFLAGS
- AMD_DBGAPI_LIBS
- DEBUGINFOD_CFLAGS
- DEBUGINFOD_LIBS
-+RPM_CFLAGS
-+RPM_LIBS
- YACC
- YFLAGS
- ZSTD_CFLAGS
-@@ -1679,6 +1687,8 @@ Optional Packages:
-   --with-amd-dbgapi       support for the amd-dbgapi target (yes / no / auto)
-   --with-debuginfod       Enable debuginfo lookups with debuginfod
-                           (auto/yes/no)
-+  --with-rpm              query rpm database for missing debuginfos (yes/no,
-+                          def. auto=librpm.so)
-   --with-libunwind-ia64   use libunwind frame unwinding for ia64 targets
-   --with-curses           use the curses library instead of the termcap
-                           library
-@@ -1759,6 +1769,8 @@ Some influential environment variables:
-               C compiler flags for DEBUGINFOD, overriding pkg-config
-   DEBUGINFOD_LIBS
-               linker flags for DEBUGINFOD, overriding pkg-config
-+  RPM_CFLAGS  C compiler flags for RPM, overriding pkg-config
-+  RPM_LIBS    linker flags for RPM, overriding pkg-config
-   YACC        The `Yet Another Compiler Compiler' implementation to use.
-               Defaults to the first program found out of: `bison -y', `byacc',
-               `yacc'.
-@@ -18039,6 +18051,495 @@ _ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5
- $as_echo "$with_auto_load_safe_path" >&6; }
- 
-+# Integration with rpm library to support missing debuginfo suggestions.
-+# --without-rpm: Disable any rpm support.
-+# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime.
-+#   Even with runtime missing `libname.so' GDB will still other run correctly.
-+#   Missing `libname.so' during ./configure will abort the configuration.
-+# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific
-+#   minor version first such as `librpm-4.6.so' as minor version differences
-+#   mean API+ABI incompatibility.  If the specific match versioned library name
-+#   could not be found still open dynamically at least `librpm.so'.
-+# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try
-+#   to find librpm for compilation-time linking by pkg-config.  GDB binary will
-+#   be probably linked with the version specific library (as `librpm-4.6.so').
-+#   Failure to find librpm by pkg-config will abort the configuration.
-+# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config
-+#   cannot find librpm use to the rpmless compilation (like `--without-rpm').
-+
-+
-+# Check whether --with-rpm was given.
-+if test "${with_rpm+set}" = set; then :
-+  withval=$with_rpm;
-+else
-+  with_rpm="auto"
-+fi
-+
-+
-+
-+
-+if test "x$with_rpm" != "xno"; then
-+  if test "x$with_rpm" = "xyes"; then
-+    LIBRPM="librpm.so"
-+    RPM_REQUIRE=true
-+    DLOPEN_REQUIRE=false
-+  elif test "x$with_rpm" = "xauto"; then
-+    LIBRPM="librpm.so"
-+    RPM_REQUIRE=false
-+    DLOPEN_REQUIRE=false
-+  else
-+    LIBRPM="$with_rpm"
-+    RPM_REQUIRE=true
-+    DLOPEN_REQUIRE=true
-+  fi
-+  LIBRPM_STRING='"'"$LIBRPM"'"'
-+
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking specific librpm version" >&5
-+$as_echo_n "checking specific librpm version... " >&6; }
-+  HAVE_DLOPEN_LIBRPM=false
-+  save_LIBS="$LIBS"
-+  LIBS="$LIBS -ldl"
-+  if test "$cross_compiling" = yes; then :
-+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-+as_fn_error "cannot run test program while cross compiling
-+See \`config.log' for more details." "$LINENO" 5; }
-+else
-+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+#include <rpm/rpmlib.h>
-+#include <dlfcn.h>
-+#include <errno.h>
-+#include <string.h>
-+
-+int
-+main ()
-+{
-+
-+    void *h;
-+    const char *const *rpmverp;
-+    FILE *f;
-+
-+    f = fopen ("conftest.out", "w");
-+    if (!f)
-+      {
-+	fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out",
-+		 strerror (errno));
-+	return 1;
-+      }
-+    h = dlopen ($LIBRPM_STRING, RTLD_LAZY);
-+    if (!h)
-+      {
-+	fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ());
-+	return 1;
-+      }
-+    rpmverp = dlsym (h, "RPMVERSION");
-+    if (!rpmverp)
-+      {
-+	fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ());
-+	return 1;
-+      }
-+    fprintf (stderr, "RPMVERSION is: \"");
-+    fprintf (stderr, "%s\"\n", *rpmverp);
-+
-+    /* Try to find the specific librpm version only for "librpm.so" as we do
-+       not know how to assemble the version string otherwise.  */
-+
-+    if (strcmp ("librpm.so", $LIBRPM_STRING) != 0)
-+      {
-+	fprintf (f, "%s\n", $LIBRPM_STRING);
-+	return 0;
-+      }
-+    else
-+      {
-+	char *h2_name;
-+	void *h2;
-+	int major, minor;
-+
-+	if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2)
-+	  {
-+	    fprintf (stderr, "Unable to parse RPMVERSION.\n");
-+	    fprintf (f, "%s\n", $LIBRPM_STRING);
-+	    return 0;
-+	  }
-+	/* Avoid the square brackets by malloc.  */
-+	h2_name = malloc (64);
-+	sprintf (h2_name, "librpm-%d.%d.so", major, minor);
-+	h2 = dlopen (h2_name, RTLD_LAZY);
-+	if (!h2)
-+	  {
-+	    fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ());
-+	    fprintf (f, "%s\n", $LIBRPM_STRING);
-+	    return 0;
-+	  }
-+	if (h2 != h)
-+	  {
-+	    fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n",
-+		     $LIBRPM_STRING, h2_name);
-+	    fprintf (f, "%s\n", $LIBRPM_STRING);
-+	    return 0;
-+	  }
-+	/* Found the valid .so name with a specific version.  */
-+	fprintf (f, "%s\n", h2_name);
-+	return 0;
-+      }
-+
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_run "$LINENO"; then :
-+
-+    DLOPEN_LIBRPM="`cat conftest.out`"
-+    if test "x$DLOPEN_LIBRPM" != "x"; then
-+      HAVE_DLOPEN_LIBRPM=true
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLOPEN_LIBRPM" >&5
-+$as_echo "$DLOPEN_LIBRPM" >&6; }
-+    fi
-+
-+fi
-+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-+  conftest.$ac_objext conftest.beam conftest.$ac_ext
-+fi
-+
-+  rm -f conftest.out
-+
-+
-+
-+  if $HAVE_DLOPEN_LIBRPM; then
-+
-+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5
-+$as_echo_n "checking rpm library API compatibility... " >&6; }
-+    # The compilation requires -Werror to verify anything.
-+    save_CFLAGS="$CFLAGS"
-+    CFLAGS="$CFLAGS -Werror"
-+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+/* Duplicate here the declarations to verify they match "elfread.c".  */
-+#include <rpm/rpmlib.h>
-+#include <rpm/rpmts.h>
-+#include <rpm/rpmdb.h>
-+#include <rpm/header.h>
-+extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
-+extern int rpmReadConfigFiles(const char * file, const char * target);
-+extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
-+extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
-+extern rpmts rpmtsCreate(void);
-+extern rpmts rpmtsFree(rpmts ts);
-+extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
-+					    const void * keyp, size_t keylen);
-+
-+int
-+main ()
-+{
-+
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+
-+      LIBRPM_COMPAT=true
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+else
-+
-+      LIBRPM_COMPAT=false
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+    CFLAGS="$save_CFLAGS"
-+
-+    if ! $LIBRPM_COMPAT; then
-+      HAVE_DLOPEN_LIBRPM=false
-+    fi
-+  fi
-+
-+  if $HAVE_DLOPEN_LIBRPM; then
-+    DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"'
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DLOPEN_LIBRPM $DLOPEN_LIBRPM_STRING
-+_ACEOF
-+
-+
-+$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h
-+
-+  else
-+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+    LIBS="$save_LIBS"
-+    if $DLOPEN_REQUIRE; then
-+      as_fn_error "Specific name $LIBRPM was requested but it could not be opened." "$LINENO" 5
-+    fi
-+
-+
-+
-+
-+
-+
-+
-+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
-+	if test -n "$ac_tool_prefix"; then
-+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  case $PKG_CONFIG in
-+  [\\/]* | ?:[\\/]*)
-+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+  ;;
-+  *)
-+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+    for ac_exec_ext in '' $ac_executable_extensions; do
-+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+  done
-+IFS=$as_save_IFS
-+
-+  ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+if test -n "$PKG_CONFIG"; then
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-+$as_echo "$PKG_CONFIG" >&6; }
-+else
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+fi
-+if test -z "$ac_cv_path_PKG_CONFIG"; then
-+  ac_pt_PKG_CONFIG=$PKG_CONFIG
-+  # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  case $ac_pt_PKG_CONFIG in
-+  [\\/]* | ?:[\\/]*)
-+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
-+  ;;
-+  *)
-+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+    for ac_exec_ext in '' $ac_executable_extensions; do
-+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+  done
-+IFS=$as_save_IFS
-+
-+  ;;
-+esac
-+fi
-+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-+if test -n "$ac_pt_PKG_CONFIG"; then
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
-+else
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+  if test "x$ac_pt_PKG_CONFIG" = x; then
-+    PKG_CONFIG=""
-+  else
-+    case $cross_compiling:$ac_tool_warned in
-+yes:)
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-+ac_tool_warned=yes ;;
-+esac
-+    PKG_CONFIG=$ac_pt_PKG_CONFIG
-+  fi
-+else
-+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-+fi
-+
-+fi
-+if test -n "$PKG_CONFIG"; then
-+	_pkg_min_version=0.9.0
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
-+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+	else
-+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+		PKG_CONFIG=""
-+	fi
-+fi
-+
-+pkg_failed=no
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RPM" >&5
-+$as_echo_n "checking for RPM... " >&6; }
-+
-+if test -n "$RPM_CFLAGS"; then
-+    pkg_cv_RPM_CFLAGS="$RPM_CFLAGS"
-+ elif test -n "$PKG_CONFIG"; then
-+    if test -n "$PKG_CONFIG" && \
-+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5
-+  ($PKG_CONFIG --exists --print-errors "rpm") 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; then
-+  pkg_cv_RPM_CFLAGS=`$PKG_CONFIG --cflags "rpm" 2>/dev/null`
-+		      test "x$?" != "x0" && pkg_failed=yes
-+else
-+  pkg_failed=yes
-+fi
-+ else
-+    pkg_failed=untried
-+fi
-+if test -n "$RPM_LIBS"; then
-+    pkg_cv_RPM_LIBS="$RPM_LIBS"
-+ elif test -n "$PKG_CONFIG"; then
-+    if test -n "$PKG_CONFIG" && \
-+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5
-+  ($PKG_CONFIG --exists --print-errors "rpm") 2>&5
-+  ac_status=$?
-+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-+  test $ac_status = 0; }; then
-+  pkg_cv_RPM_LIBS=`$PKG_CONFIG --libs "rpm" 2>/dev/null`
-+		      test "x$?" != "x0" && pkg_failed=yes
-+else
-+  pkg_failed=yes
-+fi
-+ else
-+    pkg_failed=untried
-+fi
-+
-+
-+
-+if test $pkg_failed = yes; then
-+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-+        _pkg_short_errors_supported=yes
-+else
-+        _pkg_short_errors_supported=no
-+fi
-+        if test $_pkg_short_errors_supported = yes; then
-+	        RPM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "rpm" 2>&1`
-+        else
-+	        RPM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "rpm" 2>&1`
-+        fi
-+	# Put the nasty error message in config.log where it belongs
-+	echo "$RPM_PKG_ERRORS" >&5
-+
-+	HAVE_LIBRPM=false
-+elif test $pkg_failed = untried; then
-+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+	HAVE_LIBRPM=false
-+else
-+	RPM_CFLAGS=$pkg_cv_RPM_CFLAGS
-+	RPM_LIBS=$pkg_cv_RPM_LIBS
-+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+	HAVE_LIBRPM=true
-+fi
-+
-+    if $HAVE_LIBRPM; then
-+
-+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5
-+$as_echo_n "checking rpm library API compatibility... " >&6; }
-+    # The compilation requires -Werror to verify anything.
-+    save_CFLAGS="$CFLAGS"
-+    CFLAGS="$CFLAGS -Werror"
-+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+/* Duplicate here the declarations to verify they match "elfread.c".  */
-+#include <rpm/rpmlib.h>
-+#include <rpm/rpmts.h>
-+#include <rpm/rpmdb.h>
-+#include <rpm/header.h>
-+extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
-+extern int rpmReadConfigFiles(const char * file, const char * target);
-+extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
-+extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
-+extern rpmts rpmtsCreate(void);
-+extern rpmts rpmtsFree(rpmts ts);
-+extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
-+					    const void * keyp, size_t keylen);
-+
-+int
-+main ()
-+{
-+
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+
-+      LIBRPM_COMPAT=true
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+
-+else
-+
-+      LIBRPM_COMPAT=false
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+    CFLAGS="$save_CFLAGS"
-+
-+      if ! $LIBRPM_COMPAT; then
-+	HAVE_LIBRPM=false
-+	RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB"
-+      fi
-+    fi
-+
-+    if $HAVE_LIBRPM; then
-+
-+$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h
-+
-+      CFLAGS="$CFLAGS $RPM_CFLAGS"
-+      LIBS="$LIBS $RPM_LIBS"
-+    else
-+      if $RPM_REQUIRE; then
-+	as_fn_error "$RPM_PKG_ERRORS" "$LINENO" 5
-+      else
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $RPM_PKG_ERRORS" >&5
-+$as_echo "$as_me: WARNING: $RPM_PKG_ERRORS" >&2;}
-+      fi
-+    fi
-+  fi
-+fi
-+
- 
- 
- subdirs="$subdirs testsuite"
-diff --git a/gdb/configure.ac b/gdb/configure.ac
---- a/gdb/configure.ac
-+++ b/gdb/configure.ac
-@@ -173,6 +173,200 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir,
- 	      [Directories safe to hold auto-loaded files.])
- AC_MSG_RESULT([$with_auto_load_safe_path])
- 
-+# Integration with rpm library to support missing debuginfo suggestions.
-+# --without-rpm: Disable any rpm support.
-+# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime.
-+#   Even with runtime missing `libname.so' GDB will still other run correctly.
-+#   Missing `libname.so' during ./configure will abort the configuration.
-+# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific
-+#   minor version first such as `librpm-4.6.so' as minor version differences
-+#   mean API+ABI incompatibility.  If the specific match versioned library name
-+#   could not be found still open dynamically at least `librpm.so'.
-+# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try
-+#   to find librpm for compilation-time linking by pkg-config.  GDB binary will
-+#   be probably linked with the version specific library (as `librpm-4.6.so').
-+#   Failure to find librpm by pkg-config will abort the configuration.
-+# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config
-+#   cannot find librpm use to the rpmless compilation (like `--without-rpm').
-+
-+AC_ARG_WITH([rpm],
-+  [AS_HELP_STRING([--with-rpm],
-+                  [query rpm database for missing debuginfos (yes/no, def. auto=librpm.so)])], [], [with_rpm="auto"])
-+
-+m4_pattern_allow([^AC_MSG_ERROR$])
-+m4_pattern_allow([^AC_MSG_WARN$])
-+if test "x$with_rpm" != "xno"; then
-+  if test "x$with_rpm" = "xyes"; then
-+    LIBRPM="librpm.so"
-+    RPM_REQUIRE=true
-+    DLOPEN_REQUIRE=false
-+  elif test "x$with_rpm" = "xauto"; then
-+    LIBRPM="librpm.so"
-+    RPM_REQUIRE=false
-+    DLOPEN_REQUIRE=false
-+  else
-+    LIBRPM="$with_rpm"
-+    RPM_REQUIRE=true
-+    DLOPEN_REQUIRE=true
-+  fi
-+  LIBRPM_STRING='"'"$LIBRPM"'"'
-+
-+  AC_MSG_CHECKING([specific librpm version])
-+  HAVE_DLOPEN_LIBRPM=false
-+  save_LIBS="$LIBS"
-+  LIBS="$LIBS -ldl"
-+  AC_RUN_IFELSE(AC_LANG_PROGRAM([[
-+#include <rpm/rpmlib.h>
-+#include <dlfcn.h>
-+#include <errno.h>
-+#include <string.h>
-+  ]], [[
-+    void *h;
-+    const char *const *rpmverp;
-+    FILE *f;
-+
-+    f = fopen ("conftest.out", "w");
-+    if (!f)
-+      {
-+	fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out",
-+		 strerror (errno));
-+	return 1;
-+      }
-+    h = dlopen ($LIBRPM_STRING, RTLD_LAZY);
-+    if (!h)
-+      {
-+	fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ());
-+	return 1;
-+      }
-+    rpmverp = dlsym (h, "RPMVERSION");
-+    if (!rpmverp)
-+      {
-+	fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ());
-+	return 1;
-+      }
-+    fprintf (stderr, "RPMVERSION is: \"");
-+    fprintf (stderr, "%s\"\n", *rpmverp);
-+
-+    /* Try to find the specific librpm version only for "librpm.so" as we do
-+       not know how to assemble the version string otherwise.  */
-+
-+    if (strcmp ("librpm.so", $LIBRPM_STRING) != 0)
-+      {
-+	fprintf (f, "%s\n", $LIBRPM_STRING);
-+	return 0;
-+      }
-+    else
-+      {
-+	char *h2_name;
-+	void *h2;
-+	int major, minor;
-+
-+	if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2)
-+	  {
-+	    fprintf (stderr, "Unable to parse RPMVERSION.\n");
-+	    fprintf (f, "%s\n", $LIBRPM_STRING);
-+	    return 0;
-+	  }
-+	/* Avoid the square brackets by malloc.  */
-+	h2_name = malloc (64);
-+	sprintf (h2_name, "librpm-%d.%d.so", major, minor);
-+	h2 = dlopen (h2_name, RTLD_LAZY);
-+	if (!h2)
-+	  {
-+	    fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ());
-+	    fprintf (f, "%s\n", $LIBRPM_STRING);
-+	    return 0;
-+	  }
-+	if (h2 != h)
-+	  {
-+	    fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n",
-+		     $LIBRPM_STRING, h2_name);
-+	    fprintf (f, "%s\n", $LIBRPM_STRING);
-+	    return 0;
-+	  }
-+	/* Found the valid .so name with a specific version.  */
-+	fprintf (f, "%s\n", h2_name);
-+	return 0;
-+      }
-+  ]]), [
-+    DLOPEN_LIBRPM="`cat conftest.out`"
-+    if test "x$DLOPEN_LIBRPM" != "x"; then
-+      HAVE_DLOPEN_LIBRPM=true
-+      AC_MSG_RESULT($DLOPEN_LIBRPM)
-+    fi
-+  ])
-+  rm -f conftest.out
-+
-+  m4_define([CHECK_LIBRPM_COMPAT], [
-+    AC_MSG_CHECKING([rpm library API compatibility])
-+    # The compilation requires -Werror to verify anything.
-+    save_CFLAGS="$CFLAGS"
-+    CFLAGS="$CFLAGS -Werror"
-+    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[
-+/* Duplicate here the declarations to verify they match "elfread.c".  */
-+#include <rpm/rpmlib.h>
-+#include <rpm/rpmts.h>
-+#include <rpm/rpmdb.h>
-+#include <rpm/header.h>
-+extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
-+extern int rpmReadConfigFiles(const char * file, const char * target);
-+extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
-+extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
-+extern rpmts rpmtsCreate(void);
-+extern rpmts rpmtsFree(rpmts ts);
-+extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
-+					    const void * keyp, size_t keylen);
-+    ]]), [
-+      LIBRPM_COMPAT=true
-+      AC_MSG_RESULT(yes)
-+    ], [
-+      LIBRPM_COMPAT=false
-+      AC_MSG_RESULT(no)
-+    ])
-+    CFLAGS="$save_CFLAGS"
-+  ])
-+
-+  if $HAVE_DLOPEN_LIBRPM; then
-+    CHECK_LIBRPM_COMPAT
-+    if ! $LIBRPM_COMPAT; then
-+      HAVE_DLOPEN_LIBRPM=false
-+    fi
-+  fi
-+
-+  if $HAVE_DLOPEN_LIBRPM; then
-+    DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"'
-+    AC_DEFINE_UNQUOTED(DLOPEN_LIBRPM, $DLOPEN_LIBRPM_STRING, [librpm version specific library name to dlopen.])
-+    AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.])
-+  else
-+    AC_MSG_RESULT(no)
-+    LIBS="$save_LIBS"
-+    if $DLOPEN_REQUIRE; then
-+      AC_MSG_ERROR([Specific name $LIBRPM was requested but it could not be opened.])
-+    fi
-+    PKG_CHECK_MODULES(RPM, rpm, [HAVE_LIBRPM=true], [HAVE_LIBRPM=false])
-+
-+    if $HAVE_LIBRPM; then
-+      CHECK_LIBRPM_COMPAT
-+      if ! $LIBRPM_COMPAT; then
-+	HAVE_LIBRPM=false
-+	RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB"
-+      fi
-+    fi
-+
-+    if $HAVE_LIBRPM; then
-+      AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.])
-+      CFLAGS="$CFLAGS $RPM_CFLAGS"
-+      LIBS="$LIBS $RPM_LIBS"
-+    else
-+      if $RPM_REQUIRE; then
-+	AC_MSG_ERROR($RPM_PKG_ERRORS)
-+      else
-+	AC_MSG_WARN($RPM_PKG_ERRORS)
-+      fi
-+    fi
-+  fi
-+fi
-+
- AC_CONFIG_SUBDIRS(testsuite)
- 
- # Check whether to support alternative target configurations
-diff --git a/gdb/event-top.c b/gdb/event-top.c
---- a/gdb/event-top.c
-+++ b/gdb/event-top.c
-@@ -43,6 +43,7 @@
- #include "async-event.h"
- #include "bt-utils.h"
- #include "pager.h"
-+#include "symfile.h"
- 
- /* readline include files.  */
- #include "readline/readline.h"
-@@ -404,6 +405,8 @@ display_gdb_prompt (const char *new_prompt)
-   /* Reset the nesting depth used when trace-commands is set.  */
-   reset_command_nest_depth ();
- 
-+  debug_flush_missing ();
-+
-   /* Do not call the python hook on an explicit prompt change as
-      passed to this function, as this forms a secondary/local prompt,
-      IE, displayed but not set.  */
-@@ -788,7 +791,10 @@ command_line_handler (gdb::unique_xmalloc_ptr<char> &&rl)
-       command_handler (cmd);
- 
-       if (ui->prompt_state != PROMPTED)
--	display_gdb_prompt (0);
-+	{
-+	  debug_flush_missing ();
-+	  display_gdb_prompt (0);
-+	}
-     }
- }
- 
-diff --git a/gdb/symfile.h b/gdb/symfile.h
---- a/gdb/symfile.h
-+++ b/gdb/symfile.h
-@@ -367,6 +367,7 @@ extern void generic_load (const char *args, int from_tty);
- /* build-id support.  */
- extern struct bfd_build_id *build_id_addr_get (CORE_ADDR addr);
- extern void debug_print_missing (const char *binary, const char *debug);
-+extern void debug_flush_missing (void);
- #define BUILD_ID_MAIN_EXECUTABLE_FILENAME _("the main executable file")
- 
- /* From minidebug.c.  */
diff --git a/gdb-6.6-buildid-locate-solib-missing-ids.patch b/gdb-6.6-buildid-locate-solib-missing-ids.patch
index e9ec7b5..897f691 100644
--- a/gdb-6.6-buildid-locate-solib-missing-ids.patch
+++ b/gdb-6.6-buildid-locate-solib-missing-ids.patch
@@ -14,62 +14,87 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1339862
 diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
 --- a/gdb/solib-svr4.c
 +++ b/gdb/solib-svr4.c
-@@ -1320,14 +1320,28 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
+@@ -347,11 +347,13 @@ lm_addr_check (const solib &so, bfd *abfd)
+ 
+ struct svr4_so
+ {
+-  svr4_so (const char *name, lm_info_svr4_up lm_info)
+-    : name (name), lm_info (std::move (lm_info))
++  svr4_so (const char *name, lm_info_svr4_up lm_info, const char *orig_name = nullptr)
++    : name (name), original_name (orig_name == nullptr ? name : orig_name),
++    lm_info (std::move (lm_info))
+   {}
+ 
+   std::string name;
++  std::string original_name;
+   lm_info_svr4_up lm_info;
+ };
+ 
+@@ -1002,6 +1004,7 @@ so_list_from_svr4_sos (const std::vector<svr4_so> &sos)
+ 
+       newobj->so_name = so.name;
+       newobj->so_original_name = so.name;
++      newobj->so_original_name = so.original_name;
+       newobj->lm_info = std::make_unique<lm_info_svr4> (*so.lm_info);
+ 
+       dst.push_back (*newobj);
+@@ -1263,11 +1266,28 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
+ 	  continue;
  	}
  
-       {
--	struct bfd_build_id *build_id;
-+	struct bfd_build_id *build_id = NULL;
++      /* Preserve original name since name may be changed below.  */
++      gdb::unique_xmalloc_ptr<char> original_name = make_unique_xstrdup (name.get ());
+ 	{
+-	  struct bfd_build_id *build_id;
++	  struct bfd_build_id *build_id = nullptr;
  
- 	strncpy (newobj->so_original_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1);
- 	newobj->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
- 	/* May get overwritten below.  */
- 	strcpy (newobj->so_name, newobj->so_original_name);
+-	  build_id = build_id_addr_get (li->l_ld);
+-	  if (build_id != NULL)
++	  /* In the case the main executable was found according to its build-id
++	     (from a core file) prevent loading a different build of a library
++	     with accidentally the same SO_NAME.
++
++	     It suppresses bogus backtraces (and prints "??" there instead) if
++	     the on-disk files no longer match the running program version.
++	     If the main executable was not loaded according to its build-id do
++	     not do any build-id checking of the libraries.  There may be missing
++	     build-ids dumped in the core file and we would map all the libraries
++	     to the only existing file loaded that time - the executable.  */
++	  if (current_program_space->symfile_object_file != NULL
++	      && (current_program_space->symfile_object_file->flags
++		  & OBJF_BUILD_ID_CORE_LOADED) != 0)
++	    build_id = build_id_addr_get (li->l_ld);
++
++
++	  if (build_id != nullptr)
+ 	    {
+ 	      char *bid_name, *build_id_filename;
  
--	build_id = build_id_addr_get (((lm_info_svr4 *) newobj->lm_info)->l_ld);
-+	/* In the case the main executable was found according to its build-id
-+	   (from a core file) prevent loading a different build of a library
-+	   with accidentally the same SO_NAME.
-+
-+	   It suppresses bogus backtraces (and prints "??" there instead) if
-+	   the on-disk files no longer match the running program version.
-+
-+	   If the main executable was not loaded according to its build-id do
-+	   not do any build-id checking of the libraries.  There may be missing
-+	   build-ids dumped in the core file and we would map all the libraries
-+	   to the only existing file loaded that time - the executable.  */
-+	if (current_program_space->symfile_object_file != NULL
-+	    && (current_program_space->symfile_object_file->flags
-+	         & OBJF_BUILD_ID_CORE_LOADED) != 0)
-+	  build_id = build_id_addr_get (li->l_ld);
- 	if (build_id != NULL)
- 	  {
- 	    char *name, *build_id_filename;
-@@ -1342,23 +1356,7 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
- 		xfree (name);
- 	      }
- 	    else
--	      {
--		debug_print_missing (newobj->so_name, build_id_filename);
+@@ -1280,23 +1300,7 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
+ 		  xfree (bid_name);
+ 		}
+ 	      else
+-		{
+-		  debug_print_missing (name.get (), build_id_filename);
 -
--		/* In the case the main executable was found according to
--		   its build-id (from a core file) prevent loading
--		   a different build of a library with accidentally the
--		   same SO_NAME.
+-		  /* In the case the main executable was found according to
+-		     its build-id (from a core file) prevent loading
+-		     a different build of a library with accidentally the
+-		     same SO_NAME.
 -
--		   It suppresses bogus backtraces (and prints "??" there
--		   instead) if the on-disk files no longer match the
--		   running program version.  */
+-		     It suppresses bogus backtraces (and prints "??" there
+-		     instead) if the on-disk files no longer match the
+-		     running program version.  */
 -
--		if (current_program_space->symfile_object_file != NULL
--		    && (current_program_space->symfile_object_file->flags
--			& OBJF_BUILD_ID_CORE_LOADED) != 0)
--		  newobj->so_name[0] = 0;
--	      }
-+	      debug_print_missing (newobj->so_name, build_id_filename);
+-		  if (current_program_space->symfile_object_file != NULL
+-		      && (current_program_space->symfile_object_file->flags
+-			  & OBJF_BUILD_ID_CORE_LOADED) != 0)
+-		    name = make_unique_xstrdup ("");
+-		}
++		debug_print_missing (name.get (), build_id_filename);
  
- 	    xfree (build_id_filename);
- 	    xfree (build_id);
+ 	      xfree (build_id_filename);
+ 	      xfree (build_id);
 diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c
 new file mode 100644
 --- /dev/null
@@ -130,7 +155,7 @@ diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp b/gdb/t
 new file mode 100644
 --- /dev/null
 +++ b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp
-@@ -0,0 +1,105 @@
+@@ -0,0 +1,104 @@
 +# Copyright 2016 Free Software Foundation, Inc.
 +
 +# This program is free software; you can redistribute it and/or modify
@@ -146,9 +171,7 @@ new file mode 100644
 +# You should have received a copy of the GNU General Public License
 +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 +
-+if {[skip_shlib_tests]} {
-+    return 0
-+}
++require allow_shlib_tests
 +
 +set testfile "gcore-buildid-exec-but-not-solib"
 +set srcmainfile ${testfile}-main.c
@@ -226,7 +249,8 @@ new file mode 100644
 +remote_exec build "ln -s /lib64     ${debugdir}/"
 +# /usr is not needed, all the libs are in /lib64: libm.so.6 libc.so.6 ld-linux-x86-64.so.2
 +
-+gdb_test "set solib-absolute-prefix $debugdir"
++gdb_test_no_output "set solib-absolute-prefix $debugdir" \
++    "set solib-absolute-prefix"
 +
 +gdb_test_no_output "set debug-file-directory $debugdir" "set debug-file-directory"
 +
diff --git a/gdb-6.6-buildid-locate.patch b/gdb-6.6-buildid-locate.patch
index 1350051..d407b43 100644
--- a/gdb-6.6-buildid-locate.patch
+++ b/gdb-6.6-buildid-locate.patch
@@ -6,34 +6,10 @@ Subject: gdb-6.6-buildid-locate.patch
 ;; New locating of the matching binaries from the pure core file (build-id).
 ;;=push+jan
 
-diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
---- a/bfd/libbfd-in.h
-+++ b/bfd/libbfd-in.h
-@@ -110,7 +110,7 @@ static inline char *
- bfd_strdup (const char *str)
- {
-   size_t len = strlen (str) + 1;
--  char *buf = bfd_malloc (len);
-+  char *buf = (char *) bfd_malloc (len);
-   if (buf != NULL)
-     memcpy (buf, str, len);
-   return buf;
-diff --git a/bfd/libbfd.h b/bfd/libbfd.h
---- a/bfd/libbfd.h
-+++ b/bfd/libbfd.h
-@@ -116,7 +116,7 @@ static inline char *
- bfd_strdup (const char *str)
- {
-   size_t len = strlen (str) + 1;
--  char *buf = bfd_malloc (len);
-+  char *buf = (char *) bfd_malloc (len);
-   if (buf != NULL)
-     memcpy (buf, str, len);
-   return buf;
 diff --git a/gdb/build-id.c b/gdb/build-id.c
 --- a/gdb/build-id.c
 +++ b/gdb/build-id.c
-@@ -24,14 +24,72 @@
+@@ -23,9 +23,67 @@
  #include "gdbsupport/gdb_vecs.h"
  #include "symfile.h"
  #include "objfiles.h"
@@ -44,8 +20,8 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +#include "elf/internal.h"
  #include "filenames.h"
 +#include "gdb_bfd.h"
-+#include "gdbcmd.h"
  #include "gdbcore.h"
++#include "cli/cli-cmds.h"
  #include "cli/cli-style.h"
 +#include "inferior.h"
 +#include "objfiles.h"
@@ -101,13 +77,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
  
  /* See build-id.h.  */
  
- const struct bfd_build_id *
--build_id_bfd_get (bfd *abfd)
-+build_id_bfd_shdr_get (bfd *abfd)
- {
-   /* Dynamic objfiles such as ones created by JIT reader API
-      have no underlying bfd structure (that is, objfile->obfd
-@@ -50,6 +108,348 @@ build_id_bfd_get (bfd *abfd)
+@@ -49,6 +107,349 @@ build_id_bfd_get (bfd *abfd)
    return NULL;
  }
  
@@ -416,12 +386,13 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +  bfd_vma loadbase = 0;
 +  unsigned e_phnum = 0;
 +
-+  if (core_bfd == NULL)
++  if (current_program_space->core_bfd () == NULL)
 +    return NULL;
 +
 +  build_id_addr = addr;
 +  gdb_assert (build_id_addr_sect == NULL);
-+  bfd_map_over_sections (core_bfd, build_id_addr_candidate, NULL);
++  bfd_map_over_sections (current_program_space->core_bfd (),
++			 build_id_addr_candidate, NULL);
 +
 +  /* Sections are sorted in the high-to-low VMAs order.
 +     Stop the search on the first ELF header we find.
@@ -430,7 +401,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +  for (candidate = build_id_addr_sect; candidate != NULL;
 +       candidate = candidate->next)
 +    {
-+      i_phdr = elf_get_phdr (core_bfd,
++      i_phdr = elf_get_phdr (current_program_space->core_bfd (),
 +			     bfd_section_vma (candidate->sect),
 +			     &e_phnum, &loadbase);
 +      if (i_phdr != NULL)
@@ -439,7 +410,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +
 +  if (i_phdr != NULL)
 +    {
-+      retval = build_id_phdr_get (core_bfd, loadbase, e_phnum, i_phdr);
++      retval = build_id_phdr_get (current_program_space->core_bfd (), loadbase, e_phnum, i_phdr);
 +      xfree (i_phdr);
 +    }
 +
@@ -456,16 +427,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
  /* See build-id.h.  */
  
  int
-@@ -58,7 +458,7 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
-   const struct bfd_build_id *found;
-   int retval = 0;
- 
--  found = build_id_bfd_get (abfd);
-+  found = build_id_bfd_shdr_get (abfd);
- 
-   if (found == NULL)
-     warning (_("File \"%s\" has no build-id, file skipped"),
-@@ -73,63 +473,166 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
+@@ -73,63 +474,166 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
    return retval;
  }
  
@@ -527,7 +489,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 -  /* lrealpath() is expensive even for the usually non-existent files.  */
 -  gdb::unique_xmalloc_ptr<char> filename_holder;
 -  const char *filename = nullptr;
--  if (startswith (link, TARGET_SYSROOT_PREFIX))
+-  if (is_target_filename (link))
 -    filename = link.c_str ();
 -  else if (access (link.c_str (), F_OK) == 0)
 +  for (unsigned seqno = 0;; seqno++)
@@ -592,13 +554,13 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +
 +      /* We expect to be silent on the non-existing files.  */
 +      gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename, gnutarget);
-+
+ 
+-      return {};
 +      if (debug_bfd == NULL)
 +	{
 +	  if (separate_debug_file_debug)
 +	    gdb_printf (gdb_stdlog, _(" no, unable to open.\n"));
- 
--      return {};
++
 +	  continue;
 +	}
 +
@@ -622,6 +584,8 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
      {
        if (separate_debug_file_debug)
 -	gdb_printf (gdb_stdlog, _(" no, build-id does not match.\n"));
+-
+-      return {};
 +	gdb_printf (gdb_stdlog, _(" yes!\n"));
 +    }
 +  else
@@ -629,8 +593,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +      /* If none of the real files is found report as missing file
 +	 always the non-.%u-suffixed file.  */
 +      std::string link0 = orig_link;
- 
--      return {};
++
 +      /* 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  */
@@ -665,7 +628,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
  }
  
  /* Common code for finding BFDs of a given build-id.  This function
-@@ -138,7 +641,7 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len,
+@@ -138,7 +642,7 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len,
  
  static gdb_bfd_ref_ptr
  build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
@@ -674,7 +637,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
  {
    /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
       cause "/.build-id/..." lookups.  */
-@@ -161,16 +664,17 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
+@@ -161,16 +665,17 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
        if (size > 0)
  	{
  	  size--;
@@ -695,7 +658,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
        if (debug_bfd != NULL)
  	return debug_bfd;
  
-@@ -181,7 +685,7 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
+@@ -181,7 +686,7 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
        if (!gdb_sysroot.empty ())
  	{
  	  link = gdb_sysroot + link;
@@ -704,7 +667,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
  	  if (debug_bfd != NULL)
  	    return debug_bfd;
  	}
-@@ -190,31 +694,663 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
+@@ -190,20 +695,178 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
    return {};
  }
  
@@ -722,446 +685,6 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +  return result;
 +}
 +
-+void debug_flush_missing (void);
-+
-+#ifdef HAVE_LIBRPM
-+
-+#include <rpm/rpmlib.h>
-+#include <rpm/rpmts.h>
-+#include <rpm/rpmdb.h>
-+#include <rpm/header.h>
-+#ifdef DLOPEN_LIBRPM
-+#include <dlfcn.h>
-+#endif
-+
-+/* Workarodun https://bugzilla.redhat.com/show_bug.cgi?id=643031
-+   librpm must not exit() an application on SIGINT
-+
-+   Enable or disable a signal handler.  SIGNUM: signal to enable (or disable
-+   if negative).  HANDLER: sa_sigaction handler (or NULL to use
-+   rpmsqHandler()).  Returns: no. of refs, -1 on error.  */
-+extern int rpmsqEnable (int signum, /* rpmsqAction_t handler */ void *handler);
-+int
-+rpmsqEnable (int signum, /* rpmsqAction_t handler */ void *handler)
-+{
-+  return 0;
-+}
-+
-+/* This MISSING_RPM_HASH tracker is used to collect all the missing rpm files
-+   and avoid their duplicities during a single inferior run.  */
-+
-+static struct htab *missing_rpm_hash;
-+
-+/* This MISSING_RPM_LIST tracker is used to collect and print as a single line
-+   all the rpms right before the nearest GDB prompt.  It gets cleared after
-+   each such print (it is questionable if we should clear it after the print).
-+   */
-+
-+struct missing_rpm
-+  {
-+    struct missing_rpm *next;
-+    char rpm[1];
-+  };
-+static struct missing_rpm *missing_rpm_list;
-+static int missing_rpm_list_entries;
-+
-+/* Returns the count of newly added rpms.  */
-+
-+static int
-+#ifndef GDB_INDEX_VERIFY_VENDOR
-+missing_rpm_enlist (const char *filename)
-+#else
-+missing_rpm_enlist_1 (const char *filename, int verify_vendor)
-+#endif
-+{
-+  static int rpm_init_done = 0;
-+  rpmts ts;
-+  rpmdbMatchIterator mi;
-+  int count = 0;
-+
-+#ifdef DLOPEN_LIBRPM
-+  /* Duplicate here the declarations to verify they match.  The same sanity
-+     check is present also in `configure.ac'.  */
-+  extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
-+  static char *(*headerFormat_p) (Header h, const char * fmt, errmsg_t *errmsg);
-+  extern int rpmReadConfigFiles(const char * file, const char * target);
-+  static int (*rpmReadConfigFiles_p) (const char * file, const char * target);
-+  extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
-+  static rpmdbMatchIterator (*rpmdbFreeIterator_p) (rpmdbMatchIterator mi);
-+  extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
-+  static Header (*rpmdbNextIterator_p) (rpmdbMatchIterator mi);
-+  extern rpmts rpmtsCreate(void);
-+  static rpmts (*rpmtsCreate_p) (void);
-+  extern rpmts rpmtsFree(rpmts ts);
-+  static rpmts (*rpmtsFree_p) (rpmts ts);
-+  extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
-+                                              const void * keyp, size_t keylen);
-+  static rpmdbMatchIterator (*rpmtsInitIterator_p) (const rpmts ts,
-+						    rpmTag rpmtag,
-+						    const void *keyp,
-+						    size_t keylen);
-+#else	/* !DLOPEN_LIBRPM */
-+# define headerFormat_p headerFormat
-+# define rpmReadConfigFiles_p rpmReadConfigFiles
-+# define rpmdbFreeIterator_p rpmdbFreeIterator
-+# define rpmdbNextIterator_p rpmdbNextIterator
-+# define rpmtsCreate_p rpmtsCreate
-+# define rpmtsFree_p rpmtsFree
-+# define rpmtsInitIterator_p rpmtsInitIterator
-+#endif	/* !DLOPEN_LIBRPM */
-+
-+  gdb_assert (filename != NULL);
-+
-+  if (strcmp (filename, BUILD_ID_MAIN_EXECUTABLE_FILENAME) == 0)
-+    return 0;
-+
-+  if (is_target_filename (filename))
-+    return 0;
-+
-+  if (filename[0] != '/')
-+    {
-+      warning (_("Ignoring non-absolute filename: <%s>"), filename);
-+      return 0;
-+    }
-+
-+  if (!rpm_init_done)
-+    {
-+      static int init_tried;
-+
-+      /* Already failed the initialization before?  */
-+      if (init_tried)
-+        return 0;
-+      init_tried = 1;
-+
-+#ifdef DLOPEN_LIBRPM
-+      {
-+	void *h;
-+
-+	h = dlopen (DLOPEN_LIBRPM, RTLD_LAZY);
-+	if (!h)
-+	  {
-+	    warning (_("Unable to open \"%s\" (%s), "
-+		      "missing debuginfos notifications will not be displayed"),
-+		     DLOPEN_LIBRPM, dlerror ());
-+	    return 0;
-+	  }
-+
-+	if (!((headerFormat_p = (char *(*) (Header h, const char * fmt, errmsg_t *errmsg)) dlsym (h, "headerFormat"))
-+	      && (rpmReadConfigFiles_p = (int (*) (const char * file, const char * target)) dlsym (h, "rpmReadConfigFiles"))
-+	      && (rpmdbFreeIterator_p = (rpmdbMatchIterator (*) (rpmdbMatchIterator mi)) dlsym (h, "rpmdbFreeIterator"))
-+	      && (rpmdbNextIterator_p = (Header (*) (rpmdbMatchIterator mi)) dlsym (h, "rpmdbNextIterator"))
-+	      && (rpmtsCreate_p = (rpmts (*) (void)) dlsym (h, "rpmtsCreate"))
-+	      && (rpmtsFree_p = (rpmts (*) (rpmts ts)) dlsym (h, "rpmtsFree"))
-+	      && (rpmtsInitIterator_p = (rpmdbMatchIterator (*) (const rpmts ts, rpmTag rpmtag, const void *keyp, size_t keylen)) dlsym (h, "rpmtsInitIterator"))))
-+	  {
-+	    warning (_("Opened library \"%s\" is incompatible (%s), "
-+		      "missing debuginfos notifications will not be displayed"),
-+		     DLOPEN_LIBRPM, dlerror ());
-+	    if (dlclose (h))
-+	      warning (_("Error closing library \"%s\": %s\n"), DLOPEN_LIBRPM,
-+		       dlerror ());
-+	    return 0;
-+	  }
-+      }
-+#endif	/* DLOPEN_LIBRPM */
-+
-+      if (rpmReadConfigFiles_p (NULL, NULL) != 0)
-+	{
-+	  warning (_("Error reading the rpm configuration files"));
-+	  return 0;
-+	}
-+
-+      rpm_init_done = 1;
-+    }
-+
-+  ts = rpmtsCreate_p ();
-+
-+  mi = rpmtsInitIterator_p (ts, RPMTAG_BASENAMES, filename, 0);
-+  if (mi != NULL)
-+    {
-+#ifndef GDB_INDEX_VERIFY_VENDOR
-+      for (;;)
-+#else
-+      if (!verify_vendor) for (;;)
-+#endif
-+	{
-+	  Header h;
-+	  char *debuginfo, **slot, *s, *s2;
-+	  errmsg_t err;
-+	  size_t srcrpmlen = sizeof (".src.rpm") - 1;
-+	  size_t debuginfolen = sizeof ("-debuginfo") - 1;
-+	  rpmdbMatchIterator mi_debuginfo;
-+
-+	  h = rpmdbNextIterator_p (mi);
-+	  if (h == NULL)
-+	    break;
-+
-+	  /* Verify the debuginfo file is not already installed.  */
-+
-+	  debuginfo = headerFormat_p (h, "%{sourcerpm}-debuginfo.%{arch}",
-+				      &err);
-+	  if (!debuginfo)
-+	    {
-+	      warning (_("Error querying the rpm file `%s': %s"), filename,
-+	               err);
-+	      continue;
-+	    }
-+	  /* s = `.src.rpm-debuginfo.%{arch}' */
-+	  s = strrchr (debuginfo, '-') - srcrpmlen;
-+	  s2 = NULL;
-+	  if (s > debuginfo && memcmp (s, ".src.rpm", srcrpmlen) == 0)
-+	    {
-+	      /* s2 = `-%{release}.src.rpm-debuginfo.%{arch}' */
-+	      s2 = (char *) memrchr (debuginfo, '-', s - debuginfo);
-+	    }
-+	  if (s2)
-+	    {
-+	      /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */
-+	      s2 = (char *) memrchr (debuginfo, '-', s2 - debuginfo);
-+	    }
-+	  if (!s2)
-+	    {
-+	      warning (_("Error querying the rpm file `%s': %s"), filename,
-+	               debuginfo);
-+	      xfree (debuginfo);
-+	      continue;
-+	    }
-+	  /* s = `.src.rpm-debuginfo.%{arch}' */
-+	  /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */
-+	  memmove (s2 + debuginfolen, s2, s - s2);
-+	  memcpy (s2, "-debuginfo", debuginfolen);
-+	  /* s = `XXXX.%{arch}' */
-+	  /* strlen ("XXXX") == srcrpmlen + debuginfolen */
-+	  /* s2 = `-debuginfo-%{version}-%{release}XX.%{arch}' */
-+	  /* strlen ("XX") == srcrpmlen */
-+	  memmove (s + debuginfolen, s + srcrpmlen + debuginfolen,
-+		   strlen (s + srcrpmlen + debuginfolen) + 1);
-+	  /* s = `-debuginfo-%{version}-%{release}.%{arch}' */
-+
-+	  /* RPMDBI_PACKAGES requires keylen == sizeof (int).  */
-+	  /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel().  */
-+	  mi_debuginfo = rpmtsInitIterator_p (ts, (rpmTag) RPMDBI_LABEL, debuginfo, 0);
-+	  xfree (debuginfo);
-+	  if (mi_debuginfo)
-+	    {
-+	      rpmdbFreeIterator_p (mi_debuginfo);
-+	      count = 0;
-+	      break;
-+	    }
-+
-+	  /* The allocated memory gets utilized below for MISSING_RPM_HASH.  */
-+	  debuginfo = headerFormat_p (h,
-+				      "%{name}-%{version}-%{release}.%{arch}",
-+				      &err);
-+	  if (!debuginfo)
-+	    {
-+	      warning (_("Error querying the rpm file `%s': %s"), filename,
-+	               err);
-+	      continue;
-+	    }
-+
-+	  /* Base package name for `debuginfo-install'.  We do not use the
-+	     `yum' command directly as the line
-+		 yum --enablerepo='*debug*' install NAME-debuginfo.ARCH
-+	     would be more complicated than just:
-+		 debuginfo-install NAME-VERSION-RELEASE.ARCH
-+	     Do not supply the rpm base name (derived from .src.rpm name) as
-+	     debuginfo-install is unable to install the debuginfo package if
-+	     the base name PKG binary rpm is not installed while for example
-+	     PKG-libs would be installed (RH Bug 467901).
-+	     FUTURE: After multiple debuginfo versions simultaneously installed
-+	     get supported the support for the VERSION-RELEASE tags handling
-+	     may need an update.  */
-+
-+	  if (missing_rpm_hash == NULL)
-+	    {
-+	      /* DEL_F is passed NULL as MISSING_RPM_LIST's HTAB_DELETE
-+		 should not deallocate the entries.  */
-+
-+	      missing_rpm_hash = htab_create_alloc (64, htab_hash_string,
-+			       (int (*) (const void *, const void *)) streq,
-+						    NULL, xcalloc, xfree);
-+	    }
-+	  slot = (char **) htab_find_slot (missing_rpm_hash, debuginfo, INSERT);
-+	  /* XCALLOC never returns NULL.  */
-+	  gdb_assert (slot != NULL);
-+	  if (*slot == NULL)
-+	    {
-+	      struct missing_rpm *missing_rpm;
-+
-+	      *slot = debuginfo;
-+
-+	      missing_rpm = (struct missing_rpm *) xmalloc (sizeof (*missing_rpm) + strlen (debuginfo));
-+	      strcpy (missing_rpm->rpm, debuginfo);
-+	      missing_rpm->next = missing_rpm_list;
-+	      missing_rpm_list = missing_rpm;
-+	      missing_rpm_list_entries++;
-+	    }
-+	  else
-+	    xfree (debuginfo);
-+	  count++;
-+	}
-+#ifdef GDB_INDEX_VERIFY_VENDOR
-+      else /* verify_vendor */
-+	{
-+	  int vendor_pass = 0, vendor_fail = 0;
-+
-+	  for (;;)
-+	    {
-+	      Header h;
-+	      errmsg_t err;
-+	      char *vendor;
-+
-+	      h = rpmdbNextIterator_p (mi);
-+	      if (h == NULL)
-+		break;
-+
-+	      vendor = headerFormat_p (h, "%{vendor}", &err);
-+	      if (!vendor)
-+		{
-+		  warning (_("Error querying the rpm file `%s': %s"), filename,
-+			   err);
-+		  continue;
-+		}
-+	      if (strcmp (vendor, "Red Hat, Inc.") == 0)
-+		vendor_pass = 1;
-+	      else
-+		vendor_fail = 1;
-+	      xfree (vendor);
-+	    }
-+	  count = vendor_pass != 0 && vendor_fail == 0;
-+	}
-+#endif
-+
-+      rpmdbFreeIterator_p (mi);
-+    }
-+
-+  rpmtsFree_p (ts);
-+
-+  return count;
-+}
-+
-+#ifdef GDB_INDEX_VERIFY_VENDOR
-+missing_rpm_enlist (const char *filename)
-+{
-+  return missing_rpm_enlist_1 (filename, 0);
-+}
-+
-+extern int rpm_verify_vendor (const char *filename);
-+int
-+rpm_verify_vendor (const char *filename)
-+{
-+  return missing_rpm_enlist_1 (filename, 1);
-+}
-+#endif
-+
-+static bool
-+missing_rpm_list_compar (const char *ap, const char *bp)
-+{
-+  return strcoll (ap, bp) < 0;
-+}
-+
-+/* It returns a NULL-terminated array of strings needing to be FREEd.  It may
-+   also return only NULL.  */
-+
-+static void
-+missing_rpm_list_print (void)
-+{
-+  struct missing_rpm *list_iter;
-+
-+  if (missing_rpm_list_entries == 0)
-+    return;
-+
-+  std::vector<const char *> array (missing_rpm_list_entries);
-+  size_t idx = 0;
-+
-+  for (list_iter = missing_rpm_list; list_iter != NULL;
-+       list_iter = list_iter->next)
-+    {
-+      array[idx++] = list_iter->rpm;
-+    }
-+  gdb_assert (idx == missing_rpm_list_entries);
-+
-+  std::sort (array.begin (), array.end (), missing_rpm_list_compar);
-+
-+  /* We zero out the number of missing RPMs here because of a nasty
-+     bug (see RHBZ 1801974).
-+
-+     When we call 'puts_unfiltered' below, if pagination is on and if
-+     the number of missing RPMs is big enough to trigger pagination,
-+     we will end up in an infinite recursion.  The call chain looks
-+     like this:
-+
-+     missing_rpm_list_print -> puts_unfiltered -> fputs_maybe_filtered
-+     -> prompt_for_continue -> display_gdb_prompt ->
-+     debug_flush_missing -> missing_rpm_list_print ...
-+
-+     For this reason, we make sure MISSING_RPM_LIST_ENTRIES is zero
-+     *before* calling any print function.
-+     
-+     Note: kevinb/2023-02-22: The code below used to call
-+     puts_unfiltered() and printf_unfiltered(), but calls to these
-+     functions have been replaced by calls to gdb_printf().  The call
-+     chain shown above (probably) used to be the case at one time and
-+     hopefully something similar is still the case now that
-+     gdb_printf() is being used instead.  */
-+  missing_rpm_list_entries = 0;
-+
-+  gdb_printf (_("Missing separate debuginfos, use: %s"),
-+#ifdef DNF_DEBUGINFO_INSTALL
-+		     "dnf "
-+#endif
-+		     "debuginfo-install");
-+  for (const char *el : array)
-+    {
-+      gdb_printf (" %s", el);
-+    }
-+  gdb_printf ("\n");
-+
-+  while (missing_rpm_list != NULL)
-+    {
-+      list_iter = missing_rpm_list;
-+      missing_rpm_list = list_iter->next;
-+      xfree (list_iter);
-+    }
-+}
-+
-+static void
-+missing_rpm_change (void)
-+{
-+  debug_flush_missing ();
-+
-+  gdb_assert (missing_rpm_list == NULL);
-+  if (missing_rpm_hash != NULL)
-+    {
-+      htab_delete (missing_rpm_hash);
-+      missing_rpm_hash = NULL;
-+    }
-+}
-+
-+enum missing_exec
-+  {
-+    /* Init state.  EXEC_BFD also still could be NULL.  */
-+    MISSING_EXEC_NOT_TRIED,
-+    /* We saw a non-NULL EXEC_BFD but RPM has no info about it.  */
-+    MISSING_EXEC_NOT_FOUND,
-+    /* We found EXEC_BFD by RPM and we either have its symbols (either embedded
-+       or separate) or the main executable's RPM is now contained in
-+       MISSING_RPM_HASH.  */
-+    MISSING_EXEC_ENLISTED
-+  };
-+static enum missing_exec missing_exec = MISSING_EXEC_NOT_TRIED;
-+
-+#endif	/* HAVE_LIBRPM */
-+
-+void
-+debug_flush_missing (void)
-+{
-+#ifdef HAVE_LIBRPM
-+  missing_rpm_list_print ();
-+#endif
-+}
-+
 +/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages
 +     yum --enablerepo='*debug*' install ...
 +   avoidance.  */
@@ -1217,17 +740,11 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +      /* All their memory came just from missing_filepair_OBSTACK.  */
 +      missing_filepair_hash = NULL;
 +    }
-+#ifdef HAVE_LIBRPM
-+  missing_exec = MISSING_EXEC_NOT_TRIED;
-+#endif
 +}
 +
 +static void
 +debug_print_executable_changed (struct program_space *pspace, bool reload_p)
 +{
-+#ifdef HAVE_LIBRPM
-+  missing_rpm_change ();
-+#endif
 +  missing_filepair_change ();
 +}
 +
@@ -1294,55 +811,30 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 +
 +  *slot = missing_filepair;
 +
-+#ifdef HAVE_LIBRPM
-+  if (missing_exec == MISSING_EXEC_NOT_TRIED)
-+    {
-+      const char *execfilename = get_exec_file (0);
-+
-+      if (execfilename != NULL)
-+	{
-+	  if (missing_rpm_enlist (execfilename) == 0)
-+	    missing_exec = MISSING_EXEC_NOT_FOUND;
-+	  else
-+	    missing_exec = MISSING_EXEC_ENLISTED;
-+	}
-+    }
-+  if (missing_exec != MISSING_EXEC_ENLISTED)
-+    if ((binary[0] == 0 || missing_rpm_enlist (binary) == 0)
-+	&& (debug == NULL || missing_rpm_enlist (debug) == 0))
-+#endif	/* HAVE_LIBRPM */
-+      {
-+	/* We do not collect and flush these messages as each such message
-+	   already requires its own separate lines.  */
++  /* We do not collect and flush these messages as each such message
++     already requires its own separate lines.  */
 +
-+	gdb_printf (gdb_stdlog,
-+		    _("Missing separate debuginfo for %s.\n"), binary);
-+	if (debug != NULL)
-+	{
-+	  if (access (debug, F_OK) == 0) {
-+	    gdb_printf (gdb_stdlog, _("Try: %s %s\n"),
++  gdb_printf (gdb_stdlog,
++	      _("Missing separate debuginfo for %s.\n"), binary);
++  if (debug != NULL)
++    {
++      gdb_printf (gdb_stdlog, _("Try: %s %s\n"),
 +#ifdef DNF_DEBUGINFO_INSTALL
-+			"dnf"
++		  "dnf"
 +#else
-+			"yum"
++		  "yum"
 +#endif
-+			" --enablerepo='*debug*' install", debug);
-+	  } else
-+	    gdb_printf (gdb_stdlog, _("The debuginfo package for this file is probably broken.\n"));
-+	}
-+      }
++		  " --enablerepo='*debug*' install", debug);
++    }
 +}
 +
  /* See build-id.h.  */
  
  gdb_bfd_ref_ptr
--build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
-+build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id,
-+		       char **link_return)
+ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
  {
 -  return build_id_to_bfd_suffix (build_id_len, build_id, ".debug");
-+  return build_id_to_bfd_suffix (build_id_len, build_id, ".debug",
-+				 link_return);
++  return build_id_to_bfd_suffix (build_id_len, build_id, ".debug", nullptr);
  }
  
  /* See build-id.h.  */
@@ -1357,47 +849,15 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
  }
  
  /* See build-id.h.  */
+@@ -224,6 +887,7 @@ find_separate_debug_file_by_buildid (struct objfile *objfile,
  
- std::string
- find_separate_debug_file_by_buildid (struct objfile *objfile,
--				     deferred_warnings *warnings)
-+				     deferred_warnings *warnings,
-+				     gdb::unique_xmalloc_ptr<char> *build_id_filename_return)
- {
-   const struct bfd_build_id *build_id;
- 
--  build_id = build_id_bfd_get (objfile->obfd.get ());
-+  if (build_id_filename_return)
-+    *build_id_filename_return = NULL;
-+
-+  build_id = build_id_bfd_shdr_get (objfile->obfd.get ());
-   if (build_id != NULL)
-     {
-       if (separate_debug_file_debug)
-@@ -222,8 +1358,21 @@ find_separate_debug_file_by_buildid (struct objfile *objfile,
- 		    _("\nLooking for separate debug info (build-id) for "
- 		      "%s\n"), objfile_name (objfile));
- 
-+      char *build_id_filename_cstr = NULL;
        gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size,
--						   build_id->data));
-+						   build_id->data,
-+	      (!build_id_filename_return ? NULL : &build_id_filename_cstr)));
-+      if (build_id_filename_return)
-+	{
-+	  if (!build_id_filename_cstr)
-+	    gdb_assert (!*build_id_filename_return);
-+	  else
-+	    {
-+	      *build_id_filename_return = gdb::unique_xmalloc_ptr<char> (build_id_filename_cstr);
-+	      build_id_filename_cstr = NULL;
-+	    }
-+	}
+ 						   build_id->data));
 +
        /* Prevent looping on a stripped .debug file.  */
        if (abfd != NULL
  	  && filename_cmp (bfd_get_filename (abfd.get ()),
-@@ -243,3 +1392,22 @@ find_separate_debug_file_by_buildid (struct objfile *objfile,
+@@ -243,3 +907,22 @@ find_separate_debug_file_by_buildid (struct objfile *objfile,
  
    return std::string ();
  }
@@ -1423,30 +883,13 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
 diff --git a/gdb/build-id.h b/gdb/build-id.h
 --- a/gdb/build-id.h
 +++ b/gdb/build-id.h
-@@ -23,9 +23,10 @@
- #include "gdb_bfd.h"
- #include "gdbsupport/rsp-low.h"
- 
--/* Locate NT_GNU_BUILD_ID from ABFD and return its content.  */
-+/* Separate debuginfo files have corrupted PHDR but SHDR is correct there.
-+   Locate NT_GNU_BUILD_ID from ABFD and return its content.  */
- 
--extern const struct bfd_build_id *build_id_bfd_get (bfd *abfd);
-+extern const struct bfd_build_id *build_id_bfd_shdr_get (bfd *abfd);
- 
- /* Return true if ABFD has NT_GNU_BUILD_ID matching the CHECK value.
-    Otherwise, issue a warning and return false.  */
-@@ -38,14 +39,19 @@ extern int build_id_verify (bfd *abfd,
-    can be found, return NULL.  */
- 
+@@ -40,12 +40,16 @@ extern int build_id_verify (bfd *abfd,
  extern gdb_bfd_ref_ptr build_id_to_debug_bfd (size_t build_id_len,
--					      const bfd_byte *build_id);
-+					      const bfd_byte *build_id,
-+					      char **link_return = NULL);
-+
+ 					      const bfd_byte *build_id);
+ 
 +extern char *build_id_to_filename (const struct bfd_build_id *build_id,
 +				   char **link_return);
- 
++
  /* Find and open a BFD for an executable file given a build-id.  If no BFD
     can be found, return NULL.  The returned reference to the BFD must be
     released by the caller.  */
@@ -1458,43 +901,20 @@ diff --git a/gdb/build-id.h b/gdb/build-id.h
  
  /* Find the separate debug file for OBJFILE, by using the build-id
     associated with OBJFILE's BFD.  If successful, returns the file name for the
-@@ -58,7 +64,8 @@ extern gdb_bfd_ref_ptr build_id_to_exec_bfd (size_t build_id_len,
-    will be printed.  */
- 
- extern std::string find_separate_debug_file_by_buildid
--  (struct objfile *objfile, deferred_warnings *warnings);
-+  (struct objfile *objfile, deferred_warnings *warnings,
-+   gdb::unique_xmalloc_ptr<char> *build_id_filename_return);
- 
- /* Return an hex-string representation of BUILD_ID.  */
- 
-diff --git a/gdb/coffread.c b/gdb/coffread.c
---- a/gdb/coffread.c
-+++ b/gdb/coffread.c
-@@ -729,7 +729,7 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
-     {
-       deferred_warnings warnings;
-       std::string debugfile
--	= find_separate_debug_file_by_buildid (objfile, &warnings);
-+	= find_separate_debug_file_by_buildid (objfile, &warnings, NULL);
- 
-       if (debugfile.empty ())
- 	debugfile
 diff --git a/gdb/corelow.c b/gdb/corelow.c
 --- a/gdb/corelow.c
 +++ b/gdb/corelow.c
-@@ -22,6 +22,10 @@
+@@ -21,6 +21,9 @@
  #include <signal.h>
  #include <fcntl.h>
  #include "frame.h"
 +#include "auxv.h"
 +#include "build-id.h"
 +#include "elf/common.h"
-+#include "gdbcmd.h"
  #include "inferior.h"
  #include "infrun.h"
  #include "symtab.h"
-@@ -380,6 +384,8 @@ add_to_thread_list (asection *asect, asection *reg_sect, inferior *inf)
+@@ -383,6 +386,8 @@ add_to_thread_list (asection *asect, asection *reg_sect, inferior *inf)
      switch_to_thread (thr);			/* Yes, make it current.  */
  }
  
@@ -1503,12 +923,7 @@ diff --git a/gdb/corelow.c b/gdb/corelow.c
  /* Issue a message saying we have no core to debug, if FROM_TTY.  */
  
  static void
-@@ -563,12 +569,14 @@ rename_vmcore_idle_reg_sections (bfd *abfd, inferior *inf)
- static void
- locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
- {
--  const bfd_build_id *build_id = build_id_bfd_get (abfd);
-+  const bfd_build_id *build_id = build_id_bfd_shdr_get (abfd);
+@@ -570,8 +575,10 @@ locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
    if (build_id == nullptr)
      return;
  
@@ -1520,7 +935,7 @@ diff --git a/gdb/corelow.c b/gdb/corelow.c
  
    if (execbfd == nullptr)
      {
-@@ -596,7 +604,12 @@ locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
+@@ -599,7 +606,12 @@ locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
        exec_file_attach (bfd_get_filename (execbfd.get ()), from_tty);
        symbol_file_add_main (bfd_get_filename (execbfd.get ()),
  			    symfile_add_flag (from_tty ? SYMFILE_VERBOSE : 0));
@@ -1533,7 +948,7 @@ diff --git a/gdb/corelow.c b/gdb/corelow.c
  }
  
  /* See gdbcore.h.  */
-@@ -1506,4 +1519,11 @@ _initialize_corelow ()
+@@ -1524,4 +1536,11 @@ _initialize_corelow ()
  	   maintenance_print_core_file_backed_mappings,
  	   _("Print core file's file-backed mappings."),
  	   &maintenanceprintlist);
@@ -1548,7 +963,7 @@ diff --git a/gdb/corelow.c b/gdb/corelow.c
 diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
 --- a/gdb/doc/gdb.texinfo
 +++ b/gdb/doc/gdb.texinfo
-@@ -22296,6 +22296,27 @@ information files.
+@@ -22487,6 +22487,27 @@ information files.
  
  @end table
  
@@ -1576,110 +991,10 @@ diff --git a/gdb/doc/gdb.texinfo b/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
-diff --git a/gdb/dwarf2/index-cache.c b/gdb/dwarf2/index-cache.c
---- a/gdb/dwarf2/index-cache.c
-+++ b/gdb/dwarf2/index-cache.c
-@@ -96,7 +96,7 @@ index_cache_store_context::index_cache_store_context (const index_cache &ic,
-     return;
- 
-   /* Get build id of objfile.  */
--  const bfd_build_id *build_id = build_id_bfd_get (per_bfd->obfd);
-+  const bfd_build_id *build_id = build_id_bfd_shdr_get (per_bfd->obfd);
-   if (build_id == nullptr)
-     {
-       index_cache_debug ("objfile %s has no build id",
-@@ -111,7 +111,8 @@ index_cache_store_context::index_cache_store_context (const index_cache &ic,
- 
-   if (dwz != nullptr)
-     {
--      const bfd_build_id *dwz_build_id = build_id_bfd_get (dwz->dwz_bfd.get ());
-+      const bfd_build_id *dwz_build_id
-+	= build_id_bfd_shdr_get (dwz->dwz_bfd.get ());
- 
-       if (dwz_build_id == nullptr)
- 	{
-diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
---- a/gdb/dwarf2/read.c
-+++ b/gdb/dwarf2/read.c
-@@ -3355,7 +3355,7 @@ get_gdb_index_contents_from_section (objfile *obj, T *section_owner)
- static gdb::array_view<const gdb_byte>
- get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_bfd *dwarf2_per_bfd)
- {
--  const bfd_build_id *build_id = build_id_bfd_get (obj->obfd.get ());
-+  const bfd_build_id *build_id = build_id_bfd_shdr_get (obj->obfd.get ());
-   if (build_id == nullptr)
-     return {};
- 
-@@ -3368,7 +3368,7 @@ get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_bfd *dwarf2_per_bfd)
- static gdb::array_view<const gdb_byte>
- get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz)
- {
--  const bfd_build_id *build_id = build_id_bfd_get (dwz->dwz_bfd.get ());
-+  const bfd_build_id *build_id = build_id_bfd_shdr_get (dwz->dwz_bfd.get ());
-   if (build_id == nullptr)
-     return {};
- 
-diff --git a/gdb/elfread.c b/gdb/elfread.c
---- a/gdb/elfread.c
-+++ b/gdb/elfread.c
-@@ -1220,8 +1220,10 @@ elf_symfile_read_dwarf2 (struct objfile *objfile,
-     {
-       deferred_warnings warnings;
- 
-+      gdb::unique_xmalloc_ptr<char> build_id_filename;
-       std::string debugfile
--	= find_separate_debug_file_by_buildid (objfile, &warnings);
-+	= find_separate_debug_file_by_buildid (objfile, &warnings,
-+					       &build_id_filename);
- 
-       if (debugfile.empty ())
- 	debugfile = find_separate_debug_file_by_debuglink (objfile, &warnings);
-@@ -1239,7 +1241,7 @@ elf_symfile_read_dwarf2 (struct objfile *objfile,
- 	{
- 	  has_dwarf2 = false;
- 	  const struct bfd_build_id *build_id
--	    = build_id_bfd_get (objfile->obfd.get ());
-+	    = build_id_bfd_shdr_get (objfile->obfd.get ());
- 	  const char *filename = bfd_get_filename (objfile->obfd.get ());
- 
- 	  if (build_id != nullptr)
-@@ -1265,6 +1267,11 @@ elf_symfile_read_dwarf2 (struct objfile *objfile,
- 		      has_dwarf2 = true;
- 		    }
- 		}
-+		/* Check if any separate debug info has been extracted out.  */
-+		else if (bfd_get_section_by_name (objfile->obfd.get (),
-+		                                  ".gnu_debuglink")
-+			 != NULL)
-+		  debug_print_missing (objfile_name (objfile), build_id_filename.get ());
- 	    }
- 	}
-       /* If all the methods to collect the debuginfo failed, print the
-diff --git a/gdb/exec.c b/gdb/exec.c
---- a/gdb/exec.c
-+++ b/gdb/exec.c
-@@ -237,7 +237,7 @@ validate_exec_file (int from_tty)
-   current_exec_file = get_exec_file (0);
- 
-   const bfd_build_id *exec_file_build_id
--    = build_id_bfd_get (current_program_space->exec_bfd ());
-+    = build_id_bfd_shdr_get (current_program_space->exec_bfd ());
-   if (exec_file_build_id != nullptr)
-     {
-       /* Prepend the target prefix, to force gdb_bfd_open to open the
-@@ -250,7 +250,7 @@ validate_exec_file (int from_tty)
-       if (abfd != nullptr)
- 	{
- 	  const bfd_build_id *target_exec_file_build_id
--	    = build_id_bfd_get (abfd.get ());
-+	    = build_id_bfd_shdr_get (abfd.get ());
- 
- 	  if (target_exec_file_build_id != nullptr)
- 	    {
 diff --git a/gdb/objfiles.h b/gdb/objfiles.h
 --- a/gdb/objfiles.h
 +++ b/gdb/objfiles.h
-@@ -884,6 +884,10 @@ struct objfile
+@@ -877,6 +877,10 @@ struct objfile
    bool object_format_has_copy_relocs = false;
  };
  
@@ -1690,27 +1005,6 @@ diff --git a/gdb/objfiles.h b/gdb/objfiles.h
  /* A deleter for objfile.  */
  
  struct objfile_deleter
-diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
---- a/gdb/python/py-objfile.c
-+++ b/gdb/python/py-objfile.c
-@@ -158,7 +158,7 @@ objfpy_get_build_id (PyObject *self, void *closure)
- 
-   try
-     {
--      build_id = build_id_bfd_get (objfile->obfd.get ());
-+      build_id = build_id_bfd_shdr_get (objfile->obfd.get ());
-     }
-   catch (const gdb_exception &except)
-     {
-@@ -629,7 +629,7 @@ gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw)
- 	   if (obfd == nullptr)
- 	     return 0;
- 
--	   const bfd_build_id *obfd_build_id = build_id_bfd_get (obfd);
-+	   const bfd_build_id *obfd_build_id = build_id_bfd_shdr_get (obfd);
- 	   if (obfd_build_id == nullptr)
- 	     return 0;
- 
 diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
 --- a/gdb/solib-svr4.c
 +++ b/gdb/solib-svr4.c
@@ -1722,84 +1016,57 @@ diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
  
  #include <map>
  
-@@ -1318,9 +1319,51 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
+@@ -1262,6 +1263,46 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
  	  continue;
  	}
  
--      strncpy (newobj->so_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1);
--      newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
--      strcpy (newobj->so_original_name, newobj->so_name);
-+      {
-+	struct bfd_build_id *build_id;
-+
-+	strncpy (newobj->so_original_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1);
-+	newobj->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
-+	/* May get overwritten below.  */
-+	strcpy (newobj->so_name, newobj->so_original_name);
-+
-+	build_id = build_id_addr_get (((lm_info_svr4 *) newobj->lm_info)->l_ld);
-+	if (build_id != NULL)
-+	  {
-+	    char *name, *build_id_filename;
-+
-+	    /* Missing the build-id matching separate debug info file
-+	       would be handled while SO_NAME gets loaded.  */
-+	    name = build_id_to_filename (build_id, &build_id_filename);
-+	    if (name != NULL)
-+	      {
-+		strncpy (newobj->so_name, name, SO_NAME_MAX_PATH_SIZE - 1);
-+		newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
-+		xfree (name);
-+	      }
-+	    else
-+	      {
-+		debug_print_missing (newobj->so_name, build_id_filename);
-+
-+		/* In the case the main executable was found according to
-+		   its build-id (from a core file) prevent loading
-+		   a different build of a library with accidentally the
-+		   same SO_NAME.
-+
-+		   It suppresses bogus backtraces (and prints "??" there
-+		   instead) if the on-disk files no longer match the
-+		   running program version.  */
-+
-+		if (current_program_space->symfile_object_file != NULL
-+		    && (current_program_space->symfile_object_file->flags
-+			& OBJF_BUILD_ID_CORE_LOADED) != 0)
-+		  newobj->so_name[0] = 0;
-+	      }
-+
-+	    xfree (build_id_filename);
-+	    xfree (build_id);
-+	  }
-+      }
- 
++	{
++	  struct bfd_build_id *build_id;
++
++	  build_id = build_id_addr_get (li->l_ld);
++	  if (build_id != NULL)
++	    {
++	      char *bid_name, *build_id_filename;
++
++	      /* Missing the build-id matching separate debug info file
++		 would be handled while SO_NAME gets loaded.  */
++	      bid_name = build_id_to_filename (build_id, &build_id_filename);
++	      if (bid_name != NULL)
++		{
++		  name = make_unique_xstrdup (bid_name);
++		  xfree (bid_name);
++		}
++	      else
++		{
++		  debug_print_missing (name.get (), build_id_filename);
++
++		  /* In the case the main executable was found according to
++		     its build-id (from a core file) prevent loading
++		     a different build of a library with accidentally the
++		     same SO_NAME.
++
++		     It suppresses bogus backtraces (and prints "??" there
++		     instead) if the on-disk files no longer match the
++		     running program version.  */
++
++		  if (current_program_space->symfile_object_file != NULL
++		      && (current_program_space->symfile_object_file->flags
++			  & OBJF_BUILD_ID_CORE_LOADED) != 0)
++		    name = make_unique_xstrdup ("");
++		}
++
++	      xfree (build_id_filename);
++	      xfree (build_id);
++	    }
++	}
++
        /* If this entry has no name, or its name matches the name
  	 for the main executable, don't include it in the list.  */
-diff --git a/gdb/source.c b/gdb/source.c
---- a/gdb/source.c
-+++ b/gdb/source.c
-@@ -1167,7 +1167,7 @@ open_source_file (struct symtab *s)
- 	    }
- 
- 	  const struct bfd_build_id *build_id
--	    = build_id_bfd_get (ofp->obfd.get ());
-+	    = build_id_bfd_shdr_get (ofp->obfd.get ());
- 
- 	  /* Query debuginfod for the source file.  */
- 	  if (build_id != nullptr && !srcpath.empty ())
+       if (*name == '\0' || match_main (name.get ()))
 diff --git a/gdb/symfile.h b/gdb/symfile.h
 --- a/gdb/symfile.h
 +++ b/gdb/symfile.h
-@@ -357,12 +357,18 @@ bool expand_symtabs_matching
- void map_symbol_filenames (gdb::function_view<symbol_filename_ftype> fun,
- 			   bool need_fullname);
- 
-+
- /* Target-agnostic function to load the sections of an executable into memory.
- 
-    ARGS should be in the form "EXECUTABLE [OFFSET]", where OFFSET is an
+@@ -363,6 +363,11 @@ void map_symbol_filenames (gdb::function_view<symbol_filename_ftype> fun,
     optional offset to apply to each section.  */
  extern void generic_load (const char *args, int from_tty);
  
@@ -1864,10 +1131,12 @@ diff --git a/gdb/testsuite/gdb.base/gdbinit-history.exp b/gdb/testsuite/gdb.base
 diff --git a/gdb/testsuite/gdb.base/new-ui-pending-input.exp b/gdb/testsuite/gdb.base/new-ui-pending-input.exp
 --- a/gdb/testsuite/gdb.base/new-ui-pending-input.exp
 +++ b/gdb/testsuite/gdb.base/new-ui-pending-input.exp
-@@ -62,6 +62,7 @@ proc test_command_line_new_ui_pending_input {} {
+@@ -60,6 +60,9 @@ proc test_command_line_new_ui_pending_input {} {
+     set bpline [gdb_get_line_number "set breakpoint here"]
+ 
      set options ""
-     append options " -iex \"set height 0\""
-     append options " -iex \"set width 0\""
++    append options " -iex \"set height 0\""
++    append options " -iex \"set width 0\""
 +    append options " -iex \"set build-id-verbose 0\""
      append options " -iex \"new-ui console $extra_tty_name\""
      append options " -ex \"b $bpline\""
@@ -1875,7 +1144,7 @@ diff --git a/gdb/testsuite/gdb.base/new-ui-pending-input.exp b/gdb/testsuite/gdb
 diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
 --- a/gdb/testsuite/lib/gdb.exp
 +++ b/gdb/testsuite/lib/gdb.exp
-@@ -226,7 +226,8 @@ if ![info exists INTERNAL_GDBFLAGS] {
+@@ -238,7 +238,8 @@ if ![info exists INTERNAL_GDBFLAGS] {
  		   "-nx" \
  		   "-q" \
  		   {-iex "set height 0"} \
@@ -1885,7 +1154,7 @@ diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
  
      # If DEBUGINFOD_URLS is set, gdb will try to download sources and
      # debug info for f.i. system libraries.  Prevent this.
-@@ -2434,6 +2435,17 @@ proc default_gdb_start { } {
+@@ -2493,6 +2494,17 @@ proc default_gdb_start { } {
  	}
      }
  
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/gdb.git/commitdiff/4528ecde4121e96e86f0a532c3a6b9b341162e18




More information about the pld-cvs-commit mailing list