public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Kevin Buettner <kevinb@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/gdb] gdb-17.2-rebase-f44: Rebase to FSF GDB 10.1.
Date: Sun, 28 Jun 2026 00:00:05 GMT [thread overview]
Message-ID: <178260480544.1.8368842123247641320.rpms-gdb-ed8730b4d972@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/gdb
Branch : gdb-17.2-rebase-f44
Commit : ed8730b4d9720b8c71cb7de29ce2165f730955cc
Author : Kevin Buettner <kevinb@redhat.com>
Date : 2020-11-05T14:17:24-07:00
Stats : +605/-2625 in 45 file(s)
URL : https://src.fedoraproject.org/rpms/gdb/c/ed8730b4d9720b8c71cb7de29ce2165f730955cc?branch=gdb-17.2-rebase-f44
Log:
Rebase to FSF GDB 10.1.
Bump 'snapgnulib' date.
Drop gdb-rhbz1818011-bfd-gcc10-error.patch.
Drop gdb-rhbz1822715-fix-python-deprecation.patch.
Drop gdb-rhbz1829702-fix-python39.patch.
Drop gdb-rhbz1838777-debuginfod.patch.
Drop gdb-rhbz1844458-use-fputX_unfiltered.patch.
Drop gdb-rhbz1869484-deleted-working-directory.
Adjust build-id related patches.
Ajust VLA patches.
---
diff --git a/.gitignore b/.gitignore
index b83cfdf..bf9d24a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
/binutils-gdb
/gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz
-/gdb-9.2.tar.xz
/v2.0.2.tar.gz
+/gdb-10.1.tar.xz
diff --git a/_gdb.spec.Patch.include b/_gdb.spec.Patch.include
index 24289d3..7060bcd 100644
--- a/_gdb.spec.Patch.include
+++ b/_gdb.spec.Patch.include
@@ -37,10 +37,6 @@ Patch009: gdb-6.3-test-movedir-20050125.patch
#=fedoratest
Patch010: gdb-6.3-threaded-watchpoints2-20050225.patch
-# Notify observers that the inferior has been created
-#=fedoratest
-Patch011: gdb-6.3-inferior-notification-20050721.patch
-
# Verify printing of inherited members test
#=fedoratest
Patch012: gdb-6.3-inheritancetest-20050726.patch
@@ -102,10 +98,6 @@ Patch025: gdb-6.6-testsuite-timeouts.patch
#=fedoratest
Patch026: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
-# Test kernel VDSO decoding while attaching to an i386 process.
-#=fedoratest
-Patch027: gdb-6.3-attach-see-vdso-test.patch
-
# Test leftover zombie process (BZ 243845).
#=fedoratest
Patch028: gdb-6.5-bz243845-stale-testing-zombie-test.patch
@@ -143,10 +135,6 @@ Patch035: gdb-6.5-ia64-libunwind-leak-test.patch
#=fedoratest
Patch036: gdb-6.5-missed-trap-on-step-test.patch
-# Test gcore memory and time requirements for large inferiors.
-#=fedoratest
-Patch037: gdb-6.5-gcore-buffer-limit-test.patch
-
# Test GCORE for shmid 0 shared memory mappings.
#=fedoratest: But it is broken anyway, sometimes the case being tested is not reproducible.
Patch038: gdb-6.3-mapping-zero-inode-test.patch
@@ -394,24 +382,3 @@ Patch096: gdb-vla-intel-fix-print-char-array.patch
# =fedoratest
Patch097: gdb-rhbz1553104-s390x-arch12-test.patch
-# Fix int conversion error from bfd/elf.c when compiling with gcc 10
-Patch098: gdb-rhbz1818011-bfd-gcc10-error.patch
-
-# Backport fix for deprecation of PyEval_InitThreads in Python 3.9.
-Patch099: gdb-rhbz1822715-fix-python-deprecation.patch
-
-# Backport "Fix Python 3.9 related runtime problems"
-# Kevin Buettner <kevinb@redhat.com> and Keith Seitz <keiths@redhat.com>
-Patch100: gdb-rhbz1829702-fix-python39.patch
-
-# Fix fput?_unfiltered functions
-# RH BZ 1844458 (Sergio Durigan Junior and Tom Tromey)
-Patch101: gdb-rhbz1844458-use-fputX_unfiltered.patch
-
-# Backport debuginofd support.
-# (Aaron Merey, RH BZ 183877)
-Patch102: gdb-rhbz1838777-debuginfod.patch
-
-# Backport patches fixing abort when working directory is deleted.
-Patch103: gdb-rhbz1869484-deleted-working-directory
-
diff --git a/_gdb.spec.patch.include b/_gdb.spec.patch.include
index 0557da6..7880e19 100644
--- a/_gdb.spec.patch.include
+++ b/_gdb.spec.patch.include
@@ -8,7 +8,6 @@
%patch008 -p1
%patch009 -p1
%patch010 -p1
-%patch011 -p1
%patch012 -p1
%patch013 -p1
%patch014 -p1
@@ -24,7 +23,6 @@
%patch024 -p1
%patch025 -p1
%patch026 -p1
-%patch027 -p1
%patch028 -p1
%patch029 -p1
%patch030 -p1
@@ -34,7 +32,6 @@
%patch034 -p1
%patch035 -p1
%patch036 -p1
-%patch037 -p1
%patch038 -p1
%patch039 -p1
%patch040 -p1
@@ -95,9 +92,3 @@
%patch095 -p1
%patch096 -p1
%patch097 -p1
-%patch098 -p1
-%patch099 -p1
-%patch100 -p1
-%patch101 -p1
-%patch102 -p1
-%patch103 -p1
diff --git a/_git_upstream_commit b/_git_upstream_commit
index 751b241..8f2b797 100644
--- a/_git_upstream_commit
+++ b/_git_upstream_commit
@@ -1 +1 @@
-e7fe0803b6427d3906e991bbb3b7fd2f0fd05e00
+606e3fd147ed9a00df165e46f30fe5c46dcda345
diff --git a/_patch_order b/_patch_order
index 5ea9527..a45566e 100644
--- a/_patch_order
+++ b/_patch_order
@@ -95,9 +95,3 @@ gdb-rhbz1398387-tab-crash-test.patch
gdb-archer.patch
gdb-vla-intel-fix-print-char-array.patch
gdb-rhbz1553104-s390x-arch12-test.patch
-gdb-rhbz1818011-bfd-gcc10-error.patch
-gdb-rhbz1822715-fix-python-deprecation.patch
-gdb-rhbz1829702-fix-python39.patch
-gdb-rhbz1844458-use-fputX_unfiltered.patch
-gdb-rhbz1838777-debuginfod.patch
-gdb-rhbz1869484-deleted-working-directory
diff --git a/gdb-6.3-gstack-20050411.patch b/gdb-6.3-gstack-20050411.patch
index 982863a..4413611 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
-@@ -1768,7 +1768,7 @@ info install-info clean-info dvi pdf install-pdf html install-html: force
+@@ -1726,7 +1726,7 @@ info install-info clean-info dvi pdf install-pdf html install-html: force
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 \
-@@ -1817,7 +1817,25 @@ install-guile:
+@@ -1775,7 +1775,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 \
-@@ -1840,6 +1858,18 @@ uninstall: force $(CONFIG_UNINSTALL)
+@@ -1798,6 +1816,18 @@ uninstall: force $(CONFIG_UNINSTALL)
fi
@$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
diff --git a/gdb-6.3-rh-testversion-20041202.patch b/gdb-6.3-rh-testversion-20041202.patch
index 48ca4b5..c1e7395 100644
--- a/gdb-6.3-rh-testversion-20041202.patch
+++ b/gdb-6.3-rh-testversion-20041202.patch
@@ -27,7 +27,7 @@ diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest
diff --git a/gdb/top.c b/gdb/top.c
--- a/gdb/top.c
+++ b/gdb/top.c
-@@ -2096,7 +2096,7 @@ init_gdb_version_vars (void)
+@@ -2163,7 +2163,7 @@ init_gdb_version_vars (void)
struct internalvar *major_version_var = create_internalvar ("_gdb_major");
struct internalvar *minor_version_var = create_internalvar ("_gdb_minor");
int vmajor = 0, vminor = 0, vrevision = 0;
diff --git a/gdb-6.3-test-self-20050110.patch b/gdb-6.3-test-self-20050110.patch
index 5662a0e..2709093 100644
--- a/gdb-6.3-test-self-20050110.patch
+++ b/gdb-6.3-test-self-20050110.patch
@@ -17,7 +17,7 @@ Subject: gdb-6.3-test-self-20050110.patch
diff --git a/gdb/testsuite/lib/selftest-support.exp b/gdb/testsuite/lib/selftest-support.exp
--- a/gdb/testsuite/lib/selftest-support.exp
+++ b/gdb/testsuite/lib/selftest-support.exp
-@@ -151,18 +151,18 @@ proc do_self_tests {function body} {
+@@ -152,18 +152,18 @@ proc do_self_tests {function body} {
}
# Remove any old copy lying around.
diff --git a/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch b/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
index a89de0a..5cdf65f 100644
--- a/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
+++ b/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
@@ -44,7 +44,7 @@ glibc-debuginfo-2.7-2.x86_64: /usr/lib/debug/lib64/libc.so.6.debug:
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
-@@ -1214,6 +1214,10 @@ print_command_1 (const char *args, int voidprint)
+@@ -1210,6 +1210,10 @@ print_command_1 (const char *args, int voidprint)
if (exp != nullptr && *exp)
{
diff --git a/gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch b/gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
index 0a66b3d..54c1a1e 100644
--- a/gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
+++ b/gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
@@ -11,7 +11,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
diff --git a/gdb/symtab.c b/gdb/symtab.c
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
-@@ -3166,6 +3166,13 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
+@@ -3169,6 +3169,13 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
msymbol->linkage_name ()); */
;
/* fall through */
@@ -23,5 +23,5 @@ diff --git a/gdb/symtab.c b/gdb/symtab.c
+ warning ("In stub for %s (0x%s); interlocked, please submit the binary to http://bugzilla.redhat.com", msymbol.minsym->linkage_name (), paddress (target_gdbarch (), pc));
+ /* fall through */
else
- return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0);
- }
+ {
+ /* Detect an obvious case of infinite recursion. If this
diff --git a/gdb-6.6-buildid-locate-core-as-arg.patch b/gdb-6.6-buildid-locate-core-as-arg.patch
index d182ae1..45b915d 100644
--- a/gdb-6.6-buildid-locate-core-as-arg.patch
+++ b/gdb-6.6-buildid-locate-core-as-arg.patch
@@ -73,7 +73,7 @@ diff --git a/gdb/exec.c b/gdb/exec.c
#include "frame.h"
#include "inferior.h"
#include "target.h"
-@@ -345,12 +347,27 @@ exec_file_attach (const char *filename, int from_tty)
+@@ -495,12 +497,27 @@ exec_file_attach (const char *filename, int from_tty)
if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching))
{
@@ -88,8 +88,8 @@ diff --git a/gdb/exec.c b/gdb/exec.c
/* Make sure to close exec_bfd, or else "run" might try to use
it. */
exec_close ();
-- error (_("\"%s\": not in executable format: %s"),
-- scratch_pathname,
+- error (_("\"%ps\": not in executable format: %s"),
+- styled_string (file_name_style.style (), scratch_pathname),
- gdb_bfd_errmsg (bfd_get_error (), matching).c_str ());
+
+ if (is_core != 0)
@@ -98,29 +98,16 @@ diff --git a/gdb/exec.c b/gdb/exec.c
+ "Please specify an executable to debug."),
+ scratch_pathname);
+ else
-+ error (_("\"%ss\": not in executable format: %s"),
-+ scratch_pathname,
++ error (_("\"%ps\": not in executable format: %s"),
++ styled_string (file_name_style.style (), scratch_pathname),
+ gdb_bfd_errmsg (bfd_get_error (), matching).c_str ());
}
if (build_section_table (exec_bfd, §ions, §ions_end))
-diff --git a/gdb/gdbsupport/common-exceptions.h b/gdb/gdbsupport/common-exceptions.h
---- a/gdb/gdbsupport/common-exceptions.h
-+++ b/gdb/gdbsupport/common-exceptions.h
-@@ -106,6 +106,9 @@ enum errors {
- "_ERROR" is appended to the name. */
- MAX_COMPLETIONS_REACHED_ERROR,
-
-+ /* Attempt to load a core file as executable. */
-+ IS_CORE_ERROR,
-+
- /* Add more errors here. */
- NR_ERRORS
- };
diff --git a/gdb/main.c b/gdb/main.c
--- a/gdb/main.c
+++ b/gdb/main.c
-@@ -467,6 +467,34 @@ struct cmdarg
+@@ -524,6 +524,34 @@ struct cmdarg
char *string;
};
@@ -155,7 +142,7 @@ diff --git a/gdb/main.c b/gdb/main.c
static void
captured_main_1 (struct captured_main_args *context)
{
-@@ -907,6 +935,8 @@ captured_main_1 (struct captured_main_args *context)
+@@ -959,6 +987,8 @@ captured_main_1 (struct captured_main_args *context)
{
symarg = argv[optind];
execarg = argv[optind];
@@ -164,7 +151,7 @@ diff --git a/gdb/main.c b/gdb/main.c
optind++;
}
-@@ -1063,12 +1093,25 @@ captured_main_1 (struct captured_main_args *context)
+@@ -1114,12 +1144,25 @@ captured_main_1 (struct captured_main_args *context)
&& symarg != NULL
&& strcmp (execarg, symarg) == 0)
{
@@ -194,3 +181,16 @@ diff --git a/gdb/main.c b/gdb/main.c
ret = catch_command_errors (symbol_file_add_main_adapter,
symarg, !batch_flag);
}
+diff --git a/gdbsupport/common-exceptions.h b/gdbsupport/common-exceptions.h
+--- a/gdbsupport/common-exceptions.h
++++ b/gdbsupport/common-exceptions.h
+@@ -106,6 +106,9 @@ enum errors {
+ "_ERROR" is appended to the name. */
+ MAX_COMPLETIONS_REACHED_ERROR,
+
++ /* Attempt to load a core file as executable. */
++ IS_CORE_ERROR,
++
+ /* Add more errors here. */
+ NR_ERRORS
+ };
diff --git a/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch b/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
index abea6e6..c86ec6b 100644
--- a/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
+++ b/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
@@ -9,7 +9,7 @@ Subject: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
diff --git a/gdb/build-id.c b/gdb/build-id.c
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
-@@ -709,6 +709,19 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return)
+@@ -708,6 +708,19 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return)
#include <dlfcn.h>
#endif
diff --git a/gdb-6.6-buildid-locate-rpm-scl.patch b/gdb-6.6-buildid-locate-rpm-scl.patch
index ca683ed..09f930f 100644
--- a/gdb-6.6-buildid-locate-rpm-scl.patch
+++ b/gdb-6.6-buildid-locate-rpm-scl.patch
@@ -12,7 +12,7 @@ https://bugzilla.redhat.com/show_bug.cgi?id=953585
diff --git a/gdb/build-id.c b/gdb/build-id.c
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
-@@ -743,7 +743,11 @@ static int missing_rpm_list_entries;
+@@ -742,7 +742,11 @@ static int missing_rpm_list_entries;
/* Returns the count of newly added rpms. */
static int
@@ -24,7 +24,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
{
static int rpm_init_done = 0;
rpmts ts;
-@@ -850,7 +854,11 @@ missing_rpm_enlist (const char *filename)
+@@ -849,7 +853,11 @@ missing_rpm_enlist (const char *filename)
mi = rpmtsInitIterator_p (ts, RPMTAG_BASENAMES, filename, 0);
if (mi != NULL)
{
@@ -36,7 +36,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
{
Header h;
char *debuginfo, **slot, *s, *s2;
-@@ -968,6 +976,37 @@ missing_rpm_enlist (const char *filename)
+@@ -967,6 +975,37 @@ missing_rpm_enlist (const char *filename)
xfree (debuginfo);
count++;
}
@@ -74,7 +74,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
rpmdbFreeIterator_p (mi);
}
-@@ -977,6 +1016,20 @@ missing_rpm_enlist (const char *filename)
+@@ -976,6 +1015,20 @@ missing_rpm_enlist (const char *filename)
return count;
}
@@ -95,10 +95,10 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
static bool
missing_rpm_list_compar (const char *ap, const char *bp)
{
-diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
---- a/gdb/dwarf2read.c
-+++ b/gdb/dwarf2read.c
-@@ -3497,6 +3497,16 @@ read_gdb_index_from_buffer (struct objfile *objfile,
+diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
+--- a/gdb/dwarf2/read.c
++++ b/gdb/dwarf2/read.c
+@@ -3025,6 +3025,16 @@ read_gdb_index_from_buffer (const char *filename,
"set use-deprecated-index-sections on". */
if (version < 6 && !deprecated_ok)
{
@@ -115,7 +115,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
static int warning_printed = 0;
if (!warning_printed)
{
-@@ -3508,6 +3518,10 @@ to use the section anyway."),
+@@ -3036,6 +3046,10 @@ to use the section anyway."),
warning_printed = 1;
}
return 0;
diff --git a/gdb-6.6-buildid-locate-rpm.patch b/gdb-6.6-buildid-locate-rpm.patch
index 6e1cef8..83b83b0 100644
--- a/gdb-6.6-buildid-locate-rpm.patch
+++ b/gdb-6.6-buildid-locate-rpm.patch
@@ -240,10 +240,10 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
#include "gdbcmd.h"
#include "gdbcore.h"
+#include "inferior.h"
- #include "libbfd.h"
#include "objfiles.h"
#include "observable.h"
-@@ -698,8 +699,374 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return)
+ #include "symfile.h"
+@@ -697,8 +698,374 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return)
return result;
}
@@ -619,7 +619,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
avoidance. */
struct missing_filepair
-@@ -753,11 +1120,17 @@ missing_filepair_change (void)
+@@ -752,11 +1119,17 @@ missing_filepair_change (void)
/* All their memory came just from missing_filepair_OBSTACK. */
missing_filepair_hash = NULL;
}
@@ -637,7 +637,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
missing_filepair_change ();
}
-@@ -824,14 +1197,38 @@ debug_print_missing (const char *binary, const char *debug)
+@@ -823,14 +1196,38 @@ debug_print_missing (const char *binary, const char *debug)
*slot = missing_filepair;
@@ -686,9 +686,9 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
diff --git a/gdb/config.in b/gdb/config.in
--- a/gdb/config.in
+++ b/gdb/config.in
-@@ -36,6 +36,9 @@
- /* Define to BFD's default target vector. */
- #undef DEFAULT_BFD_VEC
+@@ -39,6 +39,9 @@
+ /* Handle .ctf type-info sections */
+ #undef ENABLE_LIBCTF
+/* librpm version specific library name to dlopen. */
+#undef DLOPEN_LIBRPM
@@ -696,7 +696,7 @@ diff --git a/gdb/config.in b/gdb/config.in
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
-@@ -245,6 +248,9 @@
+@@ -247,6 +250,9 @@
/* Define if you have the mpfr library. */
#undef HAVE_LIBMPFR
@@ -709,7 +709,7 @@ diff --git a/gdb/config.in b/gdb/config.in
diff --git a/gdb/configure b/gdb/configure
--- a/gdb/configure
+++ b/gdb/configure
-@@ -761,6 +761,11 @@ CODESIGN_CERT
+@@ -769,6 +769,11 @@ PKG_CONFIG
HAVE_NATIVE_GCORE_TARGET
TARGET_OBS
subdirs
@@ -721,7 +721,7 @@ diff --git a/gdb/configure b/gdb/configure
GDB_DATADIR
DEBUGDIR
MAKEINFO_EXTRA_FLAGS
-@@ -864,6 +869,7 @@ with_gdb_datadir
+@@ -873,6 +878,7 @@ with_gdb_datadir
with_relocated_sources
with_auto_load_dir
with_auto_load_safe_path
@@ -729,42 +729,34 @@ diff --git a/gdb/configure b/gdb/configure
enable_targets
enable_64_bit_bfd
enable_gdbmi
-@@ -926,6 +932,11 @@ CCC
- CPP
- MAKEINFO
- MAKEINFOFLAGS
-+PKG_CONFIG
-+PKG_CONFIG_PATH
-+PKG_CONFIG_LIBDIR
+@@ -949,6 +955,8 @@ PKG_CONFIG_PATH
+ PKG_CONFIG_LIBDIR
+ DEBUGINFOD_CFLAGS
+ DEBUGINFOD_LIBS
+RPM_CFLAGS
+RPM_LIBS
YACC
YFLAGS
XMKMF'
-@@ -1598,6 +1609,8 @@ Optional Packages:
- [--with-auto-load-dir]
- --without-auto-load-safe-path
+@@ -1621,6 +1629,8 @@ Optional Packages:
do not restrict auto-loaded files locations
+ --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
-@@ -1661,6 +1674,13 @@ Some influential environment variables:
- MAKEINFO Parent configure detects if it is of sufficient version.
- MAKEINFOFLAGS
- Parameters for MAKEINFO.
-+ PKG_CONFIG path to pkg-config utility
-+ PKG_CONFIG_PATH
-+ directories to add to pkg-config's search path
-+ PKG_CONFIG_LIBDIR
-+ path overriding pkg-config's built-in search path
+@@ -1702,6 +1712,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'.
-@@ -6587,6 +6607,494 @@ _ACEOF
+@@ -6666,6 +6678,494 @@ _ACEOF
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5
$as_echo "$with_auto_load_safe_path" >&6; }
@@ -1262,7 +1254,7 @@ diff --git a/gdb/configure b/gdb/configure
diff --git a/gdb/configure.ac b/gdb/configure.ac
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
-@@ -144,6 +144,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir,
+@@ -143,6 +143,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir,
[Directories safe to hold auto-loaded files.])
AC_MSG_RESULT([$with_auto_load_safe_path])
@@ -1465,15 +1457,15 @@ diff --git a/gdb/configure.ac b/gdb/configure.ac
diff --git a/gdb/event-top.c b/gdb/event-top.c
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
-@@ -41,6 +41,7 @@
- #include "ser-event.h"
- #include "gdb_select.h"
+@@ -42,6 +42,7 @@
+ #include "gdbsupport/gdb_select.h"
#include "gdbsupport/gdb-sigmask.h"
+ #include "async-event.h"
+#include "symfile.h"
/* readline include files. */
#include "readline/readline.h"
-@@ -363,6 +364,8 @@ display_gdb_prompt (const char *new_prompt)
+@@ -364,6 +365,8 @@ display_gdb_prompt (const char *new_prompt)
/* Reset the nesting depth used when trace-commands is set. */
reset_command_nest_depth ();
@@ -1482,7 +1474,7 @@ diff --git a/gdb/event-top.c b/gdb/event-top.c
/* 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. */
-@@ -772,7 +775,10 @@ command_line_handler (gdb::unique_xmalloc_ptr<char> &&rl)
+@@ -773,7 +776,10 @@ command_line_handler (gdb::unique_xmalloc_ptr<char> &&rl)
command_handler (cmd);
if (ui->prompt_state != PROMPTED)
@@ -1497,12 +1489,11 @@ diff --git a/gdb/event-top.c b/gdb/event-top.c
diff --git a/gdb/symfile.h b/gdb/symfile.h
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
-@@ -542,6 +542,8 @@ extern void generic_load (const char *args, int from_tty);
+@@ -560,6 +560,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")
+ #define BUILD_ID_MAIN_EXECUTABLE_FILENAME _("the main executable file")
/* From dwarf2read.c */
-
diff --git a/gdb-6.6-buildid-locate-solib-missing-ids.patch b/gdb-6.6-buildid-locate-solib-missing-ids.patch
index 73b763a..f1f5e83 100644
--- a/gdb-6.6-buildid-locate-solib-missing-ids.patch
+++ b/gdb-6.6-buildid-locate-solib-missing-ids.patch
@@ -14,7 +14,7 @@ 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
-@@ -1346,14 +1346,27 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
+@@ -1340,14 +1340,27 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
}
{
@@ -44,7 +44,7 @@ diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
if (build_id != NULL)
{
char *name, *build_id_filename;
-@@ -1368,23 +1381,7 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
+@@ -1362,23 +1375,7 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
xfree (name);
}
else
diff --git a/gdb-6.6-buildid-locate.patch b/gdb-6.6-buildid-locate.patch
index 504c6a9..6c9fb81 100644
--- a/gdb-6.6-buildid-locate.patch
+++ b/gdb-6.6-buildid-locate.patch
@@ -9,7 +9,7 @@ Subject: gdb-6.6-buildid-locate.patch
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
-@@ -127,7 +127,7 @@ static inline char *
+@@ -121,7 +121,7 @@ static inline char *
bfd_strdup (const char *str)
{
size_t len = strlen (str) + 1;
@@ -21,7 +21,7 @@ diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
-@@ -132,7 +132,7 @@ static inline char *
+@@ -126,7 +126,7 @@ static inline char *
bfd_strdup (const char *str)
{
size_t len = strlen (str) + 1;
@@ -33,7 +33,7 @@ diff --git a/bfd/libbfd.h b/bfd/libbfd.h
diff --git a/gdb/build-id.c b/gdb/build-id.c
--- a/gdb/build-id.c
+++ b/gdb/build-id.c
-@@ -24,13 +24,71 @@
+@@ -24,13 +24,70 @@
#include "gdbsupport/gdb_vecs.h"
#include "symfile.h"
#include "objfiles.h"
@@ -46,7 +46,6 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
+#include "gdb_bfd.h"
+#include "gdbcmd.h"
#include "gdbcore.h"
-+#include "libbfd.h"
+#include "objfiles.h"
+#include "observable.h"
+#include "symfile.h"
@@ -106,7 +105,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
{
if (!bfd_check_format (abfd, bfd_object)
&& !bfd_check_format (abfd, bfd_core))
-@@ -43,6 +101,348 @@ build_id_bfd_get (bfd *abfd)
+@@ -43,6 +100,348 @@ build_id_bfd_get (bfd *abfd)
return NULL;
}
@@ -455,7 +454,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
/* See build-id.h. */
int
-@@ -51,7 +451,7 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
+@@ -51,7 +450,7 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
const struct bfd_build_id *found;
int retval = 0;
@@ -464,7 +463,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
if (found == NULL)
warning (_("File \"%s\" has no build-id, file skipped"),
-@@ -66,56 +466,159 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
+@@ -66,56 +465,159 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
return retval;
}
@@ -543,7 +542,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
+ files may not be installed. */
- /* We expect to be silent on the non-existing files. */
-- gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename.get (), gnutarget, -1);
+- gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename.get (), gnutarget);
+ string_appendf (link, ".%u", seqno);
+ }
@@ -651,7 +650,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
-@@ -124,7 +627,7 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len,
+@@ -124,7 +626,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,
@@ -660,7 +659,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. */
-@@ -147,16 +650,17 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
+@@ -147,16 +649,17 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
if (size > 0)
{
size--;
@@ -681,7 +680,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
if (debug_bfd != NULL)
return debug_bfd;
-@@ -170,7 +674,8 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
+@@ -170,7 +673,8 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) != 0)
{
link = gdb_sysroot + link;
@@ -691,7 +690,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
if (debug_bfd != NULL)
return debug_bfd;
}
-@@ -179,38 +684,208 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
+@@ -179,38 +683,208 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id,
return {};
}
@@ -907,7 +906,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
/* Prevent looping on a stripped .debug file. */
if (abfd != NULL
&& filename_cmp (bfd_get_filename (abfd.get ()),
-@@ -223,3 +898,21 @@ find_separate_debug_file_by_buildid (struct objfile *objfile)
+@@ -223,3 +897,21 @@ find_separate_debug_file_by_buildid (struct objfile *objfile)
return std::string ();
}
@@ -1003,8 +1002,8 @@ diff --git a/gdb/corelow.c b/gdb/corelow.c
#include "inferior.h"
#include "infrun.h"
#include "symtab.h"
-@@ -322,6 +326,8 @@ add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
- inferior_ptid = ptid; /* Yes, make it current. */
+@@ -362,6 +366,8 @@ add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
+ switch_to_thread (thr); /* Yes, make it current. */
}
+static bool build_id_core_loads = true;
@@ -1012,7 +1011,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
-@@ -358,19 +364,25 @@ core_file_command (const char *filename, int from_tty)
+@@ -398,19 +404,25 @@ core_file_command (const char *filename, int from_tty)
static void
locate_exec_from_corefile_build_id (bfd *abfd, int from_tty)
{
@@ -1040,10 +1039,10 @@ diff --git a/gdb/corelow.c b/gdb/corelow.c
}
/* See gdbcore.h. */
-@@ -998,4 +1010,11 @@ void
- _initialize_corelow (void)
- {
- add_target (core_target_info, core_target_open, filename_completer);
+@@ -1189,4 +1201,11 @@ _initialize_corelow ()
+ maintenance_print_core_file_backed_mappings,
+ _("Print core file's file-backed mappings."),
+ &maintenanceprintlist);
+
+ add_setshow_boolean_cmd ("build-id-core-loads", class_files,
+ &build_id_core_loads, _("\
@@ -1055,7 +1054,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
-@@ -20862,6 +20862,27 @@ information files.
+@@ -21074,6 +21074,27 @@ information files.
@end table
@@ -1083,10 +1082,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/dwarf-index-cache.c b/gdb/dwarf-index-cache.c
---- a/gdb/dwarf-index-cache.c
-+++ b/gdb/dwarf-index-cache.c
-@@ -94,7 +94,7 @@ index_cache::store (struct dwarf2_per_objfile *dwarf2_per_objfile)
+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
+@@ -95,7 +95,7 @@ index_cache::store (dwarf2_per_objfile *per_objfile)
return;
/* Get build id of objfile. */
@@ -1095,7 +1094,7 @@ diff --git a/gdb/dwarf-index-cache.c b/gdb/dwarf-index-cache.c
if (build_id == nullptr)
{
if (debug_index_cache)
-@@ -112,7 +112,8 @@ index_cache::store (struct dwarf2_per_objfile *dwarf2_per_objfile)
+@@ -113,7 +113,8 @@ index_cache::store (dwarf2_per_objfile *per_objfile)
if (dwz != nullptr)
{
@@ -1105,28 +1104,28 @@ diff --git a/gdb/dwarf-index-cache.c b/gdb/dwarf-index-cache.c
if (dwz_build_id == nullptr)
{
-diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
---- a/gdb/dwarf2read.c
-+++ b/gdb/dwarf2read.c
-@@ -2718,7 +2718,7 @@ dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
+diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
+--- a/gdb/dwarf2/read.c
++++ b/gdb/dwarf2/read.c
+@@ -2218,7 +2218,7 @@ dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd)
}
if (dwz_bfd == NULL)
- dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid);
+ dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid, NULL);
- if (dwz_bfd == NULL)
- error (_("could not find '.gnu_debugaltlink' file for %s"),
-@@ -6276,7 +6276,7 @@ get_gdb_index_contents_from_section (objfile *obj, T *section_owner)
+ if (dwz_bfd == nullptr)
+ {
+@@ -5980,7 +5980,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_objfile *dwarf2_obj)
+ 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);
+ const bfd_build_id *build_id = build_id_bfd_shdr_get (obj->obfd);
if (build_id == nullptr)
return {};
-@@ -6289,7 +6289,7 @@ get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_objfile *dwarf2_obj)
+@@ -5993,7 +5993,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)
{
@@ -1138,7 +1137,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
diff --git a/gdb/elfread.c b/gdb/elfread.c
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
-@@ -1299,7 +1299,9 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
+@@ -1298,7 +1298,9 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
&& objfile->separate_debug_objfile == NULL
&& objfile->separate_debug_objfile_backlink == NULL)
{
@@ -1149,35 +1148,61 @@ diff --git a/gdb/elfread.c b/gdb/elfread.c
if (debugfile.empty ())
debugfile = find_separate_debug_file_by_debuglink (objfile);
-@@ -1311,8 +1313,12 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
- symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
- symfile_flags, objfile);
+@@ -1313,7 +1315,7 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
+ else
+ {
+ has_dwarf2 = false;
+- const struct bfd_build_id *build_id = build_id_bfd_get (objfile->obfd);
++ const struct bfd_build_id *build_id = build_id_bfd_shdr_get (objfile->obfd);
+
+ if (build_id != nullptr)
+ {
+@@ -1338,6 +1340,10 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
+ has_dwarf2 = true;
+ }
+ }
++ /* Check if any separate debug info has been extracted out. */
++ else if (bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink")
++ != NULL)
++ debug_print_missing (objfile_name (objfile), build_id_filename.get ());
+ }
}
-- else
-- has_dwarf2 = false;
-+ /* Check if any separate debug info has been extracted out. */
-+ else if (bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink")
-+ != NULL)
-+ debug_print_missing (objfile_name (objfile), build_id_filename.get ());
-+ else
-+ has_dwarf2 = false;
}
+diff --git a/gdb/exec.c b/gdb/exec.c
+--- a/gdb/exec.c
++++ b/gdb/exec.c
+@@ -264,7 +264,7 @@ validate_exec_file (int from_tty)
+ reopen_exec_file ();
+ current_exec_file = get_exec_file (0);
+
+- const bfd_build_id *exec_file_build_id = build_id_bfd_get (exec_bfd);
++ const bfd_build_id *exec_file_build_id = build_id_bfd_shdr_get (exec_bfd);
+ if (exec_file_build_id != nullptr)
+ {
+ /* Prepend the target prefix, to force gdb_bfd_open to open the
+@@ -277,7 +277,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 ());
- /* Read the CTF section only if there is no DWARF info. */
+ 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
-@@ -627,6 +627,10 @@ struct objfile
- htab_up static_links;
+@@ -714,6 +714,10 @@ struct objfile
+ bool skip_jit_symbol_lookup = false;
};
+/* This file was loaded according to the BUILD_ID_CORE_LOADS rules. */
+
+#define OBJF_BUILD_ID_CORE_LOADED static_cast<enum objfile_flag>(1 << 12)
+
- /* Declarations for functions defined in objfiles.c */
+ /* A deleter for objfile. */
- extern struct gdbarch *get_objfile_arch (const struct 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
@@ -1210,7 +1235,7 @@ diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
static int svr4_have_link_map_offsets (void);
-@@ -1344,9 +1345,51 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
+@@ -1338,9 +1339,51 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm,
continue;
}
@@ -1265,10 +1290,22 @@ diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
/* 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
+@@ -1165,7 +1165,7 @@ open_source_file (struct symtab *s)
+ srcpath += s->filename;
+ }
+
+- const struct bfd_build_id *build_id = build_id_bfd_get (ofp->obfd);
++ const struct bfd_build_id *build_id = build_id_bfd_shdr_get (ofp->obfd);
+
+ /* Query debuginfod for the source file. */
+ if (build_id != nullptr && !srcpath.empty ())
diff --git a/gdb/symfile.h b/gdb/symfile.h
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
-@@ -532,12 +532,17 @@ void expand_symtabs_matching
+@@ -550,12 +550,18 @@ void expand_symtabs_matching
void map_symbol_filenames (symbol_filename_ftype *fun, void *data,
int need_fullname);
@@ -1282,6 +1319,7 @@ diff --git a/gdb/symfile.h b/gdb/symfile.h
+/* 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);
++#define BUILD_ID_MAIN_EXECUTABLE_FILENAME _("the main executable file")
+
/* From dwarf2read.c */
@@ -1289,7 +1327,7 @@ diff --git a/gdb/symfile.h b/gdb/symfile.h
diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp
--- a/gdb/testsuite/gdb.base/corefile.exp
+++ b/gdb/testsuite/gdb.base/corefile.exp
-@@ -311,3 +311,33 @@ gdb_test_multiple "core-file $corefile" $test {
+@@ -343,3 +343,33 @@ gdb_test_multiple "core-file $corefile" $test {
pass $test
}
}
@@ -1337,7 +1375,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
-@@ -1891,6 +1891,17 @@ proc default_gdb_start { } {
+@@ -2011,6 +2011,17 @@ proc default_gdb_start { } {
}
}
@@ -1358,7 +1396,7 @@ diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp
--- a/gdb/testsuite/lib/mi-support.exp
+++ b/gdb/testsuite/lib/mi-support.exp
-@@ -309,6 +309,16 @@ proc default_mi_gdb_start { args } {
+@@ -308,6 +308,16 @@ proc default_mi_gdb_start { args } {
warning "Couldn't set the width to 0."
}
}
diff --git a/gdb-6.7-testsuite-stable-results.patch b/gdb-6.7-testsuite-stable-results.patch
index ec8f9c2..0eca1a7 100644
--- a/gdb-6.7-testsuite-stable-results.patch
+++ b/gdb-6.7-testsuite-stable-results.patch
@@ -28,7 +28,7 @@ frames-invalid can happen asynchronously.
diff --git a/gdb/testsuite/gdb.base/fileio.c b/gdb/testsuite/gdb.base/fileio.c
--- a/gdb/testsuite/gdb.base/fileio.c
+++ b/gdb/testsuite/gdb.base/fileio.c
-@@ -560,6 +560,28 @@ strerrno (int err)
+@@ -559,6 +559,28 @@ strerrno (int err)
int
main ()
{
diff --git a/gdb-6.8-quit-never-aborts.patch b/gdb-6.8-quit-never-aborts.patch
index 4dd01c5..a682469 100644
--- a/gdb-6.8-quit-never-aborts.patch
+++ b/gdb-6.8-quit-never-aborts.patch
@@ -16,7 +16,7 @@ on the debugger termination).
diff --git a/gdb/defs.h b/gdb/defs.h
--- a/gdb/defs.h
+++ b/gdb/defs.h
-@@ -168,6 +168,10 @@ extern void default_quit_handler (void);
+@@ -177,6 +177,10 @@ extern void default_quit_handler (void);
/* Flag that function quit should call quit_force. */
extern volatile int sync_quit_force_run;
@@ -30,24 +30,24 @@ diff --git a/gdb/defs.h b/gdb/defs.h
diff --git a/gdb/extension.c b/gdb/extension.c
--- a/gdb/extension.c
+++ b/gdb/extension.c
-@@ -823,6 +823,11 @@ check_quit_flag (void)
- int i, result = 0;
- const struct extension_language_defn *extlang;
+@@ -769,6 +769,11 @@ check_quit_flag (void)
+ {
+ int result = 0;
+#ifdef NEED_DETACH_SIGSTOP
+ if (quit_flag_cleanup)
+ return 0;
+#endif
+
- ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+ for (const struct extension_language_defn *extlang : extension_languages)
{
- if (extlang->ops->check_quit_flag != NULL)
+ if (extlang->ops != nullptr
diff --git a/gdb/top.c b/gdb/top.c
--- a/gdb/top.c
+++ b/gdb/top.c
-@@ -1703,7 +1703,13 @@ quit_force (int *exit_arg, int from_tty)
-
- qt.from_tty = from_tty;
+@@ -1770,7 +1770,13 @@ quit_force (int *exit_arg, int from_tty)
+ else if (return_child_result)
+ exit_code = return_child_result_value;
+#ifndef NEED_DETACH_SIGSTOP
/* We want to handle any quit errors and exit regardless. */
@@ -62,7 +62,7 @@ diff --git a/gdb/top.c b/gdb/top.c
diff --git a/gdb/utils.c b/gdb/utils.c
--- a/gdb/utils.c
+++ b/gdb/utils.c
-@@ -102,6 +102,13 @@ static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
+@@ -103,6 +103,13 @@ static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
static bool debug_timestamp = false;
diff --git a/gdb-archer-pie-addons-keep-disabled.patch b/gdb-archer-pie-addons-keep-disabled.patch
index 40ab16b..ed02f2c 100644
--- a/gdb-archer-pie-addons-keep-disabled.patch
+++ b/gdb-archer-pie-addons-keep-disabled.patch
@@ -8,12 +8,12 @@ Subject: gdb-archer-pie-addons-keep-disabled.patch
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
-@@ -15396,6 +15396,51 @@ static struct cmd_list_element *enablebreaklist = NULL;
+@@ -15431,6 +15431,50 @@ static struct cmd_list_element *enablebreaklist = NULL;
cmd_list_element *commands_cmd_element = nullptr;
+void
-+breakpoints_relocate (struct objfile *objfile, struct section_offsets *delta)
++breakpoints_relocate (struct objfile *objfile, section_offsets &delta)
+{
+ struct bp_location *bl, **blp_tmp;
+ int changed = 0;
@@ -32,7 +32,7 @@ diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
+ CORE_ADDR relocated_address;
+ CORE_ADDR delta_offset;
+
-+ delta_offset = ANOFFSET (delta, osect->the_bfd_section->index);
++ delta_offset = delta[osect->the_bfd_section->index];
+ if (delta_offset == 0)
+ continue;
+ relocated_address = bl->address + delta_offset;
@@ -56,19 +56,18 @@ diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
+ bp_location_is_less_than);
+}
+
-+void _initialize_breakpoint (void);
+ void _initialize_breakpoint ();
void
- _initialize_breakpoint (void)
- {
+ _initialize_breakpoint ()
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
-@@ -1696,6 +1696,9 @@ extern const char *ep_parse_optional_if_clause (const char **arg);
+@@ -1691,6 +1691,9 @@ extern const char *ep_parse_optional_if_clause (const char **arg);
UIOUT iff debugging multiple threads. */
extern void maybe_print_thread_hit_breakpoint (struct ui_out *uiout);
+extern void breakpoints_relocate (struct objfile *objfile,
-+ struct section_offsets *delta);
++ section_offsets &delta);
+
/* Print the specified breakpoint. */
extern void print_breakpoint (breakpoint *bp);
@@ -76,7 +75,7 @@ diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
-@@ -816,6 +816,11 @@ objfile_relocate1 (struct objfile *objfile,
+@@ -742,6 +742,11 @@ objfile_relocate1 (struct objfile *objfile,
obj_section_addr (s));
}
@@ -88,15 +87,3 @@ diff --git a/gdb/objfiles.c b/gdb/objfiles.c
/* Data changed. */
return 1;
}
-diff --git a/gdb/value.c b/gdb/value.c
---- a/gdb/value.c
-+++ b/gdb/value.c
-@@ -2840,7 +2840,7 @@ value_static_field (struct type *type, int fieldno)
- case FIELD_LOC_KIND_PHYSADDR:
- retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno),
- TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)
-- + (TYPE_OBJFILE (type) == NULL ? 0 : TYPE_OBJFILE (type)->section_offsets[SECT_OFF_TEXT (TYPE_OBJFILE (type))]));
-+ + (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type)))));
- break;
- case FIELD_LOC_KIND_PHYSNAME:
- {
diff --git a/gdb-archer-pie-addons.patch b/gdb-archer-pie-addons.patch
index e3af3a9..f0c68db 100644
--- a/gdb-archer-pie-addons.patch
+++ b/gdb-archer-pie-addons.patch
@@ -8,7 +8,7 @@ Subject: gdb-archer-pie-addons.patch
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
-@@ -516,6 +516,7 @@ enum field_loc_kind
+@@ -649,6 +649,7 @@ enum field_loc_kind
{
FIELD_LOC_KIND_BITPOS, /**< bitpos */
FIELD_LOC_KIND_ENUMVAL, /**< enumval */
@@ -16,7 +16,7 @@ diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
FIELD_LOC_KIND_PHYSADDR, /**< physaddr */
FIELD_LOC_KIND_PHYSNAME, /**< physname */
FIELD_LOC_KIND_DWARF_BLOCK /**< dwarf_block */
-@@ -566,6 +567,7 @@ union field_location
+@@ -699,6 +700,7 @@ union field_location
field. Otherwise, physname is the mangled label of the
static field. */
@@ -24,37 +24,13 @@ diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
CORE_ADDR physaddr;
const char *physname;
-@@ -1474,6 +1476,7 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
- #define FIELD_ENUMVAL_LVAL(thisfld) ((thisfld).loc.enumval)
- #define FIELD_ENUMVAL(thisfld) (FIELD_ENUMVAL_LVAL (thisfld) + 0)
- #define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
-+/* This address is unrelocated by the objfile's ANOFFSET. */
- #define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
- #define FIELD_DWARF_BLOCK(thisfld) ((thisfld).loc.dwarf_block)
- #define SET_FIELD_BITPOS(thisfld, bitpos) \
-@@ -1485,6 +1488,7 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
- #define SET_FIELD_PHYSNAME(thisfld, name) \
- (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \
- FIELD_STATIC_PHYSNAME (thisfld) = (name))
-+/* This address is unrelocated by the objfile's ANOFFSET. */
- #define SET_FIELD_PHYSADDR(thisfld, addr) \
- (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \
- FIELD_STATIC_PHYSADDR (thisfld) = (addr))
-@@ -1501,6 +1505,7 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
- #define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
- #define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL (TYPE_FIELD (thistype, n))
- #define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
-+/* This address is unrelocated by the objfile's ANOFFSET. */
- #define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
- #define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n))
- #define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
diff --git a/gdb/value.c b/gdb/value.c
--- a/gdb/value.c
+++ b/gdb/value.c
-@@ -2839,7 +2839,8 @@ value_static_field (struct type *type, int fieldno)
+@@ -2850,7 +2850,8 @@ value_static_field (struct type *type, int fieldno)
{
case FIELD_LOC_KIND_PHYSADDR:
- retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno),
+ retval = value_at_lazy (type->field (fieldno).type (),
- TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
+ TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)
+ + (TYPE_OBJFILE (type) == NULL ? 0 : TYPE_OBJFILE (type)->section_offsets[SECT_OFF_TEXT (TYPE_OBJFILE (type))]));
diff --git a/gdb-archer-vla-tests.patch b/gdb-archer-vla-tests.patch
index 9921940..47c98d3 100644
--- a/gdb-archer-vla-tests.patch
+++ b/gdb-archer-vla-tests.patch
@@ -3689,7 +3689,7 @@ new file mode 100644
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
-@@ -170,6 +170,11 @@ proc gdb_unload {} {
+@@ -224,6 +224,11 @@ proc gdb_unload {} {
send_gdb "y\n" answer
exp_continue
}
@@ -3705,12 +3705,12 @@ diff --git a/gdb/testsuite/lib/pascal.exp b/gdb/testsuite/lib/pascal.exp
--- a/gdb/testsuite/lib/pascal.exp
+++ b/gdb/testsuite/lib/pascal.exp
@@ -37,6 +37,9 @@ proc pascal_init {} {
- global pascal_compiler_is_fpc
- global gpc_compiler
- global fpc_compiler
-+ global fpcversion_major
-+ global fpcversion_minor
-+ global fpcversion_release
+ gdb_persistent_global pascal_compiler_is_fpc
+ gdb_persistent_global gpc_compiler
+ gdb_persistent_global fpc_compiler
++ gdb_persistent_global fpcversion_major
++ gdb_persistent_global fpcversion_minor
++ gdb_persistent_global fpcversion_release
global env
if { $pascal_init_done == 1 } {
diff --git a/gdb-attach-fail-reasons-5of5.patch b/gdb-attach-fail-reasons-5of5.patch
index 5b3b6d3..8830be3 100644
--- a/gdb-attach-fail-reasons-5of5.patch
+++ b/gdb-attach-fail-reasons-5of5.patch
@@ -45,7 +45,7 @@ gdb/gdbserver/
diff --git a/gdb/config.in b/gdb/config.in
--- a/gdb/config.in
+++ b/gdb/config.in
-@@ -251,6 +251,9 @@
+@@ -253,6 +253,9 @@
/* Define if librpm library is being used. */
#undef HAVE_LIBRPM
@@ -55,7 +55,7 @@ diff --git a/gdb/config.in b/gdb/config.in
/* Define to 1 if you have the <libunwind-ia64.h> header file. */
#undef HAVE_LIBUNWIND_IA64_H
-@@ -386,6 +389,9 @@
+@@ -388,6 +391,9 @@
/* Define to 1 if you have the `scm_new_smob' function. */
#undef HAVE_SCM_NEW_SMOB
@@ -68,7 +68,7 @@ diff --git a/gdb/config.in b/gdb/config.in
diff --git a/gdb/configure b/gdb/configure
--- a/gdb/configure
+++ b/gdb/configure
-@@ -16434,6 +16434,64 @@ cat >>confdefs.h <<_ACEOF
+@@ -16861,6 +16861,64 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
@@ -136,7 +136,7 @@ diff --git a/gdb/configure b/gdb/configure
diff --git a/gdb/configure.ac b/gdb/configure.ac
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
-@@ -1964,6 +1964,10 @@ case $host_os in
+@@ -1900,6 +1900,10 @@ case $host_os in
esac
AC_DEFINE_UNQUOTED(GDBINIT,"$gdbinit",[The .gdbinit filename.])
@@ -147,12 +147,93 @@ diff --git a/gdb/configure.ac b/gdb/configure.ac
dnl Handle optional features that can be enabled.
# Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
-diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
---- a/gdb/gdbserver/config.in
-+++ b/gdb/gdbserver/config.in
-@@ -125,6 +125,9 @@
- /* Define to 1 if you have the `dl' library (-ldl). */
- #undef HAVE_LIBDL
+diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
+--- a/gdb/linux-nat.c
++++ b/gdb/linux-nat.c
+@@ -1103,7 +1103,16 @@ linux_nat_target::create_inferior (const char *exec_file,
+ /* Make sure we report all signals during startup. */
+ pass_signals ({});
+
+- inf_ptrace_target::create_inferior (exec_file, allargs, env, from_tty);
++ try
++ {
++ inf_ptrace_target::create_inferior (exec_file, allargs, env, from_tty);
++ }
++ catch (const gdb_exception_error &ex)
++ {
++ std::string result = linux_ptrace_create_warnings ();
++
++ throw_error (ex.error, "%s%s", result.c_str (), ex.message->c_str ());
++ }
+ }
+
+ /* Callback for linux_proc_attach_tgid_threads. Attach to PTID if not
+diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c
+--- a/gdb/nat/linux-ptrace.c
++++ b/gdb/nat/linux-ptrace.c
+@@ -25,6 +25,10 @@
+ #include <sys/procfs.h>
+ #endif
+
++#ifdef HAVE_SELINUX_SELINUX_H
++# include <selinux/selinux.h>
++#endif /* HAVE_SELINUX_SELINUX_H */
++
+ /* Stores the ptrace options supported by the running kernel.
+ A value of -1 means we did not check for features yet. A value
+ of 0 means there are no supported features. */
+@@ -50,6 +54,8 @@ linux_ptrace_attach_fail_reason (pid_t pid)
+ "terminated"),
+ (int) pid);
+
++ result += linux_ptrace_create_warnings ();
++
+ return result;
+ }
+
+@@ -586,6 +592,25 @@ linux_ptrace_init_warnings (void)
+ linux_ptrace_test_ret_to_nx ();
+ }
+
++/* Print all possible reasons we could fail to create a traced process. */
++
++std::string
++linux_ptrace_create_warnings ()
++{
++ std::string result;
++
++#ifdef HAVE_LIBSELINUX
++ /* -1 is returned for errors, 0 if it has no effect, 1 if PTRACE_ATTACH is
++ forbidden. */
++ if (security_get_boolean_active ("deny_ptrace") == 1)
++ string_appendf (result,
++ _("the SELinux boolean 'deny_ptrace' is enabled, "
++ "you can disable this process attach protection by: "
++ "(gdb) shell sudo setsebool deny_ptrace=0\n"));
++#endif /* HAVE_LIBSELINUX */
++ return result;
++}
++
+ /* Extract extended ptrace event from wait status. */
+
+ int
+diff --git a/gdb/nat/linux-ptrace.h b/gdb/nat/linux-ptrace.h
+--- a/gdb/nat/linux-ptrace.h
++++ b/gdb/nat/linux-ptrace.h
+@@ -184,6 +184,7 @@ extern std::string linux_ptrace_attach_fail_reason (pid_t pid);
+ extern std::string linux_ptrace_attach_fail_reason_string (ptid_t ptid, int err);
+
+ extern void linux_ptrace_init_warnings (void);
++extern std::string linux_ptrace_create_warnings ();
+ extern void linux_check_ptrace_features (void);
+ extern void linux_enable_event_reporting (pid_t pid, int attached);
+ extern void linux_disable_event_reporting (pid_t pid);
+diff --git a/gdbserver/config.in b/gdbserver/config.in
+--- a/gdbserver/config.in
++++ b/gdbserver/config.in
+@@ -143,6 +143,9 @@
+ /* Define if you have the ipt library. */
+ #undef HAVE_LIBIPT
+/* Define to 1 if you have the `selinux' library (-lselinux). */
+#undef HAVE_LIBSELINUX
@@ -160,9 +241,9 @@ diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
/* Define if the target supports branch tracing. */
#undef HAVE_LINUX_BTRACE
-@@ -210,6 +213,9 @@
- /* Define to 1 if you have the `pwrite' function. */
- #undef HAVE_PWRITE
+@@ -249,6 +252,9 @@
+ /* Define to 1 if you have the `sbrk' function. */
+ #undef HAVE_SBRK
+/* Define to 1 if you have the <selinux/selinux.h> header file. */
+#undef HAVE_SELINUX_SELINUX_H
@@ -170,10 +251,10 @@ diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
/* Define to 1 if you have the `setns' function. */
#undef HAVE_SETNS
-diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure
---- a/gdb/gdbserver/configure
-+++ b/gdb/gdbserver/configure
-@@ -9398,6 +9398,64 @@ if $want_ipa ; then
+diff --git a/gdbserver/configure b/gdbserver/configure
+--- a/gdbserver/configure
++++ b/gdbserver/configure
+@@ -10683,6 +10683,64 @@ if $want_ipa ; then
fi
fi
@@ -238,10 +319,10 @@ diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure
-diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac
---- a/gdb/gdbserver/configure.ac
-+++ b/gdb/gdbserver/configure.ac
-@@ -465,6 +465,10 @@ if $want_ipa ; then
+diff --git a/gdbserver/configure.ac b/gdbserver/configure.ac
+--- a/gdbserver/configure.ac
++++ b/gdbserver/configure.ac
+@@ -401,6 +401,10 @@ if $want_ipa ; then
fi
fi
@@ -252,10 +333,10 @@ diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac
AC_SUBST(GDBSERVER_DEPFILES)
AC_SUBST(GDBSERVER_LIBS)
AC_SUBST(srv_xmlbuiltin)
-diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
---- a/gdb/gdbserver/linux-low.c
-+++ b/gdb/gdbserver/linux-low.c
-@@ -968,7 +968,16 @@ linux_ptrace_fun ()
+diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
+--- a/gdbserver/linux-low.cc
++++ b/gdbserver/linux-low.cc
+@@ -932,7 +932,16 @@ linux_ptrace_fun ()
{
if (ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0,
(PTRACE_TYPE_ARG4) 0) < 0)
@@ -273,84 +354,3 @@ diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
if (setpgid (0, 0) < 0)
trace_start_error_with_name ("setpgid");
-diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
---- a/gdb/linux-nat.c
-+++ b/gdb/linux-nat.c
-@@ -1092,7 +1092,16 @@ linux_nat_target::create_inferior (const char *exec_file,
- /* Make sure we report all signals during startup. */
- pass_signals ({});
-
-- inf_ptrace_target::create_inferior (exec_file, allargs, env, from_tty);
-+ try
-+ {
-+ inf_ptrace_target::create_inferior (exec_file, allargs, env, from_tty);
-+ }
-+ catch (const gdb_exception_error &ex)
-+ {
-+ std::string result = linux_ptrace_create_warnings ();
-+
-+ throw_error (ex.error, "%s%s", result.c_str (), ex.message->c_str ());
-+ }
- }
-
- /* Callback for linux_proc_attach_tgid_threads. Attach to PTID if not
-diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c
---- a/gdb/nat/linux-ptrace.c
-+++ b/gdb/nat/linux-ptrace.c
-@@ -25,6 +25,10 @@
- #include <sys/procfs.h>
- #endif
-
-+#ifdef HAVE_SELINUX_SELINUX_H
-+# include <selinux/selinux.h>
-+#endif /* HAVE_SELINUX_SELINUX_H */
-+
- /* Stores the ptrace options supported by the running kernel.
- A value of -1 means we did not check for features yet. A value
- of 0 means there are no supported features. */
-@@ -50,6 +54,8 @@ linux_ptrace_attach_fail_reason (pid_t pid)
- "terminated"),
- (int) pid);
-
-+ result += linux_ptrace_create_warnings ();
-+
- return result;
- }
-
-@@ -586,6 +592,25 @@ linux_ptrace_init_warnings (void)
- linux_ptrace_test_ret_to_nx ();
- }
-
-+/* Print all possible reasons we could fail to create a traced process. */
-+
-+std::string
-+linux_ptrace_create_warnings ()
-+{
-+ std::string result;
-+
-+#ifdef HAVE_LIBSELINUX
-+ /* -1 is returned for errors, 0 if it has no effect, 1 if PTRACE_ATTACH is
-+ forbidden. */
-+ if (security_get_boolean_active ("deny_ptrace") == 1)
-+ string_appendf (result,
-+ _("the SELinux boolean 'deny_ptrace' is enabled, "
-+ "you can disable this process attach protection by: "
-+ "(gdb) shell sudo setsebool deny_ptrace=0\n"));
-+#endif /* HAVE_LIBSELINUX */
-+ return result;
-+}
-+
- /* Extract extended ptrace event from wait status. */
-
- int
-diff --git a/gdb/nat/linux-ptrace.h b/gdb/nat/linux-ptrace.h
---- a/gdb/nat/linux-ptrace.h
-+++ b/gdb/nat/linux-ptrace.h
-@@ -184,6 +184,7 @@ extern std::string linux_ptrace_attach_fail_reason (pid_t pid);
- extern std::string linux_ptrace_attach_fail_reason_string (ptid_t ptid, int err);
-
- extern void linux_ptrace_init_warnings (void);
-+extern std::string linux_ptrace_create_warnings ();
- extern void linux_check_ptrace_features (void);
- extern void linux_enable_event_reporting (pid_t pid, int attached);
- extern void linux_disable_event_reporting (pid_t pid);
diff --git a/gdb-bz1219747-attach-kills.patch b/gdb-bz1219747-attach-kills.patch
index 69c8658..fb3a349 100644
--- a/gdb-bz1219747-attach-kills.patch
+++ b/gdb-bz1219747-attach-kills.patch
@@ -80,7 +80,7 @@ gdb/testsuite/ChangeLog
diff --git a/gdb/main.c b/gdb/main.c
--- a/gdb/main.c
+++ b/gdb/main.c
-@@ -1148,7 +1148,10 @@ captured_main_1 (struct captured_main_args *context)
+@@ -1199,7 +1199,10 @@ captured_main_1 (struct captured_main_args *context)
{
ret = catch_command_errors (attach_command, pid_or_core_arg,
!batch_flag);
diff --git a/gdb-bz533176-fortran-omp-step.patch b/gdb-bz533176-fortran-omp-step.patch
index ee426ce..5264115 100644
--- a/gdb-bz533176-fortran-omp-step.patch
+++ b/gdb-bz533176-fortran-omp-step.patch
@@ -30,7 +30,7 @@ debugging problem of GOMP outside of the scope of this Bug.
diff --git a/gdb/infrun.c b/gdb/infrun.c
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
-@@ -6453,6 +6453,16 @@ process_event_stop_test (struct execution_control_state *ecs)
+@@ -6788,6 +6788,16 @@ process_event_stop_test (struct execution_control_state *ecs)
if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL)
{
@@ -47,7 +47,7 @@ diff --git a/gdb/infrun.c b/gdb/infrun.c
/* We're doing a "next".
Normal (forward) execution: set a breakpoint at the
-@@ -6486,6 +6496,7 @@ process_event_stop_test (struct execution_control_state *ecs)
+@@ -6821,6 +6831,7 @@ process_event_stop_test (struct execution_control_state *ecs)
keep_going (ecs);
return;
diff --git a/gdb-container-rh-pkg.patch b/gdb-container-rh-pkg.patch
index b095d4b..04a7f3c 100644
--- a/gdb-container-rh-pkg.patch
+++ b/gdb-container-rh-pkg.patch
@@ -9,7 +9,7 @@ Subject: gdb-container-rh-pkg.patch
diff --git a/gdb/remote.c b/gdb/remote.c
--- a/gdb/remote.c
+++ b/gdb/remote.c
-@@ -13916,7 +13916,17 @@ remote_target::pid_to_exec_file (int pid)
+@@ -14031,7 +14031,17 @@ remote_target::pid_to_exec_file (int pid)
char *annex = NULL;
if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
@@ -26,5 +26,5 @@ diff --git a/gdb/remote.c b/gdb/remote.c
+ return NULL;
+ }
- inf = find_inferior_pid (pid);
+ inferior *inf = find_inferior_pid (this, pid);
if (inf == NULL)
diff --git a/gdb-fedora-libncursesw.patch b/gdb-fedora-libncursesw.patch
index 960193f..7c620fb 100644
--- a/gdb-fedora-libncursesw.patch
+++ b/gdb-fedora-libncursesw.patch
@@ -12,7 +12,7 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1270534
diff --git a/gdb/configure b/gdb/configure
--- a/gdb/configure
+++ b/gdb/configure
-@@ -9375,6 +9375,7 @@ if test x"$prefer_curses" = xyes; then
+@@ -9649,6 +9649,7 @@ if test x"$prefer_curses" = xyes; then
# search /usr/local/include, if ncurses is installed in /usr/local. A
# default installation of ncurses on alpha*-dec-osf* will lead to such
# a situation.
@@ -20,7 +20,7 @@ diff --git a/gdb/configure b/gdb/configure
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing waddstr" >&5
$as_echo_n "checking for library containing waddstr... " >&6; }
if ${ac_cv_search_waddstr+:} false; then :
-@@ -9399,7 +9400,7 @@ return waddstr ();
+@@ -9673,7 +9674,7 @@ return waddstr ();
return 0;
}
_ACEOF
@@ -29,7 +29,7 @@ diff --git a/gdb/configure b/gdb/configure
if test -z "$ac_lib"; then
ac_res="none required"
else
-@@ -9473,6 +9474,7 @@ case $host_os in
+@@ -9747,6 +9748,7 @@ case $host_os in
esac
# These are the libraries checked by Readline.
@@ -37,7 +37,7 @@ diff --git a/gdb/configure b/gdb/configure
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
$as_echo_n "checking for library containing tgetent... " >&6; }
if ${ac_cv_search_tgetent+:} false; then :
-@@ -9497,7 +9499,7 @@ return tgetent ();
+@@ -9771,7 +9773,7 @@ return tgetent ();
return 0;
}
_ACEOF
@@ -49,7 +49,7 @@ diff --git a/gdb/configure b/gdb/configure
diff --git a/gdb/configure.ac b/gdb/configure.ac
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
-@@ -717,7 +717,8 @@ if test x"$prefer_curses" = xyes; then
+@@ -712,7 +712,8 @@ if test x"$prefer_curses" = xyes; then
# search /usr/local/include, if ncurses is installed in /usr/local. A
# default installation of ncurses on alpha*-dec-osf* will lead to such
# a situation.
@@ -59,7 +59,7 @@ diff --git a/gdb/configure.ac b/gdb/configure.ac
if test "$ac_cv_search_waddstr" != no; then
curses_found=yes
-@@ -759,7 +760,8 @@ case $host_os in
+@@ -754,7 +755,8 @@ case $host_os in
esac
# These are the libraries checked by Readline.
diff --git a/gdb-gnat-dwarf-crash-3of3.patch b/gdb-gnat-dwarf-crash-3of3.patch
index 52892e4..4197661 100644
--- a/gdb-gnat-dwarf-crash-3of3.patch
+++ b/gdb-gnat-dwarf-crash-3of3.patch
@@ -39,10 +39,10 @@ gdb/
* dwarf2read.c (process_die): Change gdb_assert to complaint.
-diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
---- a/gdb/dwarf2read.c
-+++ b/gdb/dwarf2read.c
-@@ -10657,6 +10657,13 @@ private:
+diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
+--- a/gdb/dwarf2/read.c
++++ b/gdb/dwarf2/read.c
+@@ -10162,6 +10162,13 @@ class process_die_scope
static void
process_die (struct die_info *die, struct dwarf2_cu *cu)
{
@@ -56,27 +56,10 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
process_die_scope scope (die, cu);
switch (die->tag)
-diff --git a/gdb/infrun.c b/gdb/infrun.c
---- a/gdb/infrun.c
-+++ b/gdb/infrun.c
-@@ -601,6 +601,13 @@ holding the child stopped. Try \"set detach-on-fork\" or \
- target_pid_to_str (process_ptid).c_str ());
- }
-
-+#ifdef NEED_DETACH_SIGSTOP
-+ /* We should check PID_WAS_STOPPED and detach it stopped accordingly.
-+ In this point of code it cannot be 1 as we would not get FORK
-+ executed without CONTINUE first which resets PID_WAS_STOPPED.
-+ We would have to first TARGET_STOP and WAITPID it as with running
-+ inferior PTRACE_DETACH, SIGSTOP will ignore the signal. */
-+#endif
- target_detach (parent_inf, 0);
- }
-
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
-@@ -189,6 +189,12 @@ struct linux_nat_target *linux_target;
+@@ -190,6 +190,12 @@ struct linux_nat_target *linux_target;
/* Does the current host support PTRACE_GETREGSET? */
enum tribool have_ptrace_getregset = TRIBOOL_UNKNOWN;
@@ -89,17 +72,17 @@ diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
static unsigned int debug_linux_nat;
static void
show_debug_linux_nat (struct ui_file *file, int from_tty,
-@@ -1030,6 +1036,9 @@ linux_nat_post_attach_wait (ptid_t ptid, int *signalled)
- if (debug_linux_nat)
- fprintf_unfiltered (gdb_stdlog,
- "LNPAW: Attaching to a stopped process\n");
+@@ -1044,6 +1050,9 @@ linux_nat_post_attach_wait (ptid_t ptid, int *signalled)
+ if (linux_proc_pid_is_stopped (pid))
+ {
+ linux_nat_debug_printf ("Attaching to a stopped process");
+#ifdef NEED_DETACH_SIGSTOP
+ pid_was_stopped = ptid.pid ();
+#endif
/* The process is definitely stopped. It is in a job control
stop, unless the kernel predates the TASK_STOPPED /
-@@ -1361,6 +1370,25 @@ get_detach_signal (struct lwp_info *lp)
+@@ -1359,6 +1368,25 @@ get_detach_signal (struct lwp_info *lp)
return gdb_signal_to_host (signo);
}
@@ -125,7 +108,7 @@ diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
return 0;
}
-@@ -1509,6 +1537,10 @@ linux_nat_target::detach (inferior *inf, int from_tty)
+@@ -1502,6 +1530,10 @@ linux_nat_target::detach (inferior *inf, int from_tty)
detach_one_lwp (main_lwp, &signo);
detach_success (inf);
@@ -136,7 +119,7 @@ diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
}
}
-@@ -1766,6 +1798,16 @@ linux_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
+@@ -1744,6 +1776,16 @@ linux_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
return;
}
@@ -153,7 +136,7 @@ diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
if (resume_many)
iterate_over_lwps (ptid, [=] (struct lwp_info *info)
{
-@@ -3770,6 +3812,10 @@ linux_nat_target::mourn_inferior ()
+@@ -3617,6 +3659,10 @@ linux_nat_target::mourn_inferior ()
/* Let the arch-specific native code know this process is gone. */
linux_target->low_forget_process (pid);
diff --git a/gdb-jit-reader-multilib.patch b/gdb-jit-reader-multilib.patch
index ec41f13..4bce5fc 100644
--- a/gdb-jit-reader-multilib.patch
+++ b/gdb-jit-reader-multilib.patch
@@ -9,7 +9,7 @@ Subject: gdb-jit-reader-multilib.patch
diff --git a/gdb/configure b/gdb/configure
--- a/gdb/configure
+++ b/gdb/configure
-@@ -9694,10 +9694,12 @@ _ACEOF
+@@ -9968,10 +9968,12 @@ _ACEOF
@@ -28,7 +28,7 @@ diff --git a/gdb/configure b/gdb/configure
diff --git a/gdb/configure.ac b/gdb/configure.ac
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
-@@ -808,10 +808,12 @@ AC_CHECK_SIZEOF(unsigned long long)
+@@ -803,10 +803,12 @@ AC_CHECK_SIZEOF(unsigned long long)
AC_CHECK_SIZEOF(unsigned long)
AC_CHECK_SIZEOF(unsigned __int128)
diff --git a/gdb-linux_perf-bundle.patch b/gdb-linux_perf-bundle.patch
index db9e7c8..728f463 100644
--- a/gdb-linux_perf-bundle.patch
+++ b/gdb-linux_perf-bundle.patch
@@ -6,30 +6,6 @@ Subject: gdb-linux_perf-bundle.patch
;; [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
;;=fedora
-diff --git a/gdb/configure b/gdb/configure
---- a/gdb/configure
-+++ b/gdb/configure
-@@ -11905,7 +11905,7 @@ else
-
- #include <linux/perf_event.h>
- #ifndef PERF_ATTR_SIZE_VER5
--# error
-+// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL
- #endif
-
- _ACEOF
-diff --git a/gdb/configure.ac b/gdb/configure.ac
---- a/gdb/configure.ac
-+++ b/gdb/configure.ac
-@@ -1414,7 +1414,7 @@ else
- AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
- #include <linux/perf_event.h>
- #ifndef PERF_ATTR_SIZE_VER5
--# error
-+// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL
- #endif
- ]])], [perf_event=yes], [perf_event=no])
- if test "$perf_event" != yes; then
diff --git a/gdb/gdb.c b/gdb/gdb.c
--- a/gdb/gdb.c
+++ b/gdb/gdb.c
@@ -234,3 +210,15 @@ diff --git a/gdb/nat/linux-btrace.h b/gdb/nat/linux-btrace.h
struct target_ops;
#if HAVE_LINUX_PERF_EVENT_H
+diff --git a/gdbsupport/common.m4 b/gdbsupport/common.m4
+--- a/gdbsupport/common.m4
++++ b/gdbsupport/common.m4
+@@ -145,7 +145,7 @@ AC_DEFUN([GDB_AC_COMMON], [
+ AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
+ #include <linux/perf_event.h>
+ #ifndef PERF_ATTR_SIZE_VER5
+- # error
++ // error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL
+ #endif
+ ]])], [perf_event=yes], [perf_event=no])
+ if test "$perf_event" != yes; then
diff --git a/gdb-ltofix.patch b/gdb-ltofix.patch
deleted file mode 100644
index e30f6f8..0000000
--- a/gdb-ltofix.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Nrup a/gdb/gdbserver/ax.c b/gdb/gdbserver/ax.c
---- a/gdb/gdbserver/ax.c 2019-11-18 18:49:19.000000000 -0700
-+++ b/gdb/gdbserver/ax.c 2019-12-19 21:30:19.512505411 -0700
-@@ -25,7 +25,7 @@
- static void ax_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
-
- #ifdef IN_PROCESS_AGENT
--int debug_agent = 0;
-+bool debug_agent = 0;
- #endif
-
- static void
diff --git a/gdb-moribund-utrace-workaround.patch b/gdb-moribund-utrace-workaround.patch
index f2da872..869fc75 100644
--- a/gdb-moribund-utrace-workaround.patch
+++ b/gdb-moribund-utrace-workaround.patch
@@ -14,10 +14,10 @@ Bug in FSF GDB exploited by the ptrace-on-utrace interaction.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
-@@ -11904,6 +11904,8 @@ update_global_location_list (enum ugll_insert_mode insert_mode)
- traps we can no longer explain. */
-
- old_loc->events_till_retirement = 3 * (thread_count () + 1);
+@@ -11948,6 +11948,8 @@ update_global_location_list (enum ugll_insert_mode insert_mode)
+ = 3 * (thread_count (proc_target) + 1);
+ else
+ old_loc->events_till_retirement = 1;
+ /* Red Hat Bug 590623. */
+ old_loc->events_till_retirement *= 10;
old_loc->owner = NULL;
diff --git a/gdb-rhbz1818011-bfd-gcc10-error.patch b/gdb-rhbz1818011-bfd-gcc10-error.patch
deleted file mode 100644
index 6740326..0000000
--- a/gdb-rhbz1818011-bfd-gcc10-error.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
-From: Kevin Buettner <kevinb@redhat.com>
-Date: Wed, 8 Apr 2020 16:15:52 -0400
-Subject: gdb-rhbz1818011-bfd-gcc10-error.patch
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-;; Fix int conversion error from bfd/elf.c when compiling with gcc 10
-
-Original commit message from H.J. Lu <hjl.tools@gmail.com> is below:
-
-bfd: Change num_group to unsigned int
-
-elf.c failed with to with GCC 10 as of
-
-commit 906b3eb9df6c577d3f6e9c3ea5c9d7e4d1e90536
-Author: Martin Liska <mliska@suse.cz>
-Date: Tue Mar 24 11:40:10 2020 +0100
-
- Improve endianess detection.
-
- PR lto/94249
- * plugin-api.h: Add more robust endianess detection.
-
-binutils-gdb/bfd/elf.c: In function ‘setup_group’:
-binutils-gdb/bfd/elf.c:740:35: error: overflow in conversion from ‘unsigned int’ to ‘int’ changes value from ‘num_group = 4294967295’ to ‘-1’ [-Werror=overflow]
- 740 | elf_tdata (abfd)->num_group = num_group = -1;
- | ^~~~~~~~~
-cc1: all warnings being treated as errors
-make[2]: *** [Makefile:1608: elf.lo] Error 1
-
-Change num_group in elf_obj_tdata to unsigned int to compile with GCC 10.
-
- PR binutils/25717
- * elf-bfd.h (elf_obj_tdata): Change num_group to unsigned int.
-
-diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
---- a/bfd/elf-bfd.h
-+++ b/bfd/elf-bfd.h
-@@ -1937,7 +1937,7 @@ struct elf_obj_tdata
- struct sdt_note *sdt_note_head;
-
- Elf_Internal_Shdr **group_sect_ptr;
-- int num_group;
-+ unsigned int num_group;
-
- /* Index into group_sect_ptr, updated by setup_group when finding a
- section's group. Used to optimize subsequent group searches. */
diff --git a/gdb-rhbz1822715-fix-python-deprecation.patch b/gdb-rhbz1822715-fix-python-deprecation.patch
deleted file mode 100644
index 6d7c10b..0000000
--- a/gdb-rhbz1822715-fix-python-deprecation.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
-From: Kevin Buettner <kevinb@redhat.com>
-Date: Thu, 16 Apr 2020 05:27:26 -0700
-Subject: gdb-rhbz1822715-fix-python-deprecation.patch
-
-;; Backport fix for deprecation of PyEval_InitThreads in Python 3.9.
-
-Fix compilation of python/python.c for Python 3.9
-
-This commit fixes a compilation warning/error when building GDB
-with Python 3.9:
-
-g++ -x c++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DDNF_DEBUGINFO_INSTALL -I. -I../../gdb -I../../gdb/config -DLOCALEDIR="\"/usr/share/locale\"" -DHAVE_CONFIG_H -I../../gdb/../include/opcode -I../bfd -I../../gdb/../bfd -I../../gdb/../include -I../libdecnumber -I../../gdb/../libdecnumber -I../../gdb/../gnulib/import -I../gnulib/import -DTUI=1 -I/usr/include/guile/2.0 -pthread -I/usr/include/python3.9 -I/usr/include/python3.9 -I../../gdb/.. -pthread -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wno-mismatched-tags -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wdeprecated-copy -Wdeprecated-copy-dtor -Wredundant-move -Wformat -Wformat-nonliteral -Wno-unused -Werror -c -o ser-tcp.o -MT ser-tcp.o -MMD -MP -MF ./.deps/ser-tcp.Tpo ../../gdb/ser-tcp.c
-../../gdb/python/python.c: In function 'bool do_start_initialization()':
-../../gdb/python/python.c:1621:23: error: 'void PyEval_InitThreads()' is deprecated [-Werror=deprecated-declarations]
- 1621 | PyEval_InitThreads ();
- | ^
-In file included from /usr/include/python3.9/Python.h:141,
- from ../../gdb/python/python-internal.h:86,
- from ../../gdb/python/python.c:92:
-/usr/include/python3.9/ceval.h:132:37: note: declared here
- 132 | Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void);
- | ^~~~~~~~~~~~~~~~~~
-
-Information about the deprecated function can be found here:
-
-https://docs.python.org/3.9/whatsnew/3.9.html#deprecated
-
-Specifically, with regard to PyEval_InitThreads(), it says:
-
- The PyEval_InitThreads() and PyEval_ThreadsInitialized() functions
- are now deprecated and will be removed in Python 3.11. Calling
- PyEval_InitThreads() now does nothing. The GIL is initialized by
- Py_Initialize() since Python 3.7. (Contributed by Victor Stinner
- in bpo-39877.)
-
-I chose to disable the call with a #if test using PY_VERSION_HEX.
-There is precedent for use of PY_VERSION_HEX; it's used in two places
-in python-internal.h. I noticed that under certain circumstances
-python-internal.h defines PyEval_InitThreads to be nothing, which
-accomplishes the same thing. I considered doing something similar for
-this case, but decided against it because, at some point in the future,
-the presence of PyEval_InitThreads() without some explanation will be
-confusing to a reader who won't be able to find PyEval_InitThreads in
-the current (future for us) Python API. IMO, use of the #if along
-with an accompanying comment seemed more straightforward.
-
-gdb/ChangeLog:
-
- * python/python.c (do_start_initialization): Don't call
- PyEval_InitThreads for Python 3.9 and beyond.
-
-Change-Id: I0679fc10b6b76761a99538568f13188c6d8014e0
-
-diff --git a/gdb/python/python.c b/gdb/python/python.c
---- a/gdb/python/python.c
-+++ b/gdb/python/python.c
-@@ -1618,7 +1618,12 @@ do_start_initialization ()
- #endif
-
- Py_Initialize ();
-+#if PY_VERSION_HEX < 0x03090000
-+ /* PyEval_InitThreads became deprecated in Python 3.9 and will
-+ be removed in Python 3.11. Prior to Python 3.7, this call was
-+ required to initialize the GIL. */
- PyEval_InitThreads ();
-+#endif
-
- #ifdef IS_PY3K
- gdb_module = PyImport_ImportModule ("_gdb");
diff --git a/gdb-rhbz1829702-fix-python39.patch b/gdb-rhbz1829702-fix-python39.patch
deleted file mode 100644
index d4eef56..0000000
--- a/gdb-rhbz1829702-fix-python39.patch
+++ /dev/null
@@ -1,224 +0,0 @@
-From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
-From: Keith Seitz <keiths@redhat.com>
-Date: Thu, 4 Jun 2020 17:16:48 -0700
-Subject: gdb-rhbz1829702-fix-python39.patch
-
-;; Backport "Fix Python 3.9 related runtime problems"
-;; Kevin Buettner <kevinb@redhat.com> and Keith Seitz <keiths@redhat.com>
-
-commit c47bae859a5af0d95224d90000df0e529f7c5aa0
-Author: Kevin Buettner <kevinb@redhat.com>
-Date: Wed May 27 20:05:40 2020 -0700
-
- Fix Python3.9 related runtime problems
-
- Python3.9b1 is now available on Rawhide. GDB w/ Python 3.9 support
- can be built using the configure switch -with-python=/usr/bin/python3.9.
-
- Attempting to run gdb/Python3.9 segfaults on startup:
-
- #0 0x00007ffff7b0582c in PyEval_ReleaseLock () from /lib64/libpython3.9
-.so.1.0
- #1 0x000000000069ccbf in do_start_initialization ()
- at worktree-test1/gdb/python/python.c:1789
- #2 _initialize_python ()
- at worktree-test1/gdb/python/python.c:1877
- #3 0x00000000007afb0a in initialize_all_files () at init.c:237
- ...
-
- Consulting the the documentation...
-
- https://docs.python.org/3/c-api/init.html
-
- ...we find that PyEval_ReleaseLock() has been deprecated since version
- 3.2. It recommends using PyEval_SaveThread or PyEval_ReleaseThread()
- instead. In do_start_initialization, in gdb/python/python.c, we
- can replace the calls to PyThreadState_Swap() and PyEval_ReleaseLock()
- with a single call to PyEval_SaveThread. (Thanks to Keith Seitz
- for working this out.)
-
- With that in place, GDB gets a little bit further. It still dies
- on startup, but the backtrace is different:
-
- #0 0x00007ffff7b04306 in PyOS_InterruptOccurred ()
- from /lib64/libpython3.9.so.1.0
- #1 0x0000000000576e86 in check_quit_flag ()
- at worktree-test1/gdb/extension.c:776
- #2 0x0000000000576f8a in set_active_ext_lang (now_active=now_active@entry=0x983c00 <extension_language_python>)
- at worktree-test1/gdb/extension.c:705
- #3 0x000000000069d399 in gdbpy_enter::gdbpy_enter (this=0x7fffffffd2d0,
- gdbarch=0x0, language=0x0)
- at worktree-test1/gdb/python/python.c:211
- #4 0x0000000000686e00 in python_new_inferior (inf=0xddeb10)
- at worktree-test1/gdb/python/py-inferior.c:251
- #5 0x00000000005d9fb9 in std::function<void (inferior*)>::operator()(inferior*) const (__args#0=<optimized out>, this=0xccad20)
- at /usr/include/c++/10/bits/std_function.h:617
- #6 gdb::observers::observable<inferior*>::notify (args#0=0xddeb10,
- this=<optimized out>)
- at worktree-test1/gdb/../gdbsupport/observable.h:106
- #7 add_inferior_silent (pid=0)
- at worktree-test1/gdb/inferior.c:113
- #8 0x00000000005dbcb8 in initialize_inferiors ()
- at worktree-test1/gdb/inferior.c:947
- ...
-
- We checked with some Python Developers and were told that we should
- acquire the GIL prior to calling any Python C API function. We
- definitely don't have the GIL for calls of PyOS_InterruptOccurred().
-
- I moved class_gdbpy_gil earlier in the file and use it in
- gdbpy_check_quit_flag() to acquire (and automatically release) the
- GIL.
-
- With those changes in place, I was able to run to a GDB prompt. But,
- when trying to quit, it segfaulted again due to due to some other
- problems with gdbpy_check_quit_flag():
-
- Thread 1 "gdb" received signal SIGSEGV, Segmentation fault.
- 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0
- (top-gdb) bt 8
- #0 0x00007ffff7bbab0c in new_threadstate () from /lib64/libpython3.9.so.1.0
- #1 0x00007ffff7afa5ea in PyGILState_Ensure.cold ()
- from /lib64/libpython3.9.so.1.0
- #2 0x000000000069b58c in gdbpy_gil::gdbpy_gil (this=<synthetic pointer>)
- at worktree-test1/gdb/python/python.c:278
- #3 gdbpy_check_quit_flag (extlang=<optimized out>)
- at worktree-test1/gdb/python/python.c:278
- #4 0x0000000000576e96 in check_quit_flag ()
- at worktree-test1/gdb/extension.c:776
- #5 0x000000000057700c in restore_active_ext_lang (previous=0xe9c050)
- at worktree-test1/gdb/extension.c:729
- #6 0x000000000088913a in do_my_cleanups (
- pmy_chain=0xc31870 <final_cleanup_chain>,
- old_chain=0xae5720 <sentinel_cleanup>)
- at worktree-test1/gdbsupport/cleanups.cc:131
- #7 do_final_cleanups ()
- at worktree-test1/gdbsupport/cleanups.cc:143
-
- In this case, we're trying to call a Python C API function after
- Py_Finalize() has been called from finalize_python(). I made
- finalize_python set gdb_python_initialized to false and then cause
- check_quit_flag() to return early when it's false.
-
- With these changes in place, GDB seems to be working again with
- Python3.9b1. I think it likely that there are other problems lurking.
- I wouldn't be surprised to find that there are other calls into Python
- where we don't first make sure that we have the GIL. Further changes
- may well be needed.
-
- I see no regressions testing on Rawhide using a GDB built with the
- default Python version (3.8.3) versus one built using Python 3.9b1.
-
- I've also tested on Fedora 28, 29, 30, 31, and 32 (all x86_64) using
- the default (though updated) system installed versions of Python on
- those OSes. This means that I've tested against Python versions
- 2.7.15, 2.7.17, 2.7.18, 3.7.7, 3.8.2, and 3.8.3. In each case GDB
- still builds without problem and shows no regressions after applying
- this patch.
-
- gdb/ChangeLog:
-
- 2020-MM-DD Kevin Buettner <kevinb@redhat.com>
- Keith Seitz <keiths@redhat.com>
-
- * python/python.c (do_start_initialization): For Python 3.9 and
- later, call PyEval_SaveThread instead of PyEval_ReleaseLock.
- (class gdbpy_gil): Move to earlier in file.
- (finalize_python): Set gdb_python_initialized.
- (gdbpy_check_quit_flag): Acquire GIL via gdbpy_gil. Return early
- when not initialized.
-
-diff --git a/gdb/python/python.c b/gdb/python/python.c
---- a/gdb/python/python.c
-+++ b/gdb/python/python.c
-@@ -234,6 +234,30 @@ gdbpy_enter::~gdbpy_enter ()
- PyGILState_Release (m_state);
- }
-
-+/* A helper class to save and restore the GIL, but without touching
-+ the other globals that are handled by gdbpy_enter. */
-+
-+class gdbpy_gil
-+{
-+public:
-+
-+ gdbpy_gil ()
-+ : m_state (PyGILState_Ensure ())
-+ {
-+ }
-+
-+ ~gdbpy_gil ()
-+ {
-+ PyGILState_Release (m_state);
-+ }
-+
-+ DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
-+
-+private:
-+
-+ PyGILState_STATE m_state;
-+};
-+
- /* Set the quit flag. */
-
- static void
-@@ -247,6 +271,10 @@ gdbpy_set_quit_flag (const struct extension_language_defn *extlang)
- static int
- gdbpy_check_quit_flag (const struct extension_language_defn *extlang)
- {
-+ if (!gdb_python_initialized)
-+ return 0;
-+
-+ gdbpy_gil gil;
- return PyOS_InterruptOccurred ();
- }
-
-@@ -924,30 +952,6 @@ gdbpy_source_script (const struct extension_language_defn *extlang,
-
- /* Posting and handling events. */
-
--/* A helper class to save and restore the GIL, but without touching
-- the other globals that are handled by gdbpy_enter. */
--
--class gdbpy_gil
--{
--public:
--
-- gdbpy_gil ()
-- : m_state (PyGILState_Ensure ())
-- {
-- }
--
-- ~gdbpy_gil ()
-- {
-- PyGILState_Release (m_state);
-- }
--
-- DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
--
--private:
--
-- PyGILState_STATE m_state;
--};
--
- /* A single event. */
- struct gdbpy_event
- {
-@@ -1548,6 +1552,7 @@ finalize_python (void *ignore)
-
- Py_Finalize ();
-
-+ gdb_python_initialized = false;
- restore_active_ext_lang (previous_active);
- }
-
-@@ -1720,8 +1725,7 @@ do_start_initialization ()
- return false;
-
- /* Release the GIL while gdb runs. */
-- PyThreadState_Swap (NULL);
-- PyEval_ReleaseLock ();
-+ PyEval_SaveThread ();
-
- make_final_cleanup (finalize_python, NULL);
-
diff --git a/gdb-rhbz1838777-debuginfod.patch b/gdb-rhbz1838777-debuginfod.patch
deleted file mode 100644
index 6c91851..0000000
--- a/gdb-rhbz1838777-debuginfod.patch
+++ /dev/null
@@ -1,1188 +0,0 @@
-From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
-From: Keith Seitz <keiths@redhat.com>
-Date: Tue, 9 Jun 2020 08:29:41 -0700
-Subject: gdb-rhbz1838777-debuginfod.patch
-
-;; Backport debuginofd support.
-;; (Aaron Merey, RH BZ 183877)
-
-commit 0d79cdc494d5eb9db26a602d62c92d49f83f407e
-Author: Aaron Merey <amerey@redhat.com>
-Date: Wed Feb 26 17:40:49 2020 -0500
-
- Add debuginfod support to GDB
-
- debuginfod is a lightweight web service that indexes ELF/DWARF debugging
- resources by build-id and serves them over HTTP.
-
- This patch enables GDB to query debuginfod servers for separate debug
- files and source code when it is otherwise not able to find them.
-
- GDB can be built with debuginfod using the --with-debuginfod configure
- option.
-
- This requires that libdebuginfod be installed and found at configure time.
-
- debuginfod is packaged with elfutils, starting with version 0.178.
-
- For more information see https://sourceware.org/elfutils/.
-
- Tested on x86_64 Fedora 31.
-
- gdb/ChangeLog:
- 2020-02-26 Aaron Merey <amerey@redhat.com>
-
- * Makefile.in: Handle optional debuginfod support.
- * NEWS: Update.
- * README: Add --with-debuginfod summary.
- * config.in: Regenerate.
- * configure: Regenerate.
- * configure.ac: Handle optional debuginfod support.
- * debuginfod-support.c: debuginfod helper functions.
- * debuginfod-support.h: Ditto.
- * doc/gdb.texinfo: Add --with-debuginfod to configure options
- summary.
- * dwarf2/read.c (dwarf2_get_dwz_file): Query debuginfod servers
- when a dwz file cannot be found.
- * elfread.c (elf_symfile_read): Query debuginfod servers when a
- debuginfo file cannot be found.
- * source.c (open_source_file): Query debuginfod servers when a
- source file cannot be found.
- * top.c (print_gdb_configuration): Include
- --{with,without}-debuginfod in the output.
-
- gdb/testsuite/ChangeLog:
- 2020-02-26 Aaron Merey <amerey@redhat.com>
-
- * gdb.debuginfod: New directory for debuginfod tests.
- * gdb.debuginfod/main.c: New test file.
- * gdb.debuginfod/fetch_src_and_symbols.exp: New tests.
-
-diff --git a/config/debuginfod.m4 b/config/debuginfod.m4
-new file mode 100644
---- /dev/null
-+++ b/config/debuginfod.m4
-@@ -0,0 +1,38 @@
-+dnl Copyright (C) 1997-2019 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+AC_DEFUN([AC_DEBUGINFOD],
-+[
-+# Enable debuginfod
-+AC_ARG_WITH([debuginfod],
-+ AC_HELP_STRING([--with-debuginfod],
-+ [Enable debuginfo lookups with debuginfod (auto/yes/no)]),
-+ [], [with_debuginfod=auto])
-+AC_MSG_CHECKING([whether to use debuginfod])
-+AC_MSG_RESULT([$with_debuginfod])
-+
-+if test "${with_debuginfod}" = no; then
-+ AC_MSG_WARN([debuginfod support disabled; some features may be unavailable.])
-+else
-+ AC_CHECK_LIB([debuginfod], [debuginfod_begin], [have_debuginfod_lib=yes])
-+ AC_CHECK_DECL([debuginfod_begin], [have_debuginfod_h=yes], [],
-+ [#include <elfutils/debuginfod.h>])
-+ if test "x$have_debuginfod_lib" = "xyes" -a \
-+ "x$have_debuginfod_h" = "xyes"; then
-+ AC_DEFINE([HAVE_LIBDEBUGINFOD], [1],
-+ [Define to 1 if debuginfod is enabled.])
-+ AC_SUBST([LIBDEBUGINFOD], ["-ldebuginfod"])
-+ else
-+ AC_SUBST([LIBDEBUGINFOD], [])
-+ if test "$with_debuginfod" = yes; then
-+ AC_MSG_ERROR([debuginfod is missing or unusable])
-+ else
-+ AC_MSG_WARN([debuginfod is missing or unusable; some features may be unavailable.])
-+ fi
-+ fi
-+fi
-+])
-diff --git a/gdb/Makefile.in b/gdb/Makefile.in
---- a/gdb/Makefile.in
-+++ b/gdb/Makefile.in
-@@ -612,7 +612,8 @@ CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(LIBCTF) $(ZLIB) \
- @LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \
- $(LIBEXPAT) $(LIBLZMA) $(LIBBABELTRACE) $(LIBIPT) \
- $(LIBIBERTY) $(WIN32LIBS) $(LIBGNU) $(LIBICONV) $(LIBMPFR) \
-- $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS)
-+ $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS) \
-+ @LIBDEBUGINFOD@
- CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(LIBCTF) \
- $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU)
-
-@@ -1016,6 +1017,7 @@ COMMON_SFILES = \
- dbxread.c \
- dcache.c \
- debug.c \
-+ debuginfod-support.c \
- dictionary.c \
- disasm.c \
- disasm-selftests.c \
-diff --git a/gdb/NEWS b/gdb/NEWS
---- a/gdb/NEWS
-+++ b/gdb/NEWS
-@@ -932,6 +932,20 @@ SH-5/SH64 running OpenBSD SH-5/SH64 support in sh*-*-openbsd*
- manual for a further description of this feature.
-
-
-+* GDB now supports debuginfod, an HTTP server for distributing ELF/DWARF
-+ debugging information as well as source code.
-+
-+ When built with debuginfod, GDB can automatically query debuginfod
-+ servers for the separate debug files and source code of the executable
-+ being debugged.
-+
-+ To build GDB with debuginfod, pass --with-debuginfod to configure (this
-+ requires libdebuginfod, the debuginfod client library).
-+
-+ debuginfod is distributed with elfutils, starting with version 0.178.
-+
-+ You can get the latest version from https://sourceware.org/elfutils.
-+
- * New features in the GDB remote stub, GDBserver
-
- ** GDBserver is now able to start inferior processes with a
-diff --git a/gdb/README b/gdb/README
---- a/gdb/README
-+++ b/gdb/README
-@@ -432,6 +432,15 @@ more obscure GDB `configure' options are not listed here.
- Use the curses library instead of the termcap library, for
- text-mode terminal operations.
-
-+`--with-debuginfod'
-+ Build GDB with libdebuginfod, the debuginfod client library. Used
-+ to automatically fetch source files and separate debug files from
-+ debuginfod servers using the associated executable's build ID.
-+ Enabled by default if libdebuginfod is installed and found at
-+ configure time. debuginfod is packaged with elfutils, starting
-+ with version 0.178. You can get the latest version from
-+ 'https://sourceware.org/elfutils/'.
-+
- `--with-libunwind-ia64'
- Use the libunwind library for unwinding function call stack on ia64
- target platforms.
-diff --git a/gdb/config.in b/gdb/config.in
---- a/gdb/config.in
-+++ b/gdb/config.in
-@@ -230,6 +230,9 @@
- /* Define if you have the babeltrace library. */
- #undef HAVE_LIBBABELTRACE
-
-+/* Define to 1 if debuginfod is enabled. */
-+#undef HAVE_LIBDEBUGINFOD
-+
- /* Define if you have the expat library. */
- #undef HAVE_LIBEXPAT
-
-diff --git a/gdb/configure b/gdb/configure
---- a/gdb/configure
-+++ b/gdb/configure
-@@ -758,6 +758,7 @@ REPORT_BUGS_TEXI
- REPORT_BUGS_TO
- PKGVERSION
- CODESIGN_CERT
-+LIBDEBUGINFOD
- HAVE_NATIVE_GCORE_TARGET
- TARGET_OBS
- subdirs
-@@ -875,6 +876,7 @@ enable_64_bit_bfd
- enable_gdbmi
- enable_tui
- enable_gdbtk
-+with_debuginfod
- with_libunwind_ia64
- with_curses
- enable_profiling
-@@ -1611,6 +1613,8 @@ Optional Packages:
- do not restrict auto-loaded files locations
- --with-rpm query rpm database for missing debuginfos (yes/no,
- def. auto=librpm.so)
-+ --with-debuginfod Enable debuginfo lookups with debuginfod
-+ (auto/yes/no)
- --with-libunwind-ia64 use libunwind frame unwinding for ia64 targets
- --with-curses use the curses library instead of the termcap
- library
-@@ -2271,6 +2275,52 @@ rm -f conftest.val
-
- } # ac_fn_c_compute_int
-
-+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-+# ---------------------------------------------
-+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-+# accordingly.
-+ac_fn_c_check_decl ()
-+{
-+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-+ as_decl_name=`echo $2|sed 's/ *(.*//'`
-+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-+if eval \${$3+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+$4
-+int
-+main ()
-+{
-+#ifndef $as_decl_name
-+#ifdef __cplusplus
-+ (void) $as_decl_use;
-+#else
-+ (void) $as_decl_name;
-+#endif
-+#endif
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_compile "$LINENO"; then :
-+ eval "$3=yes"
-+else
-+ eval "$3=no"
-+fi
-+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+eval ac_res=\$$3
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-+$as_echo "$ac_res" >&6; }
-+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-+
-+} # ac_fn_c_check_decl
-+
- # ac_fn_c_check_func LINENO FUNC VAR
- # ----------------------------------
- # Tests whether FUNC exists, setting the cache variable VAR accordingly
-@@ -2449,52 +2499,6 @@ $as_echo "$ac_res" >&6; }
-
- } # ac_fn_c_check_type
-
--# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
--# ---------------------------------------------
--# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
--# accordingly.
--ac_fn_c_check_decl ()
--{
-- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-- as_decl_name=`echo $2|sed 's/ *(.*//'`
-- as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
--$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
--if eval \${$3+:} false; then :
-- $as_echo_n "(cached) " >&6
--else
-- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h. */
--$4
--int
--main ()
--{
--#ifndef $as_decl_name
--#ifdef __cplusplus
-- (void) $as_decl_use;
--#else
-- (void) $as_decl_name;
--#endif
--#endif
--
-- ;
-- return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
-- eval "$3=yes"
--else
-- eval "$3=no"
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--eval ac_res=\$$3
-- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
--$as_echo "$ac_res" >&6; }
-- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
--
--} # ac_fn_c_check_decl
--
- # ac_fn_cxx_try_link LINENO
- # -------------------------
- # Try to link conftest.$ac_ext, and return whether this succeeded.
-@@ -6658,8 +6662,8 @@ $as_echo_n "checking specific librpm version... " >&6; }
- 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; }
-+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. */
-@@ -6830,7 +6834,7 @@ $as_echo "#define HAVE_LIBRPM 1" >>confdefs.h
- $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
-+ as_fn_error $? "Specific name $LIBRPM was requested but it could not be opened." "$LINENO" 5
- fi
-
-
-@@ -6845,7 +6849,7 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- 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 :
-+if ${ac_cv_path_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
- else
- case $PKG_CONFIG in
-@@ -6859,7 +6863,7 @@ 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
-+ if as_fn_executable_p "$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
-@@ -6888,7 +6892,7 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
- 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 :
-+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
- else
- case $ac_pt_PKG_CONFIG in
-@@ -6902,7 +6906,7 @@ 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
-+ if as_fn_executable_p "$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
-@@ -7086,7 +7090,7 @@ $as_echo "#define HAVE_LIBRPM 1" >>confdefs.h
- LIBS="$LIBS $RPM_LIBS"
- else
- if $RPM_REQUIRE; then
-- as_fn_error "$RPM_PKG_ERRORS" "$LINENO" 5
-+ 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;}
-@@ -7332,8 +7336,92 @@ $as_echo "$as_me: WARNING: gdbtk isn't supported on $host; disabling" >&2;}
- enable_gdbtk=no ;;
- esac
-
--# Libunwind support for ia64.
-+# Handle optional debuginfod support
-+
-+# Enable debuginfod
-+
-+# Check whether --with-debuginfod was given.
-+if test "${with_debuginfod+set}" = set; then :
-+ withval=$with_debuginfod;
-+else
-+ with_debuginfod=auto
-+fi
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use debuginfod" >&5
-+$as_echo_n "checking whether to use debuginfod... " >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_debuginfod" >&5
-+$as_echo "$with_debuginfod" >&6; }
-+
-+if test "${with_debuginfod}" = no; then
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: debuginfod support disabled; some features may be unavailable." >&5
-+$as_echo "$as_me: WARNING: debuginfod support disabled; some features may be unavailable." >&2;}
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for debuginfod_begin in -ldebuginfod" >&5
-+$as_echo_n "checking for debuginfod_begin in -ldebuginfod... " >&6; }
-+if ${ac_cv_lib_debuginfod_debuginfod_begin+:} false; then :
-+ $as_echo_n "(cached) " >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-ldebuginfod $LIBS"
-+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+/* Override any GCC internal prototype to avoid an error.
-+ Use char because int might match the return type of a GCC
-+ builtin and then its argument prototype would still apply. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+char debuginfod_begin ();
-+int
-+main ()
-+{
-+return debuginfod_begin ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+ ac_cv_lib_debuginfod_debuginfod_begin=yes
-+else
-+ ac_cv_lib_debuginfod_debuginfod_begin=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_debuginfod_debuginfod_begin" >&5
-+$as_echo "$ac_cv_lib_debuginfod_debuginfod_begin" >&6; }
-+if test "x$ac_cv_lib_debuginfod_debuginfod_begin" = xyes; then :
-+ have_debuginfod_lib=yes
-+fi
-+
-+ ac_fn_c_check_decl "$LINENO" "debuginfod_begin" "ac_cv_have_decl_debuginfod_begin" "#include <elfutils/debuginfod.h>
-+"
-+if test "x$ac_cv_have_decl_debuginfod_begin" = xyes; then :
-+ have_debuginfod_h=yes
-+fi
-+
-+ if test "x$have_debuginfod_lib" = "xyes" -a \
-+ "x$have_debuginfod_h" = "xyes"; then
-+
-+$as_echo "#define HAVE_LIBDEBUGINFOD 1" >>confdefs.h
-+
-+ LIBDEBUGINFOD="-ldebuginfod"
-
-+ else
-+
-+ if test "$with_debuginfod" = yes; then
-+ as_fn_error $? "debuginfod is missing or unusable" "$LINENO" 5
-+ else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: debuginfod is missing or unusable; some features may be unavailable." >&5
-+$as_echo "$as_me: WARNING: debuginfod is missing or unusable; some features may be unavailable." >&2;}
-+ fi
-+ fi
-+fi
-+
-+
-+# Libunwind support for ia64.
-
- # Check whether --with-libunwind-ia64 was given.
- if test "${with_libunwind_ia64+set}" = set; then :
-@@ -16441,7 +16529,7 @@ _ACEOF
- for ac_header in selinux/selinux.h
- do :
- ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default"
--if test "x$ac_cv_header_selinux_selinux_h" = x""yes; then :
-+if test "x$ac_cv_header_selinux_selinux_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
- #define HAVE_SELINUX_SELINUX_H 1
- _ACEOF
-@@ -16452,7 +16540,7 @@ done
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for security_get_boolean_active in -lselinux" >&5
- $as_echo_n "checking for security_get_boolean_active in -lselinux... " >&6; }
--if test "${ac_cv_lib_selinux_security_get_boolean_active+set}" = set; then :
-+if ${ac_cv_lib_selinux_security_get_boolean_active+:} false; then :
- $as_echo_n "(cached) " >&6
- else
- ac_check_lib_save_LIBS=$LIBS
-@@ -16486,7 +16574,7 @@ LIBS=$ac_check_lib_save_LIBS
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_security_get_boolean_active" >&5
- $as_echo "$ac_cv_lib_selinux_security_get_boolean_active" >&6; }
--if test "x$ac_cv_lib_selinux_security_get_boolean_active" = x""yes; then :
-+if test "x$ac_cv_lib_selinux_security_get_boolean_active" = xyes; then :
- cat >>confdefs.h <<_ACEOF
- #define HAVE_LIBSELINUX 1
- _ACEOF
-diff --git a/gdb/configure.ac b/gdb/configure.ac
---- a/gdb/configure.ac
-+++ b/gdb/configure.ac
-@@ -18,6 +18,8 @@ dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- dnl Process this file with autoconf to produce a configure script.
-
-+m4_include(../config/debuginfod.m4)
-+
- AC_INIT(main.c)
- AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h])
- AM_MAINTAINER_MODE
-@@ -516,8 +518,10 @@ case $host_os in
- enable_gdbtk=no ;;
- esac
-
--# Libunwind support for ia64.
-+# Handle optional debuginfod support
-+AC_DEBUGINFOD
-
-+# Libunwind support for ia64.
- AC_ARG_WITH(libunwind-ia64,
- AS_HELP_STRING([--with-libunwind-ia64],
- [use libunwind frame unwinding for ia64 targets]),,
-diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
-new file mode 100644
---- /dev/null
-+++ b/gdb/debuginfod-support.c
-@@ -0,0 +1,155 @@
-+/* debuginfod utilities for GDB.
-+ Copyright (C) 2020 Free Software Foundation, Inc.
-+
-+ This file is part of GDB.
-+
-+ 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 3 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, see <http://www.gnu.org/licenses/>. */
-+
-+#include "defs.h"
-+#include <errno.h>
-+#include "cli/cli-style.h"
-+#include "gdbsupport/scoped_fd.h"
-+#include "debuginfod-support.h"
-+
-+#ifndef HAVE_LIBDEBUGINFOD
-+scoped_fd
-+debuginfod_source_query (const unsigned char *build_id,
-+ int build_id_len,
-+ const char *srcpath,
-+ gdb::unique_xmalloc_ptr<char> *destname)
-+{
-+ return scoped_fd (-ENOSYS);
-+}
-+
-+scoped_fd
-+debuginfod_debuginfo_query (const unsigned char *build_id,
-+ int build_id_len,
-+ const char *filename,
-+ gdb::unique_xmalloc_ptr<char> *destname)
-+{
-+ return scoped_fd (-ENOSYS);
-+}
-+#else
-+#include <elfutils/debuginfod.h>
-+
-+/* TODO: Use debuginfod API extensions instead of these globals. */
-+static std::string desc;
-+static std::string fname;
-+static bool has_printed;
-+
-+static int
-+progressfn (debuginfod_client *c, long cur, long total)
-+{
-+ if (check_quit_flag ())
-+ {
-+ printf_filtered ("Cancelling download of %s %ps...\n",
-+ desc.c_str (),
-+ styled_string (file_name_style.style (), fname.c_str ()));
-+ return 1;
-+ }
-+
-+ if (!has_printed && total != 0)
-+ {
-+ /* Print this message only once. */
-+ has_printed = true;
-+ printf_filtered ("Downloading %s %ps...\n",
-+ desc.c_str (),
-+ styled_string (file_name_style.style (), fname.c_str ()));
-+ }
-+
-+ return 0;
-+}
-+
-+static debuginfod_client *
-+debuginfod_init ()
-+{
-+ debuginfod_client *c = debuginfod_begin ();
-+
-+ if (c != nullptr)
-+ debuginfod_set_progressfn (c, progressfn);
-+
-+ return c;
-+}
-+
-+/* See debuginfod-support.h */
-+
-+scoped_fd
-+debuginfod_source_query (const unsigned char *build_id,
-+ int build_id_len,
-+ const char *srcpath,
-+ gdb::unique_xmalloc_ptr<char> *destname)
-+{
-+ if (getenv (DEBUGINFOD_URLS_ENV_VAR) == NULL)
-+ return scoped_fd (-ENOSYS);
-+
-+ debuginfod_client *c = debuginfod_init ();
-+
-+ if (c == nullptr)
-+ return scoped_fd (-ENOMEM);
-+
-+ desc = std::string ("source file");
-+ fname = std::string (srcpath);
-+ has_printed = false;
-+
-+ scoped_fd fd (debuginfod_find_source (c,
-+ build_id,
-+ build_id_len,
-+ srcpath,
-+ nullptr));
-+
-+ /* TODO: Add 'set debug debuginfod' command to control when error messages are shown. */
-+ if (fd.get () < 0 && fd.get () != -ENOENT)
-+ printf_filtered (_("Download failed: %s. Continuing without source file %ps.\n"),
-+ safe_strerror (-fd.get ()),
-+ styled_string (file_name_style.style (), srcpath));
-+ else
-+ destname->reset (xstrdup (srcpath));
-+
-+ debuginfod_end (c);
-+ return fd;
-+}
-+
-+/* See debuginfod-support.h */
-+
-+scoped_fd
-+debuginfod_debuginfo_query (const unsigned char *build_id,
-+ int build_id_len,
-+ const char *filename,
-+ gdb::unique_xmalloc_ptr<char> *destname)
-+{
-+ if (getenv (DEBUGINFOD_URLS_ENV_VAR) == NULL)
-+ return scoped_fd (-ENOSYS);
-+
-+ debuginfod_client *c = debuginfod_init ();
-+
-+ if (c == nullptr)
-+ return scoped_fd (-ENOMEM);
-+
-+ desc = std::string ("separate debug info for");
-+ fname = std::string (filename);
-+ has_printed = false;
-+ char *dname = nullptr;
-+
-+ scoped_fd fd (debuginfod_find_debuginfo (c, build_id, build_id_len, &dname));
-+
-+ if (fd.get () < 0 && fd.get () != -ENOENT)
-+ printf_filtered (_("Download failed: %s. Continuing without debug info for %ps.\n"),
-+ safe_strerror (-fd.get ()),
-+ styled_string (file_name_style.style (), filename));
-+
-+ destname->reset (dname);
-+ debuginfod_end (c);
-+ return fd;
-+}
-+#endif
-diff --git a/gdb/debuginfod-support.h b/gdb/debuginfod-support.h
-new file mode 100644
---- /dev/null
-+++ b/gdb/debuginfod-support.h
-@@ -0,0 +1,62 @@
-+/* debuginfod utilities for GDB.
-+ Copyright (C) 2020 Free Software Foundation, Inc.
-+
-+ This file is part of GDB.
-+
-+ 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 3 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, see <http://www.gnu.org/licenses/>. */
-+
-+#ifndef DEBUGINFOD_SUPPORT_H
-+#define DEBUGINFOD_SUPPORT_H
-+
-+/* Query debuginfod servers for a source file associated with an
-+ executable with BUILD_ID. BUILD_ID can be given as a binary blob or
-+ a null-terminated string. If given as a binary blob, BUILD_ID_LEN
-+ should be the number of bytes. If given as a null-terminated string,
-+ BUILD_ID_LEN should be 0.
-+
-+ SRC_PATH should be the source file's absolute path that includes the
-+ compilation directory of the CU associated with the source file.
-+ For example if a CU's compilation directory is `/my/build` and the
-+ source file path is `/my/source/foo.c`, then SRC_PATH should be
-+ `/my/build/../source/foo.c`.
-+
-+ If the file is successfully retrieved, its path on the local machine
-+ is stored in DESTNAME. If GDB is not built with debuginfod, this
-+ function returns -ENOSYS. */
-+
-+extern scoped_fd
-+debuginfod_source_query (const unsigned char *build_id,
-+ int build_id_len,
-+ const char *src_path,
-+ gdb::unique_xmalloc_ptr<char> *destname);
-+
-+/* Query debuginfod servers for a debug info file with BUILD_ID.
-+ BUILD_ID can be given as a binary blob or a null-terminated string.
-+ If given as a binary blob, BUILD_ID_LEN should be the number of bytes.
-+ If given as a null-terminated string, BUILD_ID_LEN should be 0.
-+
-+ FILENAME should be the name or path of the main binary associated with
-+ the separate debug info. It is used for printing messages to the user.
-+
-+ If the file is successfully retrieved, its path on the local machine
-+ is stored in DESTNAME. If GDB is not built with debuginfod, this
-+ function returns -ENOSYS. */
-+
-+extern scoped_fd
-+debuginfod_debuginfo_query (const unsigned char *build_id,
-+ int build_id_len,
-+ const char *filename,
-+ gdb::unique_xmalloc_ptr<char> *destname);
-+
-+#endif /* DEBUGINFOD_SUPPORT_H */
-diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
---- a/gdb/doc/gdb.texinfo
-+++ b/gdb/doc/gdb.texinfo
-@@ -37726,6 +37726,14 @@ supported).
- Use the curses library instead of the termcap library, for text-mode
- terminal operations.
-
-+@item --with-debuginfod
-+Build @value{GDBN} with libdebuginfod, the debuginfod client library.
-+Used to automatically fetch source files and separate debug files from
-+debuginfod servers using the associated executable's build ID. Enabled
-+by default if libdebuginfod is installed and found at configure time.
-+debuginfod is packaged with elfutils, starting with version 0.178. You
-+can get the latest version from `https://sourceware.org/elfutils/'.
-+
- @item --with-libunwind-ia64
- Use the libunwind library for unwinding function call stack on ia64
- target platforms. See http://www.nongnu.org/libunwind/index.html for
-diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
---- a/gdb/dwarf2read.c
-+++ b/gdb/dwarf2read.c
-@@ -77,6 +77,7 @@
- #include "gdbsupport/selftest.h"
- #include "rust-lang.h"
- #include "gdbsupport/pathstuff.h"
-+#include "debuginfod-support.h"
-
- /* When == 1, print basic high level tracing messages.
- When > 1, be more verbose.
-@@ -2717,6 +2718,29 @@ dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
- dwz_bfd.reset (nullptr);
- }
-
-+ if (dwz_bfd == nullptr)
-+ {
-+ gdb::unique_xmalloc_ptr<char> alt_filename;
-+ const char *origname = dwarf2_per_objfile->objfile->original_name;
-+
-+ scoped_fd fd (debuginfod_debuginfo_query (buildid,
-+ buildid_len,
-+ origname,
-+ &alt_filename));
-+
-+ if (fd.get () >= 0)
-+ {
-+ /* File successfully retrieved from server. */
-+ dwz_bfd = gdb_bfd_open (alt_filename.get (), gnutarget, -1);
-+
-+ if (dwz_bfd == nullptr)
-+ warning (_("File \"%s\" from debuginfod cannot be opened as bfd"),
-+ alt_filename.get ());
-+ else if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid))
-+ dwz_bfd.reset (nullptr);
-+ }
-+ }
-+
- if (dwz_bfd == NULL)
- dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid, NULL);
-
-diff --git a/gdb/elfread.c b/gdb/elfread.c
---- a/gdb/elfread.c
-+++ b/gdb/elfread.c
-@@ -49,6 +49,8 @@
- #include "mdebugread.h"
- #include "ctfread.h"
- #include "gdbsupport/gdb_string_view.h"
-+#include "gdbsupport/scoped_fd.h"
-+#include "debuginfod-support.h"
-
- /* Forward declarations. */
- extern const struct sym_fns elf_sym_fns_gdb_index;
-@@ -1313,12 +1315,42 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
- symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
- symfile_flags, objfile);
- }
-- /* Check if any separate debug info has been extracted out. */
-- else if (bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink")
-- != NULL)
-- debug_print_missing (objfile_name (objfile), build_id_filename.get ());
- else
-- has_dwarf2 = false;
-+ {
-+ has_dwarf2 = false;
-+ const struct bfd_build_id *build_id = build_id_bfd_shdr_get (objfile->obfd);
-+
-+ if (build_id != nullptr)
-+ {
-+ gdb::unique_xmalloc_ptr<char> symfile_path;
-+ scoped_fd fd (debuginfod_debuginfo_query (build_id->data,
-+ build_id->size,
-+ objfile->original_name,
-+ &symfile_path));
-+
-+ if (fd.get () >= 0)
-+ {
-+ /* File successfully retrieved from server. */
-+ gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (symfile_path.get ()));
-+
-+ if (debug_bfd == nullptr)
-+ warning (_("File \"%s\" from debuginfod cannot be opened as bfd"),
-+ objfile->original_name);
-+ else if (build_id_verify (debug_bfd.get (), build_id->size, build_id->data))
-+ {
-+ symbol_file_add_separate (debug_bfd.get (), symfile_path.get (),
-+ symfile_flags, objfile);
-+ has_dwarf2 = true;
-+ }
-+ }
-+ /* Check if any separate debug info has been extracted out. */
-+ else if (bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink")
-+ != NULL)
-+ debug_print_missing (objfile_name (objfile), build_id_filename.get ());
-+ else
-+ has_dwarf2 = false;
-+ }
-+ }
- }
-
- /* Read the CTF section only if there is no DWARF info. */
-diff --git a/gdb/source.c b/gdb/source.c
---- a/gdb/source.c
-+++ b/gdb/source.c
-@@ -47,6 +47,8 @@
- #include "gdbsupport/pathstuff.h"
- #include "source-cache.h"
- #include "cli/cli-style.h"
-+#include "build-id.h"
-+#include "debuginfod-support.h"
-
- #define OPEN_MODE (O_RDONLY | O_BINARY)
- #define FDOPEN_MODE FOPEN_RB
-@@ -1122,6 +1124,34 @@ open_source_file (struct symtab *s)
- s->fullname = NULL;
- scoped_fd fd = find_and_open_source (s->filename, SYMTAB_DIRNAME (s),
- &fullname);
-+
-+ if (fd.get () < 0)
-+ {
-+ if (SYMTAB_COMPUNIT (s) != nullptr)
-+ {
-+ const objfile *ofp = COMPUNIT_OBJFILE (SYMTAB_COMPUNIT (s));
-+
-+ std::string srcpath;
-+ if (IS_ABSOLUTE_PATH (s->filename))
-+ srcpath = s->filename;
-+ else if (SYMTAB_DIRNAME (s) != nullptr)
-+ {
-+ srcpath = SYMTAB_DIRNAME (s);
-+ srcpath += SLASH_STRING;
-+ srcpath += s->filename;
-+ }
-+
-+ const struct bfd_build_id *build_id = build_id_bfd_shdr_get (ofp->obfd);
-+
-+ /* Query debuginfod for the source file. */
-+ if (build_id != nullptr)
-+ fd = debuginfod_source_query (build_id->data,
-+ build_id->size,
-+ srcpath.c_str (),
-+ &fullname);
-+ }
-+ }
-+
- s->fullname = fullname.release ();
- return fd;
- }
-diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
-new file mode 100644
---- /dev/null
-+++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
-@@ -0,0 +1,215 @@
-+# Copyright 2020 Free Software Foundation, Inc.
-+
-+# 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 3 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, see <http://www.gnu.org/licenses/>.
-+
-+# Test debuginfod functionality
-+
-+standard_testfile main.c
-+
-+load_lib dwarf.exp
-+
-+if { [which debuginfod] == 0 } {
-+ untested "cannot find debuginfod"
-+ return -1
-+}
-+
-+if { [which curl] == 0 } {
-+ untested "cannot find curl"
-+ return -1
-+}
-+
-+# Skip testing if gdb was not configured with debuginfod
-+if { [string first "with-debuginfod" \
-+ [eval exec $GDB $INTERNAL_GDBFLAGS --configuration]] == -1 } {
-+ untested "gdb not configured with debuginfod"
-+ return -1
-+}
-+
-+set cache [standard_output_file ".client_cache"]
-+set db [standard_output_file ".debuginfod.db"]
-+
-+# Delete any preexisting test files
-+file delete -force $cache
-+file delete -force $db
-+
-+set sourcetmp [standard_output_file tmp-${srcfile}]
-+set outputdir [standard_output_file {}]
-+
-+# Make a copy source file that we can move around
-+if { [catch {file copy -force ${srcdir}/${subdir}/${srcfile} \
-+ [standard_output_file ${sourcetmp}]}] != 0 } {
-+ error "create temporary file"
-+ return -1
-+}
-+
-+if { [gdb_compile "$sourcetmp" "$binfile" executable {debug}] != "" } {
-+ fail "compile"
-+ return -1
-+}
-+
-+setenv DEBUGINFOD_URLS ""
-+setenv DEBUGINFOD_TIMEOUT 30
-+setenv DEBUGINFOD_CACHE_PATH $cache
-+
-+# Test that gdb cannot find source without debuginfod
-+clean_restart $binfile
-+gdb_test_no_output "set substitute-path $outputdir /dev/null"
-+gdb_test "list" ".*No such file or directory.*"
-+
-+# Strip symbols into separate file and move it so gdb cannot find it without debuginfod
-+if { [gdb_gnu_strip_debug $binfile ""] != 0 } {
-+ fail "strip debuginfo"
-+ return -1
-+}
-+
-+set debugdir [standard_output_file "debug"]
-+set debuginfo [standard_output_file "fetch_src_and_symbols.debug"]
-+
-+file mkdir $debugdir
-+file rename -force $debuginfo $debugdir
-+
-+# Test that gdb cannot find symbols without debuginfod
-+clean_restart $binfile
-+gdb_test "file" ".*No symbol file.*"
-+
-+# Write some assembly that just has a .gnu_debugaltlink section.
-+# Copied from testsuite/gdb.dwarf2/dwzbuildid.exp.
-+proc write_just_debugaltlink {filename dwzname buildid} {
-+ set asm_file [standard_output_file $filename]
-+
-+ Dwarf::assemble $asm_file {
-+ upvar dwzname dwzname
-+ upvar buildid buildid
-+
-+ gnu_debugaltlink $dwzname $buildid
-+
-+ # Only the DWARF reader checks .gnu_debugaltlink, so make sure
-+ # there is a bit of DWARF in here.
-+ cu {} {
-+ compile_unit {{language @DW_LANG_C}} {
-+ }
-+ }
-+ }
-+}
-+
-+# Write some DWARF that also sets the buildid.
-+# Copied from testsuite/gdb.dwarf2/dwzbuildid.exp.
-+proc write_dwarf_file {filename buildid {value 99}} {
-+ set asm_file [standard_output_file $filename]
-+
-+ Dwarf::assemble $asm_file {
-+ declare_labels int_label int_label2
-+
-+ upvar buildid buildid
-+ upvar value value
-+
-+ build_id $buildid
-+
-+ cu {} {
-+ compile_unit {{language @DW_LANG_C}} {
-+ int_label2: base_type {
-+ {name int}
-+ {byte_size 4 sdata}
-+ {encoding @DW_ATE_signed}
-+ }
-+
-+ constant {
-+ {name the_int}
-+ {type :$int_label2}
-+ {const_value $value data1}
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+set buildid "01234567890abcdef0123456"
-+
-+write_just_debugaltlink ${binfile}_has_altlink.S ${binfile}_dwz.o $buildid
-+write_dwarf_file ${binfile}_dwz.S $buildid
-+
-+if {[gdb_compile ${binfile}_has_altlink.S ${binfile}_alt.o object nodebug] != ""} {
-+ fail "compile main with altlink"
-+ return -1
-+}
-+
-+if {[gdb_compile ${binfile}_dwz.S ${binfile}_dwz.o object nodebug] != ""} {
-+ fail "compile altlink"
-+ return -1
-+}
-+
-+file rename -force ${binfile}_dwz.o $debugdir
-+
-+# Test that gdb cannot find dwz without debuginfod.
-+clean_restart
-+gdb_test "file ${binfile}_alt.o" ".*could not find '.gnu_debugaltlink'.*"
-+
-+# Find an unused port
-+set port 7999
-+set found 0
-+while { ! $found } {
-+ incr port
-+ if { $port == 65536 } {
-+ fail "no available ports"
-+ return -1
-+ }
-+
-+ spawn debuginfod -vvvv -d $db -p $port -F $debugdir
-+ expect {
-+ "started http server on IPv4 IPv6 port=$port" { set found 1 }
-+ "failed to bind to port" { kill_wait_spawned_process $spawn_id }
-+ timeout {
-+ fail "find port timeout"
-+ return -1
-+ }
-+ }
-+}
-+
-+set metrics [list "ready 1" \
-+ "thread_work_total{role=\"traverse\"} 1" \
-+ "thread_work_pending{role=\"scan\"} 0" \
-+ "thread_busy{role=\"scan\"} 0"]
-+
-+# Check server metrics to confirm init has completed.
-+foreach m $metrics {
-+ set timelim 20
-+ while { $timelim != 0 } {
-+ sleep 0.5
-+ catch {exec curl -s http://127.0.0.1:$port/metrics} got
-+
-+ if { [regexp $m $got] } {
-+ break
-+ }
-+
-+ incr timelim -1
-+ }
-+
-+ if { $timelim == 0 } {
-+ fail "server init timeout"
-+ return -1
-+ }
-+}
-+
-+# Point the client to the server
-+setenv DEBUGINFOD_URLS http://127.0.0.1:$port
-+
-+# gdb should now find the symbol and source files
-+clean_restart $binfile
-+gdb_test_no_output "set substitute-path $outputdir /dev/null"
-+gdb_test "br main" "Breakpoint 1 at.*file.*"
-+gdb_test "l" ".*This program is distributed in the hope.*"
-+
-+# gdb should now find the debugaltlink file
-+clean_restart
-+gdb_test "file ${binfile}_alt.o" ".*Reading symbols from ${binfile}_alt.o\.\.\.*"
-diff --git a/gdb/testsuite/gdb.debuginfod/main.c b/gdb/testsuite/gdb.debuginfod/main.c
-new file mode 100644
---- /dev/null
-+++ b/gdb/testsuite/gdb.debuginfod/main.c
-@@ -0,0 +1,25 @@
-+/* This testcase is part of GDB, the GNU debugger.
-+
-+ Copyright 2020 Free Software Foundation, Inc.
-+
-+ 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 3 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, see <http://www.gnu.org/licenses/>. */
-+
-+/* Dummy main function. */
-+
-+int
-+main()
-+{
-+ asm ("main_label: .globl main_label");
-+ return 0;
-+}
-diff --git a/gdb/top.c b/gdb/top.c
---- a/gdb/top.c
-+++ b/gdb/top.c
-@@ -1513,6 +1513,17 @@ This GDB was configured as follows:\n\
- --without-python\n\
- "));
- #endif
-+
-+#if HAVE_LIBDEBUGINFOD
-+ fprintf_filtered (stream, _("\
-+ --with-debuginfod\n\
-+"));
-+#else
-+ fprintf_filtered (stream, _("\
-+ --without-debuginfod\n\
-+"));
-+#endif
-+
- #if HAVE_GUILE
- fprintf_filtered (stream, _("\
- --with-guile\n\
diff --git a/gdb-rhbz1844458-use-fputX_unfiltered.patch b/gdb-rhbz1844458-use-fputX_unfiltered.patch
deleted file mode 100644
index 1acf7a5..0000000
--- a/gdb-rhbz1844458-use-fputX_unfiltered.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
-From: Sergio Durigan Junior <sergiodj@redhat.com>
-Date: Wed, 19 Feb 2020 16:40:48 -0500
-Subject: gdb-rhbz1844458-use-fputX_unfiltered.patch
-
-;; Fix fput?_unfiltered functions
-;; RH BZ 1844458 (Sergio Durigan Junior and Tom Tromey)
-
-Make '{putchar,fputc}_unfiltered' use 'fputs_unfiltered'
-
-There is currently a regression when using
-'{putchar,fputc}_unfiltered' with 'puts_unfiltered' which was
-introduced by one of the commits that reworked the unfiltered print
-code.
-
-The regression makes it impossible to use '{putchar,fputc}_unfiltered'
-with 'puts_unfiltered', because the former writes directly to the
-ui_file stream using 'stream->write', while the latter uses a buffered
-mechanism (see 'wrap_buffer') and delays the printing.
-
-If you do a quick & dirty hack on e.g. top.c:show_gdb_datadir:
-
- @@ -2088,6 +2088,13 @@ static void
- show_gdb_datadir (struct ui_file *file, int from_tty,
- struct cmd_list_element *c, const char *value)
- {
- + putchar_unfiltered ('\n');
- + puts_unfiltered ("TEST");
- + putchar_unfiltered ('>');
- + puts_unfiltered ("PUTS");
- + puts_unfiltered ("PUTS");
- + putchar_unfiltered ('\n');
-
-rebuild GDB and invoke the "show data-directory" command, you will
-see:
-
- (gdb) show data-directory
-
- >
- TESTPUTSGDB's data directory is "/usr/local/share/gdb".
-
-Note how the '>' was printed before the output, and "TEST" and "PUTS"
-were printed together.
-
-My first attempt to fix this was to always call 'flush_wrap_buffer' at
-the end of 'fputs_maybe_filtered', since it seemed to me that the
-function should always print what was requested. But I wasn't sure
-this was the right thing to do, so I talked to Tom on IRC and he gave
-me another, simpler idea: make '{putchar,fputc}_unfiltered' call into
-the already existing 'fputs_unfiltered' function.
-
-This patch implements the idea. I regtested it on the Buildbot, and
-no regressions were detected.
-
-gdb/ChangeLog:
-2020-02-20 Sergio Durigan Junior <sergiodj@redhat.com>
- Tom Tromey <tom@tromey.com>
-
- * utils.c (fputs_maybe_filtered): Call 'stream->puts' instead
- of 'fputc_unfiltered'.
- (putchar_unfiltered): Call 'fputc_unfiltered'.
- (fputc_unfiltered): Call 'fputs_unfiltered'.
-
-diff --git a/gdb/utils.c b/gdb/utils.c
---- a/gdb/utils.c
-+++ b/gdb/utils.c
-@@ -1783,7 +1783,12 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
- newline -- if chars_per_line is right, we
- probably just overflowed anyway; if it's wrong,
- let us keep going. */
-- fputc_unfiltered ('\n', stream);
-+ /* XXX: The ideal thing would be to call
-+ 'stream->putc' here, but we can't because it
-+ currently calls 'fputc_unfiltered', which ends up
-+ calling us, which generates an infinite
-+ recursion. */
-+ stream->puts ("\n");
- }
- else
- {
-@@ -1828,7 +1833,12 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
- wrap_here ((char *) 0); /* Spit out chars, cancel
- further wraps. */
- lines_printed++;
-- fputc_unfiltered ('\n', stream);
-+ /* XXX: The ideal thing would be to call
-+ 'stream->putc' here, but we can't because it
-+ currently calls 'fputc_unfiltered', which ends up
-+ calling us, which generates an infinite
-+ recursion. */
-+ stream->puts ("\n");
- lineptr++;
- }
- }
-@@ -1923,10 +1933,7 @@ fputs_highlighted (const char *str, const compiled_regex &highlight,
- int
- putchar_unfiltered (int c)
- {
-- char buf = c;
--
-- ui_file_write (gdb_stdout, &buf, 1);
-- return c;
-+ return fputc_unfiltered (c, gdb_stdout);
- }
-
- /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
-@@ -1941,9 +1948,11 @@ putchar_filtered (int c)
- int
- fputc_unfiltered (int c, struct ui_file *stream)
- {
-- char buf = c;
-+ char buf[2];
-
-- ui_file_write (stream, &buf, 1);
-+ buf[0] = c;
-+ buf[1] = 0;
-+ fputs_unfiltered (buf, stream);
- return c;
- }
-
diff --git a/gdb-rhbz1869484-deleted-working-directory b/gdb-rhbz1869484-deleted-working-directory
deleted file mode 100644
index f9584ea..0000000
--- a/gdb-rhbz1869484-deleted-working-directory
+++ /dev/null
@@ -1,240 +0,0 @@
-From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
-From: Kevin Buettner <kevinb@redhat.com>
-Date: Thu, 20 Aug 2020 20:52:12 -0700
-Subject: gdb-rhbz1869484-deleted-working-directory
-
-;; Backport patches fixing abort when working directory is deleted.
-
-Guard against 'current_directory == NULL' on gdb_abspath (PR gdb/23613)
-
-Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1728147
-Ref.: https://sourceware.org/bugzilla/show_bug.cgi?id=23613
-
-Hi,
-
-This bug has been reported against Fedora GDB, but there's also an
-upstream bug. The problem reported is that GDB segfaults when the
-working directory is deleted. It's pretty use to reproduce it:
-
- mkdir bla
- cd bla
- rmdir ../bla
- gdb echo
-
-Debugging the problem is a bit tricky, because, since the current
-directory doesn't exist anymore, a corefile cannot be saved there.
-After a few attempts, I came up with the following:
-
- gdb -ex 'shell mkdir bla' -ex 'cd bla' -ex 'shell rmdir ../bla' -ex 'r echo' ./gdb/gdb
-
-This assumes that you're inside a build directory which contains
-./gdb/gdb, of course.
-
-After investigating it, I found that the problem happens at
-gdb_abspath, where we're dereferencing 'current_directory' without
-checking if it's NULL:
-
- ...
- (concat (current_directory,
- IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
- ? "" : SLASH_STRING,
- ...
-
-So I fixed the problem with the patch below. The idea is that, if
-'current_directory' is NULL, then the final string returned should be
-just the "path".
-
-After fixing the bug, I found a similar one reported against our
-bugzilla: PR gdb/23613. The problem is the same, but the reproducer
-is a bit different.
-
-I really tried writing a testcase for this, but unfortunately it's
-apparently not possible to start GDB inside a non-existent directory
-with DejaGNU.
-
-I regression tested this patch on the BuildBot, and no regressions
-were found.
-
-gdb/ChangeLog:
-2019-12-14 Sergio Durigan Junior <sergiodj@redhat.com>
-
- https://bugzilla.redhat.com/show_bug.cgi?id=1728147
- PR gdb/23613
- * bsd-kvm.c (bsd_kvm_target_open): Use 'gdb_abspath'.
- * corelow.c: Include 'gdbsupport/pathstuff.h'.
- (core_target_open): Use 'gdb_abspath'.
- * gdbsupport/pathstuff.c (gdb_abspath): Guard against
- 'current_directory == NULL' case.
- * gdbsupport/pathstuff.h (gdb_abspath): Expand comment and
- explain what happens when 'current_directory' is NULL.
- * go32-nat.c (go32_nat_target::wait): Check if
- 'current_directory' is NULL before call to 'chdir'.
- * source.c (add_path): Use 'gdb_abspath'.
- * top.c: Include 'gdbsupport/pathstuff.h'.
- (init_history): Use 'gdb_abspath'.
- (set_history_filename): Likewise.
- * tracefile-tfile.c: Include 'gdbsupport/pathstuff.h'.
- (tfile_target_open): Use 'gdb_abspath'.
-
-Change-Id: Ibb0932fa25bc5c2d3ae4a7f64bd7f32885ca403b
-
-diff --git a/gdb/bsd-kvm.c b/gdb/bsd-kvm.c
---- a/gdb/bsd-kvm.c
-+++ b/gdb/bsd-kvm.c
-@@ -114,14 +114,13 @@ bsd_kvm_target_open (const char *arg, int from_tty)
-
- if (arg)
- {
-- char *temp;
--
- filename = tilde_expand (arg);
- if (filename[0] != '/')
- {
-- temp = concat (current_directory, "/", filename, (char *)NULL);
-+ gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (filename));
-+
- xfree (filename);
-- filename = temp;
-+ filename = temp.release ();
- }
- }
-
-diff --git a/gdb/corelow.c b/gdb/corelow.c
---- a/gdb/corelow.c
-+++ b/gdb/corelow.c
-@@ -48,6 +48,7 @@
- #include "completer.h"
- #include "gdbsupport/filestuff.h"
- #include "build-id.h"
-+#include "gdbsupport/pathstuff.h"
-
- #ifndef O_LARGEFILE
- #define O_LARGEFILE 0
-@@ -407,8 +408,7 @@ core_target_open (const char *arg, int from_tty)
-
- gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
- if (!IS_ABSOLUTE_PATH (filename.get ()))
-- filename.reset (concat (current_directory, "/",
-- filename.get (), (char *) NULL));
-+ filename = gdb_abspath (filename.get ());
-
- flags = O_BINARY | O_LARGEFILE;
- if (write_files)
-diff --git a/gdb/gdbsupport/pathstuff.c b/gdb/gdbsupport/pathstuff.c
---- a/gdb/gdbsupport/pathstuff.c
-+++ b/gdb/gdbsupport/pathstuff.c
-@@ -134,7 +134,7 @@ gdb_abspath (const char *path)
- if (path[0] == '~')
- return gdb_tilde_expand_up (path);
-
-- if (IS_ABSOLUTE_PATH (path))
-+ if (IS_ABSOLUTE_PATH (path) || current_directory == NULL)
- return make_unique_xstrdup (path);
-
- /* Beware the // my son, the Emacs barfs, the botch that catch... */
-diff --git a/gdb/gdbsupport/pathstuff.h b/gdb/gdbsupport/pathstuff.h
---- a/gdb/gdbsupport/pathstuff.h
-+++ b/gdb/gdbsupport/pathstuff.h
-@@ -44,7 +44,10 @@ extern gdb::unique_xmalloc_ptr<char>
-
- Contrary to "gdb_realpath", this function uses CURRENT_DIRECTORY
- for the path expansion. This may lead to scenarios the current
-- working directory (CWD) is different than CURRENT_DIRECTORY. */
-+ working directory (CWD) is different than CURRENT_DIRECTORY.
-+
-+ If CURRENT_DIRECTORY is NULL, this function returns a copy of
-+ PATH. */
-
- extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path);
-
-diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c
---- a/gdb/go32-nat.c
-+++ b/gdb/go32-nat.c
-@@ -507,7 +507,8 @@ go32_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
- }
-
- getcwd (child_cwd, sizeof (child_cwd)); /* in case it has changed */
-- chdir (current_directory);
-+ if (current_directory != NULL)
-+ chdir (current_directory);
-
- if (a_tss.tss_irqn == 0x21)
- {
-diff --git a/gdb/source.c b/gdb/source.c
---- a/gdb/source.c
-+++ b/gdb/source.c
-@@ -542,8 +542,7 @@ add_path (const char *dirname, char **which_path, int parse_separators)
- new_name_holder.reset (concat (name, ".", (char *) NULL));
- #endif
- else if (!IS_ABSOLUTE_PATH (name) && name[0] != '$')
-- new_name_holder.reset (concat (current_directory, SLASH_STRING, name,
-- (char *) NULL));
-+ new_name_holder = gdb_abspath (name);
- else
- new_name_holder.reset (savestring (name, p - name));
- name = new_name_holder.get ();
-diff --git a/gdb/top.c b/gdb/top.c
---- a/gdb/top.c
-+++ b/gdb/top.c
-@@ -54,6 +54,7 @@
- #include "gdb_select.h"
- #include "gdbsupport/scope-exit.h"
- #include "gdbarch.h"
-+#include "gdbsupport/pathstuff.h"
-
- /* readline include files. */
- #include "readline/readline.h"
-@@ -2020,12 +2021,13 @@ init_history (void)
- that was read. */
- #ifdef __MSDOS__
- /* No leading dots in file names are allowed on MSDOS. */
-- history_filename = concat (current_directory, "/_gdb_history",
-- (char *)NULL);
-+ const char *fname = "_gdb_history";
- #else
-- history_filename = concat (current_directory, "/.gdb_history",
-- (char *)NULL);
-+ const char *fname = ".gdb_history";
- #endif
-+
-+ gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (fname));
-+ history_filename = temp.release ();
- }
- read_history (history_filename);
- }
-@@ -2103,8 +2105,12 @@ set_history_filename (const char *args,
- directories the file written will be the same as the one
- that was read. */
- if (!IS_ABSOLUTE_PATH (history_filename))
-- history_filename = reconcat (history_filename, current_directory, "/",
-- history_filename, (char *) NULL);
-+ {
-+ gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (history_filename));
-+
-+ xfree (history_filename);
-+ history_filename = temp.release ();
-+ }
- }
-
- static void
-diff --git a/gdb/tracefile-tfile.c b/gdb/tracefile-tfile.c
---- a/gdb/tracefile-tfile.c
-+++ b/gdb/tracefile-tfile.c
-@@ -32,6 +32,7 @@
- #include "xml-tdesc.h"
- #include "target-descriptions.h"
- #include "gdbsupport/buffer.h"
-+#include "gdbsupport/pathstuff.h"
- #include <algorithm>
-
- #ifndef O_LARGEFILE
-@@ -470,8 +471,7 @@ tfile_target_open (const char *arg, int from_tty)
-
- gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg));
- if (!IS_ABSOLUTE_PATH (filename.get ()))
-- filename.reset (concat (current_directory, "/", filename.get (),
-- (char *) NULL));
-+ filename = gdb_abspath (filename.get ());
-
- flags = O_BINARY | O_LARGEFILE;
- flags |= O_RDONLY;
diff --git a/gdb-runtest-pie-override.patch b/gdb-runtest-pie-override.patch
index cd0ca0c..25c2bb8 100644
--- a/gdb-runtest-pie-override.patch
+++ b/gdb-runtest-pie-override.patch
@@ -25,7 +25,7 @@ a problem with make -j parallelization of the testsuite.
diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp
--- a/gdb/testsuite/lib/future.exp
+++ b/gdb/testsuite/lib/future.exp
-@@ -195,6 +195,10 @@ proc gdb_default_target_compile {source destfile type options} {
+@@ -197,6 +197,10 @@ proc gdb_default_target_compile_1 {source destfile type options} {
set ldflags ""
set dest [target_info name]
@@ -36,7 +36,7 @@ diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp
if {[info exists CFLAGS_FOR_TARGET]} {
append add_flags " $CFLAGS_FOR_TARGET"
}
-@@ -529,10 +533,6 @@ proc gdb_default_target_compile {source destfile type options} {
+@@ -531,10 +535,6 @@ proc gdb_default_target_compile_1 {source destfile type options} {
}
}
diff --git a/gdb-vla-intel-fix-print-char-array.patch b/gdb-vla-intel-fix-print-char-array.patch
index ce2035c..20508da 100644
--- a/gdb-vla-intel-fix-print-char-array.patch
+++ b/gdb-vla-intel-fix-print-char-array.patch
@@ -22,15 +22,13 @@ And adjust its testcase.
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
--- a/gdb/f-valprint.c
+++ b/gdb/f-valprint.c
-@@ -319,8 +319,22 @@ f_val_print (struct type *type, int embedded_offset,
- original_value, &opts, 0, stream);
+@@ -310,7 +310,21 @@ f_value_print_inner (struct value *val, struct ui_file *stream, int recurse,
+ value_print_scalar_formatted (val, &opts, 0, stream);
}
else
-- val_print_scalar_formatted (type, embedded_offset,
-- original_value, options, 0, stream);
+- value_print_scalar_formatted (val, options, 0, stream);
+ {
-+ val_print_scalar_formatted (type, embedded_offset,
-+ original_value, options, 0, stream);
++ value_print_scalar_formatted (val, options, 0, stream);
+ /* C and C++ has no single byte int type, char is used instead.
+ Since we don't know whether the value is really intended to
+ be used as an integer or a character, print the character
@@ -40,7 +38,7 @@ diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
+ LONGEST c;
+
+ fputs_filtered (" ", stream);
-+ c = unpack_long (type, valaddr + embedded_offset);
++ c = unpack_long (type, valaddr);
+ LA_PRINT_CHAR ((unsigned char) c, type, stream);
+ }
+ }
@@ -50,7 +48,7 @@ diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
diff --git a/gdb/testsuite/gdb.fortran/printing-types.exp b/gdb/testsuite/gdb.fortran/printing-types.exp
--- a/gdb/testsuite/gdb.fortran/printing-types.exp
+++ b/gdb/testsuite/gdb.fortran/printing-types.exp
-@@ -29,7 +29,7 @@ if {![runto MAIN__]} then {
+@@ -30,7 +30,7 @@ if {![fortran_runto_main]} then {
gdb_breakpoint [gdb_get_line_number "write"]
gdb_continue_to_breakpoint "write"
diff --git a/gdb-vla-intel-fortran-strides.patch b/gdb-vla-intel-fortran-strides.patch
index 4f468eb..32f8bdb 100644
--- a/gdb-vla-intel-fortran-strides.patch
+++ b/gdb-vla-intel-fortran-strides.patch
@@ -37,7 +37,7 @@ dbfd7140bf4c0500d1f5d192be781f83f78f7922
diff --git a/gdb/eval.c b/gdb/eval.c
--- a/gdb/eval.c
+++ b/gdb/eval.c
-@@ -372,29 +372,324 @@ init_array_element (struct value *array, struct value *element,
+@@ -371,29 +371,323 @@ init_array_element (struct value *array, struct value *element,
return index;
}
@@ -56,16 +56,16 @@ diff --git a/gdb/eval.c b/gdb/eval.c
{
- int pc = (*pos) + 1;
- LONGEST low_bound, high_bound;
-- struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array)));
+- struct type *range = check_typedef (value_type (array)->index_type ());
- enum range_type range_type
- = (enum range_type) longest_to_int (exp->elts[pc].longconst);
-
- *pos += 3;
-
- if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
-- low_bound = TYPE_LOW_BOUND (range);
+- low_bound = range->bounds ()->low.const_val ();
- else
-- low_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
+- low_bound = value_as_long (evaluate_subexp (nullptr, exp, pos, noside));
+ int i, dim_count = 0;
+ struct value *new_array = array;
+ struct type *array_type = check_typedef (value_type (new_array));
@@ -139,16 +139,16 @@ diff --git a/gdb/eval.c b/gdb/eval.c
+ upper bound. */
+ if ((range->f90_range_type & SUBARRAY_LOW_BOUND)
+ == SUBARRAY_LOW_BOUND)
-+ range->low = value_as_long (evaluate_subexp (NULL_TYPE, exp,
++ range->low = value_as_long (evaluate_subexp (nullptr, exp,
+ pos, noside));
+ if ((range->f90_range_type & SUBARRAY_HIGH_BOUND)
+ == SUBARRAY_HIGH_BOUND)
-+ range->high = value_as_long (evaluate_subexp (NULL_TYPE, exp,
++ range->high = value_as_long (evaluate_subexp (nullptr, exp,
+ pos, noside));
+
+ /* Assign the user's stride value if provided. */
+ if ((range->f90_range_type & SUBARRAY_STRIDE) == SUBARRAY_STRIDE)
-+ range->stride = value_as_long (evaluate_subexp (NULL_TYPE, exp,
++ range->stride = value_as_long (evaluate_subexp (nullptr, exp,
+ pos, noside));
+
+ /* Assign the default stride value '1'. */
@@ -156,9 +156,9 @@ diff --git a/gdb/eval.c b/gdb/eval.c
+ range->stride = 1;
- if (range_type == HIGH_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
-- high_bound = TYPE_HIGH_BOUND (range);
+- high_bound = range->bounds ()->high.const_val ();
- else
-- high_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
+- high_bound = value_as_long (evaluate_subexp (nullptr, exp, pos, noside));
+ /* Check the provided stride value is illegal, aka '0'. */
+ if (range->stride == 0)
+ error (_("Stride must not be 0"));
@@ -183,7 +183,7 @@ diff --git a/gdb/eval.c b/gdb/eval.c
+ for (i = nargs - 1; i >= 0; i--)
+ {
+ struct subscript_store *index = &subscript_array[i];
-+ struct type *index_type = TYPE_INDEX_TYPE (array_type);
++ struct type *index_type = array_type->index_type ();
+
+ switch (index->kind)
+ {
@@ -199,17 +199,17 @@ diff --git a/gdb/eval.c b/gdb/eval.c
+ /* If no lower bound was provided by the user, we take the
+ default boundary. Same for the high bound. */
+ if ((range->f90_range_type & SUBARRAY_LOW_BOUND) == 0)
-+ range->low = TYPE_LOW_BOUND (index_type);
++ range->low = index_type->bounds ()->low.const_val ();
+
+ if ((range->f90_range_type & SUBARRAY_HIGH_BOUND) == 0)
-+ range->high = TYPE_HIGH_BOUND (index_type);
++ range->high = index_type->bounds ()->high.const_val ();
+
+ /* Both user provided low and high bound have to be inside the
+ array bounds. Throw an error if not. */
-+ if (range->low < TYPE_LOW_BOUND (index_type)
-+ || range->low > TYPE_HIGH_BOUND (index_type)
-+ || range->high < TYPE_LOW_BOUND (index_type)
-+ || range->high > TYPE_HIGH_BOUND (index_type))
++ if (range->low < index_type->bounds ()->low.const_val ()
++ || range->low > index_type->bounds ()->high.const_val ()
++ || range->high < index_type->bounds ()->low.const_val ()
++ || range->high > index_type->bounds ()->high.const_val ())
+ error (_("provided bound(s) outside array bound(s)"));
+
+ /* For a negative stride the lower boundary must be larger than the
@@ -241,7 +241,7 @@ diff --git a/gdb/eval.c b/gdb/eval.c
+ for (i = nargs - 1; i >= 0; i--)
+ {
+ struct subscript_store *index = &subscript_array[i];
-+ struct type *index_type = TYPE_INDEX_TYPE (array_type);
++ struct type *index_type = array_type->index_type ();
+
+ switch (index->kind)
+ {
@@ -289,12 +289,12 @@ diff --git a/gdb/eval.c b/gdb/eval.c
+ cannot do the range checks for us. So we have to make sure
+ ourselves that the user provided index is inside the
+ array bounds. Throw an error if not. */
-+ if (index->U.number < TYPE_LOW_BOUND (index_type)
-+ && index->U.number > TYPE_HIGH_BOUND (index_type))
++ if (index->U.number < index_type->bounds ()->low.const_val ()
++ && index->U.number > index_type->bounds ()->high.const_val ())
+ error (_("provided bound(s) outside array bound(s)"));
+
-+ if (index->U.number > TYPE_LOW_BOUND (index_type)
-+ && index->U.number > TYPE_HIGH_BOUND (index_type))
++ if (index->U.number > index_type->bounds ()->low.const_val ()
++ && index->U.number > index_type->bounds ()->high.const_val ())
+ error (_("provided bound(s) outside array bound(s)"));
+
+ new_array = value_slice_1 (new_array,
@@ -364,8 +364,7 @@ diff --git a/gdb/eval.c b/gdb/eval.c
+ elt_type,
+ range_type);
+
-+ TYPE_CODE (interim_array_type)
-+ = TYPE_CODE (value_type (new_array));
++ interim_array_type->set_code ( value_type (new_array)->code ());
+
+ v = allocate_value (interim_array_type);
+
@@ -381,7 +380,7 @@ diff --git a/gdb/eval.c b/gdb/eval.c
}
-@@ -1235,19 +1530,6 @@ evaluate_funcall (type *expect_type, expression *exp, int *pos,
+@@ -1233,19 +1527,6 @@ evaluate_funcall (type *expect_type, expression *exp, int *pos,
return eval_call (exp, noside, nargs, argvec, var_func_name, expect_type);
}
@@ -395,13 +394,13 @@ diff --git a/gdb/eval.c b/gdb/eval.c
- enum noside noside)
-{
- for (int i = 0; i < nargs; ++i)
-- evaluate_subexp (NULL_TYPE, exp, pos, noside);
+- evaluate_subexp (nullptr, exp, pos, noside);
-}
-
- struct value *
- evaluate_subexp_standard (struct type *expect_type,
- struct expression *exp, int *pos,
-@@ -1942,33 +2224,8 @@ evaluate_subexp_standard (struct type *expect_type,
+ /* Return true if type is integral or reference to integral */
+
+ static bool
+@@ -1953,33 +2234,8 @@ evaluate_subexp_standard (struct type *expect_type,
switch (code)
{
case TYPE_CODE_ARRAY:
@@ -436,7 +435,7 @@ diff --git a/gdb/eval.c b/gdb/eval.c
case TYPE_CODE_PTR:
case TYPE_CODE_FUNC:
-@@ -2388,49 +2645,6 @@ evaluate_subexp_standard (struct type *expect_type,
+@@ -2400,49 +2656,6 @@ evaluate_subexp_standard (struct type *expect_type,
}
return (arg1);
@@ -484,22 +483,22 @@ diff --git a/gdb/eval.c b/gdb/eval.c
- }
-
case BINOP_LOGICAL_AND:
- arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+ arg1 = evaluate_subexp (nullptr, exp, pos, noside);
if (noside == EVAL_SKIP)
-@@ -3350,6 +3564,9 @@ calc_f77_array_dims (struct type *array_type)
+@@ -3360,6 +3573,9 @@ calc_f77_array_dims (struct type *array_type)
int ndimen = 1;
struct type *tmp_type;
-+ if (TYPE_CODE (array_type) == TYPE_CODE_STRING)
++ if (array_type->code () == TYPE_CODE_STRING)
+ return 1;
+
- if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY))
+ if ((array_type->code () != TYPE_CODE_ARRAY))
error (_("Can't get dimensions for a non-array type"));
diff --git a/gdb/expprint.c b/gdb/expprint.c
--- a/gdb/expprint.c
+++ b/gdb/expprint.c
-@@ -580,17 +580,14 @@ print_subexp_standard (struct expression *exp, int *pos,
+@@ -576,17 +576,14 @@ print_subexp_standard (struct expression *exp, int *pos,
longest_to_int (exp->elts[pc + 1].longconst);
*pos += 2;
@@ -521,7 +520,7 @@ diff --git a/gdb/expprint.c b/gdb/expprint.c
print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
fputs_filtered (")", stream);
return;
-@@ -1107,22 +1104,24 @@ dump_subexp_body_standard (struct expression *exp,
+@@ -1103,22 +1100,24 @@ dump_subexp_body_standard (struct expression *exp,
switch (range_type)
{
@@ -554,7 +553,7 @@ diff --git a/gdb/expprint.c b/gdb/expprint.c
fputs_filtered ("ExclusiveRange 'EXP..EXP'", stream);
break;
default:
-@@ -1130,11 +1129,9 @@ dump_subexp_body_standard (struct expression *exp,
+@@ -1126,11 +1125,9 @@ dump_subexp_body_standard (struct expression *exp,
break;
}
@@ -710,18 +709,9 @@ diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
-@@ -936,7 +936,7 @@ create_range_type (struct type *result_type, struct type *index_type,
- TYPE_RANGE_DATA (result_type)->high = *high_bound;
- TYPE_RANGE_DATA (result_type)->bias = bias;
-
-- /* Initialize the stride to be a constant, the value will already be zero
-+ /* bias the stride to be a constant, the value will already be zero
- thanks to the use of TYPE_ZALLOC above. */
- TYPE_RANGE_DATA (result_type)->stride.kind = PROP_CONST;
-
-@@ -1001,7 +1001,8 @@ create_static_range_type (struct type *result_type, struct type *index_type,
- high.kind = PROP_CONST;
- high.data.const_val = high_bound;
+@@ -1006,7 +1006,8 @@ create_static_range_type (struct type *result_type, struct type *index_type,
+ low.set_const_val (low_bound);
+ high.set_const_val (high_bound);
- result_type = create_range_type (result_type, index_type, &low, &high, 0);
+ result_type = create_range_type (result_type, index_type,
@@ -729,29 +719,13 @@ diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
return result_type;
}
-@@ -1236,6 +1237,7 @@ create_array_type_with_stride (struct type *result_type,
- if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
- low_bound = high_bound = 0;
- element_type = check_typedef (element_type);
-+
- /* Be careful when setting the array length. Ada arrays can be
- empty arrays with the high_bound being smaller than the low_bound.
- In such cases, the array length should be zero. */
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
-@@ -803,7 +803,6 @@ struct main_type
- /* * Union member used for range types. */
+@@ -1615,6 +1615,15 @@ extern unsigned type_align (struct type *);
+ space in struct type. */
+ extern bool set_type_align (struct type *, ULONGEST);
- struct range_bounds *bounds;
--
- } flds_bnds;
-
- /* * Slot to point to additional language-specific fields of this
-@@ -1365,6 +1364,15 @@ extern bool set_type_align (struct type *, ULONGEST);
- #define TYPE_BIT_STRIDE(range_type) \
- (TYPE_RANGE_DATA(range_type)->stride.data.const_val \
- * (TYPE_RANGE_DATA(range_type)->flag_is_byte_stride ? 8 : 1))
+#define TYPE_BYTE_STRIDE(range_type) \
+ TYPE_RANGE_DATA(range_type)->stride.data.const_val
+#define TYPE_BYTE_STRIDE_BLOCK(range_type) \
@@ -761,19 +735,36 @@ diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
+#define TYPE_BYTE_STRIDE_KIND(range_type) \
+ TYPE_RANGE_DATA(range_type)->stride.kind
+
-
/* Property accessors for the type data location. */
#define TYPE_DATA_LOCATION(thistype) \
-@@ -1400,6 +1408,9 @@ extern bool set_type_align (struct type *, ULONGEST);
- TYPE_HIGH_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype))
- #define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \
- TYPE_LOW_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype))
+ ((thistype)->dyn_prop (DYN_PROP_DATA_LOCATION))
+@@ -1633,6 +1642,26 @@ extern bool set_type_align (struct type *, ULONGEST);
+ #define TYPE_ASSOCIATED_PROP(thistype) \
+ ((thistype)->dyn_prop (DYN_PROP_ASSOCIATED))
+
++/* Accessors for struct range_bounds data attached to an array type's
++ index type. */
++
++#define TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED(arraytype) \
++ ((arraytype)->index_type ()->bounds ()->high.kind () == PROP_UNDEFINED)
++#define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \
++ (arraytype->index_type ()->bounds ().low.kind () == PROP_UNDEFINED)
+#define TYPE_ARRAY_STRIDE_IS_UNDEFINED(arraytype) \
-+ (TYPE_BYTE_STRIDE(TYPE_INDEX_TYPE(arraytype)) == 0)
++ (TYPE_BYTE_STRIDE(arraytype->index_type ()) == 0)
++
++
++#define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
++ (TYPE_HIGH_BOUND((arraytype)->index_type ()))
+
++#define TYPE_ARRAY_LOWER_BOUND_VALUE(arraytype) \
++ (TYPE_LOW_BOUND((arraytype)->index_type ()))
++
++#define TYPE_ARRAY_BIT_STRIDE(arraytype) \
++ (TYPE_BIT_STRIDE((arraytype)->index_type ()))
++
+ /* C++ */
- #define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
- (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype))))
+ #define TYPE_SELF_TYPE(thistype) internal_type_self_type (thistype)
diff --git a/gdb/parse.c b/gdb/parse.c
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -856,33 +847,33 @@ diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
-@@ -1224,13 +1224,11 @@ rust_range (struct expression *exp, int *pos, enum noside noside)
+@@ -1082,13 +1082,11 @@ rust_range (struct expression *exp, int *pos, enum noside noside)
kind = (enum range_type) longest_to_int (exp->elts[*pos + 1].longconst);
*pos += 3;
- if (kind == HIGH_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT
- || kind == NONE_BOUND_DEFAULT_EXCLUSIVE)
+ if ((kind & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND)
- low = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+ low = evaluate_subexp (nullptr, exp, pos, noside);
- if (kind == LOW_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT_EXCLUSIVE
- || kind == NONE_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT_EXCLUSIVE)
+ if ((kind & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND)
- high = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+ high = evaluate_subexp (nullptr, exp, pos, noside);
- bool inclusive = (kind == NONE_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT);
+ bool inclusive = (!((kind & SUBARRAY_HIGH_BOUND_EXCLUSIVE) == SUBARRAY_HIGH_BOUND_EXCLUSIVE));
if (noside == EVAL_SKIP)
return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
-@@ -1319,7 +1317,7 @@ rust_compute_range (struct type *type, struct value *range,
+@@ -1177,7 +1175,7 @@ rust_compute_range (struct type *type, struct value *range,
*low = 0;
*high = 0;
- *kind = BOTH_BOUND_DEFAULT;
+ *kind = SUBARRAY_NONE_BOUND;
- if (TYPE_NFIELDS (type) == 0)
+ if (type->num_fields () == 0)
return;
-@@ -1327,15 +1325,14 @@ rust_compute_range (struct type *type, struct value *range,
+@@ -1185,15 +1183,14 @@ rust_compute_range (struct type *type, struct value *range,
i = 0;
if (strcmp (TYPE_FIELD_NAME (type, 0), "start") == 0)
{
@@ -891,7 +882,7 @@ diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
*low = value_as_long (value_field (range, 0));
++i;
}
- if (TYPE_NFIELDS (type) > i
+ if (type->num_fields () > i
&& strcmp (TYPE_FIELD_NAME (type, i), "end") == 0)
{
- *kind = (*kind == BOTH_BOUND_DEFAULT
@@ -900,7 +891,7 @@ diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
*high = value_as_long (value_field (range, i));
if (rust_inclusive_range_type_p (type))
-@@ -1353,7 +1350,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
+@@ -1211,7 +1208,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
struct type *rhstype;
LONGEST low, high_bound;
/* Initialized to appease the compiler. */
@@ -909,7 +900,7 @@ diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
LONGEST high = 0;
int want_slice = 0;
-@@ -1451,7 +1448,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
+@@ -1309,7 +1306,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
error (_("Cannot subscript non-array type"));
if (want_slice
@@ -918,7 +909,7 @@ diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
low = low_bound;
if (low < 0)
error (_("Index less than zero"));
-@@ -1469,7 +1466,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
+@@ -1327,7 +1324,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
CORE_ADDR addr;
struct value *addrval, *tem;
@@ -1416,7 +1407,7 @@ new file mode 100644
diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
--- a/gdb/testsuite/gdb.fortran/vla-sizeof.exp
+++ b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
-@@ -32,7 +32,8 @@ gdb_test "print sizeof(vla1)" " = 0" "print sizeof non-allocated vla1"
+@@ -35,7 +35,8 @@ gdb_test "print sizeof(vla1)" " = 0" "print sizeof non-allocated vla1"
gdb_test "print sizeof(vla1(3,2,1))" \
"no such vector element \\(vector not allocated\\)" \
"print sizeof non-allocated indexed vla1"
@@ -1426,7 +1417,7 @@ diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortra
"print sizeof non-allocated sliced vla1"
# Try to access value in allocated VLA
-@@ -41,7 +42,7 @@ gdb_continue_to_breakpoint "vla1-allocated"
+@@ -44,7 +45,7 @@ gdb_continue_to_breakpoint "vla1-allocated"
gdb_test "print sizeof(vla1)" " = 4000" "print sizeof allocated vla1"
gdb_test "print sizeof(vla1(3,2,1))" "4" \
"print sizeof element from allocated vla1"
@@ -1435,7 +1426,7 @@ diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortra
"print sizeof sliced vla1"
# Try to access values in undefined pointer to VLA (dangling)
-@@ -49,7 +50,8 @@ gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla"
+@@ -52,7 +53,8 @@ gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla"
gdb_test "print sizeof(pvla(3,2,1))" \
"no such vector element \\(vector not associated\\)" \
"print sizeof non-associated indexed pvla"
@@ -1445,7 +1436,7 @@ diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortra
"print sizeof non-associated sliced pvla"
# Try to access values in pointer to VLA and compare them
-@@ -58,7 +60,8 @@ gdb_continue_to_breakpoint "pvla-associated"
+@@ -61,7 +63,8 @@ gdb_continue_to_breakpoint "pvla-associated"
gdb_test "print sizeof(pvla)" " = 4000" "print sizeof associated pvla"
gdb_test "print sizeof(pvla(3,2,1))" "4" \
"print sizeof element from associated pvla"
@@ -1544,7 +1535,7 @@ new file mode 100644
diff --git a/gdb/valops.c b/gdb/valops.c
--- a/gdb/valops.c
+++ b/gdb/valops.c
-@@ -3797,13 +3797,42 @@ value_of_this_silent (const struct language_defn *lang)
+@@ -3756,13 +3756,42 @@ value_of_this_silent (const struct language_defn *lang)
struct value *
value_slice (struct value *array, int lowbound, int length)
@@ -1588,25 +1579,25 @@ diff --git a/gdb/valops.c b/gdb/valops.c
- array_type = check_typedef (value_type (array));
+ /* Check for legacy code if we are actually dealing with an array or
+ string. */
- if (TYPE_CODE (array_type) != TYPE_CODE_ARRAY
- && TYPE_CODE (array_type) != TYPE_CODE_STRING)
+ if (array_type->code () != TYPE_CODE_ARRAY
+ && array_type->code () != TYPE_CODE_STRING)
error (_("cannot take slice of non-array"));
-@@ -3813,45 +3842,155 @@ value_slice (struct value *array, int lowbound, int length)
+@@ -3772,45 +3801,155 @@ value_slice (struct value *array, int lowbound, int length)
if (type_not_associated (array_type))
error (_("array not associated"));
-- range_type = TYPE_INDEX_TYPE (array_type);
+- range_type = array_type->index_type ();
- if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
- error (_("slice from bad array or bitstring"));
-+ ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (array_type));
-+ ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (array_type));
++ ary_low_bound = array_type->index_type ()->bounds ()->low.const_val ();
++ ary_high_bound = array_type->index_type ()->bounds ()->high.const_val ();
+
+ /* When we are working on a multi-dimensional array, we need to get the
+ attributes of the underlying type. */
+ if (call_count > 1)
+ {
-+ ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (elt_type));
-+ ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (elt_type));
++ ary_low_bound = elt_type->index_type ()->bounds ()->low.const_val ();
++ ary_high_bound = elt_type->index_type ()->bounds ()->high.const_val ();
+ elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
+ row_count = TYPE_LENGTH (array_type)
+ / TYPE_LENGTH (TYPE_TARGET_TYPE (array_type));
@@ -1623,12 +1614,12 @@ diff --git a/gdb/valops.c b/gdb/valops.c
+
+ elt_size = TYPE_LENGTH (elt_type);
+ elt_offs = lowbound - ary_low_bound;
++
++ elt_offs *= elt_size;
- if (lowbound < lowerbound || length < 0
- || lowbound + length - 1 > upperbound)
- error (_("slice out of range"));
-+ elt_offs *= elt_size;
-+
+ /* Check for valid user input. In case of Fortran this was already done
+ in the calling function. */
+ if (call_count == 1
@@ -1642,7 +1633,7 @@ diff --git a/gdb/valops.c b/gdb/valops.c
+ array by setting slice_range_size. */
+ if (call_count == 1)
+ {
-+ range_type = TYPE_INDEX_TYPE (array_type);
++ range_type = array_type->index_type ();
+ slice_range_size = ary_low_bound + elem_count - 1;
+
+ /* Check if the array bounds are valid. */
@@ -1654,9 +1645,9 @@ diff --git a/gdb/valops.c b/gdb/valops.c
+ accordingly. */
+ else
+ {
-+ range_type = TYPE_INDEX_TYPE (TYPE_TARGET_TYPE (array_type));
++ range_type = TYPE_TARGET_TYPE (array_type)->index_type ();
+ slice_range_size = ary_low_bound + (row_count * elem_count) - 1;
-+ ary_low_bound = TYPE_LOW_BOUND (range_type);
++ ary_low_bound = range_type->bounds ()->low.const_val ();
+ }
/* FIXME-type-allocation: need a way to free this type when we are
@@ -1674,7 +1665,11 @@ diff --git a/gdb/valops.c b/gdb/valops.c
- LONGEST offset
- = (lowbound - lowerbound) * TYPE_LENGTH (check_typedef (element_type));
+ struct type *element_type;
-+
+
+- slice_type = create_array_type (NULL,
+- element_type,
+- slice_range_type);
+- slice_type->set_code (array_type->code ());
+ /* When both CALL_COUNT and STRIDE_LENGTH equal 1, we can use the legacy
+ code for subarrays. */
+ if (call_count == 1 && stride_length == 1)
@@ -1682,12 +1677,8 @@ diff --git a/gdb/valops.c b/gdb/valops.c
+ element_type = TYPE_TARGET_TYPE (array_type);
+
+ slice_type = create_array_type (NULL, element_type, slice_range_type);
-
-- slice_type = create_array_type (NULL,
-- element_type,
-- slice_range_type);
-- TYPE_CODE (slice_type) = TYPE_CODE (array_type);
-+ TYPE_CODE (slice_type) = TYPE_CODE (array_type);
++
++ slice_type->set_code (array_type->code ());
- if (VALUE_LVAL (array) == lval_memory && value_lazy (array))
- slice = allocate_value_lazy (slice_type);
@@ -1731,12 +1722,12 @@ diff --git a/gdb/valops.c b/gdb/valops.c
+
+ slice_type = create_array_type (NULL, element_type, slice_range_type);
+
-+ /* If we have a one dimensional array, we copy its TYPE_CODE. For a
-+ multi dimensional array we copy the embedded type's TYPE_CODE. */
++ /* If we have a one dimensional array, we copy its type code. For a
++ multi dimensional array we copy the embedded type's type code. */
+ if (call_count == 1)
-+ TYPE_CODE (slice_type) = TYPE_CODE (array_type);
++ slice_type->set_code (array_type->code ());
+ else
-+ TYPE_CODE (slice_type) = TYPE_CODE (TYPE_TARGET_TYPE (array_type));
++ slice_type->set_code ((TYPE_TARGET_TYPE (array_type)->code ()));
+
+ v = allocate_value (slice_type);
+
@@ -1772,16 +1763,16 @@ diff --git a/gdb/valops.c b/gdb/valops.c
+ return v;
}
- /* Create a value for a FORTRAN complex number. Currently most of the
+ /* See value.h. */
diff --git a/gdb/value.h b/gdb/value.h
--- a/gdb/value.h
+++ b/gdb/value.h
-@@ -1145,6 +1145,8 @@ extern struct value *varying_to_slice (struct value *);
+@@ -1144,6 +1144,8 @@ extern struct value *varying_to_slice (struct value *);
extern struct value *value_slice (struct value *, int, int);
+extern struct value *value_slice_1 (struct value *, int, int, int, int);
+
- extern struct value *value_literal_complex (struct value *, struct value *,
- struct type *);
-
+ /* Create a complex number. The type is the complex type; the values
+ are cast to the underlying scalar type before the complex number is
+ created. */
diff --git a/gdb-vla-intel-fortran-vla-strings.patch b/gdb-vla-intel-fortran-vla-strings.patch
index deea4b5..1e48ee8 100644
--- a/gdb-vla-intel-fortran-vla-strings.patch
+++ b/gdb-vla-intel-fortran-vla-strings.patch
@@ -33,7 +33,7 @@ git diff --stat -p gdb/master...gdb/users/bheckel/fortran-vla-strings
diff --git a/gdb/NEWS b/gdb/NEWS
--- a/gdb/NEWS
+++ b/gdb/NEWS
-@@ -805,6 +805,8 @@ SH-5/SH64 running OpenBSD SH-5/SH64 support in sh*-*-openbsd*
+@@ -985,6 +985,8 @@ SH-5/SH64 running OpenBSD SH-5/SH64 support in sh*-*-openbsd*
*** Changes in GDB 8.1
@@ -45,11 +45,11 @@ diff --git a/gdb/NEWS b/gdb/NEWS
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
-@@ -649,6 +649,28 @@ c_value_print (struct value *val, struct ui_file *stream,
+@@ -572,6 +572,28 @@ c_value_print (struct value *val, struct ui_file *stream,
else
{
/* normal case */
-+ if (TYPE_CODE (type) == TYPE_CODE_PTR
++ if (type->code () == TYPE_CODE_PTR
+ && 1 == is_dynamic_type (type))
+ {
+ CORE_ADDR addr;
@@ -64,7 +64,7 @@ diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
+ && (0 == type_not_associated (type)))
+ TYPE_TARGET_TYPE (type) =
+ resolve_dynamic_type (TYPE_TARGET_TYPE (type),
-+ NULL, addr);
++ {}, addr);
+ }
+ else
+ {
@@ -74,10 +74,10 @@ diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
fprintf_filtered (stream, "(");
type_print (value_type (val), "", stream, -1);
fprintf_filtered (stream, ") ");
-diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
---- a/gdb/dwarf2read.c
-+++ b/gdb/dwarf2read.c
-@@ -1827,7 +1827,10 @@ static void read_signatured_type (struct signatured_type *);
+diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
+--- a/gdb/dwarf2/read.c
++++ b/gdb/dwarf2/read.c
+@@ -1562,7 +1562,10 @@ static void read_signatured_type (signatured_type *sig_type,
static int attr_to_dynamic_prop (const struct attribute *attr,
struct die_info *die, struct dwarf2_cu *cu,
@@ -89,16 +89,25 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
/* memory allocation interface */
-@@ -13799,7 +13802,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
+@@ -13631,7 +13634,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
newobj->static_link
= XOBNEW (&objfile->objfile_obstack, struct dynamic_prop);
attr_to_dynamic_prop (attr, die, cu, newobj->static_link,
-- dwarf2_per_cu_addr_type (cu->per_cu));
-+ dwarf2_per_cu_addr_type (cu->per_cu), NULL, 0);
+- cu->addr_type ());
++ cu->addr_type (), NULL, 0);
}
cu->list_in_scope = cu->get_builder ()->get_local_symbols ();
-@@ -16565,7 +16568,7 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -16073,7 +16076,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
+ else
+ {
+ struct dynamic_prop prop;
+- if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type ()))
++ if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type (), NULL, 0))
+ type->add_dyn_prop (DYN_PROP_BYTE_SIZE, prop);
+ TYPE_LENGTH (type) = 0;
+ }
+@@ -16764,7 +16767,7 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
byte_stride_prop
= (struct dynamic_prop *) alloca (sizeof (struct dynamic_prop));
stride_ok = attr_to_dynamic_prop (attr, die, cu, byte_stride_prop,
@@ -107,7 +116,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
if (!stride_ok)
{
complaint (_("unable to read array DW_AT_byte_stride "
-@@ -17325,7 +17328,7 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -17522,7 +17525,7 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
struct attribute *attr;
struct dynamic_prop prop;
bool length_is_constant = true;
@@ -116,7 +125,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
/* There are a couple of places where bit sizes might be made use of
when parsing a DW_TAG_string_type, however, no producer that we know
-@@ -17346,6 +17349,10 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -17543,6 +17546,10 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
}
}
@@ -125,9 +134,9 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+
+ /* If DW_AT_string_length is defined, the length is stored in memory. */
attr = dwarf2_attr (die, DW_AT_string_length, cu);
- if (attr != nullptr && !attr_form_is_constant (attr))
+ if (attr != nullptr && !attr->form_is_constant ())
{
-@@ -17372,13 +17379,71 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -17569,13 +17576,68 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
}
/* Convert the attribute into a dynamic property. */
@@ -139,7 +148,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
}
else if (attr != nullptr)
{
-+ if (attr_form_is_block (attr))
++ if (attr->form_is_block ())
+ {
+ struct attribute *byte_size, *bit_size;
+ struct dynamic_prop high;
@@ -189,18 +198,15 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+ complaint (_("Could not parse DW_AT_string_length"));
+ }
+
-+ TYPE_RANGE_DATA (range_type)->high = high;
++ range_type->bounds ()->high = high;
+ }
+ else
-+ {
-+ TYPE_HIGH_BOUND (range_type) = DW_UNSND(attr);
-+ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
-+ }
++ range_type->bounds ()->high.set_const_val (DW_UNSND(attr));
+
/* This DW_AT_string_length just contains the length with no
indirection. There's no need to create a dynamic property in this
case. Pass 0 for the default value as we know it will not be
-@@ -17392,6 +17457,20 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -17589,6 +17651,14 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
}
else
{
@@ -208,28 +214,22 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+ in this case. */
+ attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+ if (attr)
-+ {
-+ TYPE_HIGH_BOUND (range_type) = DW_UNSND(attr);
-+ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
-+ }
++ range_type->bounds ()->high.set_const_val (DW_UNSND(attr));
+ else
-+ {
-+ TYPE_HIGH_BOUND (range_type) = 1;
-+ TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
-+ }
++ range_type->bounds ()->high.set_const_val (1);
+
/* Use 1 as a fallback length if we have nothing else. */
length = 1;
}
-@@ -17407,6 +17486,7 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
- low_bound.data.const_val = 1;
+@@ -17603,6 +17673,7 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+ low_bound.set_const_val (1);
range_type = create_range_type (NULL, index_type, &low_bound, &prop, 0);
}
+
char_type = language_string_char_type (cu->language_defn, gdbarch);
type = create_string_type (NULL, char_type, range_type);
-@@ -17858,7 +17938,8 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -18078,7 +18149,8 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
static int
attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
struct dwarf2_cu *cu, struct dynamic_prop *prop,
@@ -238,18 +238,17 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+ const gdb_byte *additional_data, int additional_data_size)
{
struct dwarf2_property_baton *baton;
- struct obstack *obstack
-@@ -17885,9 +17966,30 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
- baton->locexpr.is_reference = false;
+ dwarf2_per_objfile *per_objfile = cu->per_objfile;
+@@ -18108,6 +18180,26 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
break;
}
-+
+
+ if (additional_data != NULL && additional_data_size > 0)
+ {
+ gdb_byte *data;
+
+ data = (gdb_byte *) obstack_alloc(
-+ &cu->per_cu->dwarf2_per_objfile->objfile->objfile_obstack,
++ &cu->per_objfile->objfile->objfile_obstack,
+ DW_BLOCK (attr)->size + additional_data_size);
+ memcpy (data, DW_BLOCK (attr)->data, DW_BLOCK (attr)->size);
+ memcpy (data + DW_BLOCK (attr)->size, additional_data,
@@ -264,17 +263,13 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+ baton->locexpr.size = DW_BLOCK (attr)->size;
+ }
+
- prop->data.baton = baton;
- prop->kind = PROP_LOCEXPR;
-- gdb_assert (prop->data.baton != NULL);
-+ gdb_assert(prop->data.baton != NULL);
+ prop->set_locexpr (baton);
+ gdb_assert (prop->baton () != NULL);
}
- else if (attr_form_is_ref (attr))
- {
-@@ -17920,9 +18022,29 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
- baton = XOBNEW (obstack, struct dwarf2_property_baton);
+@@ -18142,11 +18234,31 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
baton->property_type = die_type (target_die, target_cu);
baton->locexpr.per_cu = cu->per_cu;
+ baton->locexpr.per_objfile = per_objfile;
- baton->locexpr.size = DW_BLOCK (target_attr)->size;
- baton->locexpr.data = DW_BLOCK (target_attr)->data;
baton->locexpr.is_reference = true;
@@ -283,7 +278,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+ {
+ gdb_byte *data;
+
-+ data = (gdb_byte *) obstack_alloc (&cu->per_cu->dwarf2_per_objfile->objfile->objfile_obstack,
++ data = (gdb_byte *) obstack_alloc (&cu->per_objfile->objfile->objfile_obstack,
+ DW_BLOCK (target_attr)->size + additional_data_size);
+ memcpy (data, DW_BLOCK (target_attr)->data,
+ DW_BLOCK (target_attr)->size);
@@ -300,10 +295,13 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+ baton->locexpr.size = DW_BLOCK (target_attr)->size;
+ }
+
- prop->data.baton = baton;
- prop->kind = PROP_LOCEXPR;
- gdb_assert (prop->data.baton != NULL);
-@@ -18099,8 +18221,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+ prop->set_locexpr (baton);
+- gdb_assert (prop->baton () != NULL);
++ gdb_assert (prop->baton() != NULL);
+ }
+ else
+ {
+@@ -18308,8 +18420,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
}
attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
@@ -314,7 +312,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
else if (!low_default_is_valid)
complaint (_("Missing DW_AT_lower_bound "
"- DIE at %s [in module %s]"),
-@@ -18109,10 +18231,10 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+@@ -18318,10 +18430,10 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
struct attribute *attr_ub, *attr_count;
attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu);
@@ -326,80 +324,54 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+ if (attr_to_dynamic_prop (attr, die, cu, &high, base_type, NULL, 0))
{
/* If bounds are constant do the final calculation here. */
- if (low.kind == PROP_CONST && high.kind == PROP_CONST)
-@@ -18164,7 +18286,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
- struct type *prop_type
- = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
+ if (low.kind () == PROP_CONST && high.kind () == PROP_CONST)
+@@ -18372,7 +18484,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+ {
+ struct type *prop_type = cu->addr_sized_int_type (false);
attr_to_dynamic_prop (attr_byte_stride, die, cu, &byte_stride_prop,
- prop_type);
+ prop_type, NULL, 0);
}
struct dynamic_prop bit_stride_prop;
-@@ -18185,7 +18307,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
- struct type *prop_type
- = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
+@@ -18392,7 +18504,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+ {
+ struct type *prop_type = cu->addr_sized_int_type (false);
attr_to_dynamic_prop (attr_bit_stride, die, cu, &bit_stride_prop,
- prop_type);
+ prop_type, NULL, 0);
}
}
-@@ -25879,7 +26001,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+@@ -24424,7 +24536,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+ if (attr != NULL)
{
- struct type *prop_type
- = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
+ struct type *prop_type = cu->addr_sized_int_type (false);
- if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
+ if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type, NULL, 0))
- add_dyn_prop (DYN_PROP_ALLOCATED, prop, type);
+ type->add_dyn_prop (DYN_PROP_ALLOCATED, prop);
}
- else if (attr != NULL)
-@@ -25895,7 +26017,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+
+@@ -24433,13 +24545,13 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+ if (attr != NULL)
{
- struct type *prop_type
- = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false);
+ struct type *prop_type = cu->addr_sized_int_type (false);
- if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type))
+ if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type, NULL, 0))
- add_dyn_prop (DYN_PROP_ASSOCIATED, prop, type);
+ type->add_dyn_prop (DYN_PROP_ASSOCIATED, prop);
}
- else if (attr != NULL)
-@@ -25908,7 +26030,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+
/* Read DW_AT_data_location and set in type. */
attr = dwarf2_attr (die, DW_AT_data_location, cu);
- if (attr_to_dynamic_prop (attr, die, cu, &prop,
-- dwarf2_per_cu_addr_type (cu->per_cu)))
-+ dwarf2_per_cu_addr_type (cu->per_cu), NULL, 0))
- add_dyn_prop (DYN_PROP_DATA_LOCATION, prop, type);
+- if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type ()))
++ if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type (), NULL, 0))
+ type->add_dyn_prop (DYN_PROP_DATA_LOCATION, prop);
- if (dwarf2_per_objfile->die_type_hash == NULL)
+ if (per_objfile->die_type_hash == NULL)
diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
--- a/gdb/f-typeprint.c
+++ b/gdb/f-typeprint.c
-@@ -197,15 +197,14 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
- print_rank_only = true;
- else if ((TYPE_ASSOCIATED_PROP (type)
- && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ASSOCIATED_PROP (type)))
-- || (TYPE_ALLOCATED_PROP (type)
-- && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ALLOCATED_PROP (type)))
-- || (TYPE_DATA_LOCATION (type)
-- && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_DATA_LOCATION (type))))
-- {
-- /* This case exist when we ptype a typename which has the dynamic
-- properties but cannot be resolved as there is no object. */
-- print_rank_only = true;
-- }
-+ || (TYPE_ALLOCATED_PROP (type)
-+ && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ALLOCATED_PROP (type)))
-+ || (TYPE_DATA_LOCATION (type)
-+ && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_DATA_LOCATION (type))))
-+ /* This case exist when we ptype a typename which has the
-+ dynamic properties but cannot be resolved as there is
-+ no object. */
-+ print_rank_only = true;
-
- if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
- f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
-@@ -217,8 +216,9 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+@@ -217,8 +217,9 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
else
{
LONGEST lower_bound = f77_get_lowerbound (type);
@@ -410,7 +382,7 @@ diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
/* Make sure that, if we have an assumed size array, we
print out a warning and print the upperbound as '*'. */
-@@ -229,7 +229,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+@@ -229,7 +230,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
{
LONGEST upper_bound = f77_get_upperbound (type);
@@ -419,7 +391,7 @@ diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
}
}
-@@ -249,7 +249,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+@@ -249,7 +250,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
case TYPE_CODE_REF:
f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0,
arrayprint_recurse_level, false);
@@ -431,17 +403,17 @@ diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
-@@ -1939,7 +1939,8 @@ is_dynamic_type_internal (struct type *type, int top_level)
+@@ -1977,7 +1977,8 @@ is_dynamic_type_internal (struct type *type, int top_level)
type = check_typedef (type);
/* We only want to recognize references at the outermost level. */
-- if (top_level && TYPE_CODE (type) == TYPE_CODE_REF)
+- if (top_level && type->code () == TYPE_CODE_REF)
+ if (top_level &&
-+ (TYPE_CODE (type) == TYPE_CODE_REF || TYPE_CODE (type) == TYPE_CODE_PTR))
++ (type->code () == TYPE_CODE_REF || type-> code() == TYPE_CODE_PTR))
type = check_typedef (TYPE_TARGET_TYPE (type));
/* Types that have a dynamic TYPE_DATA_LOCATION are considered
-@@ -1972,10 +1973,10 @@ is_dynamic_type_internal (struct type *type, int top_level)
+@@ -2017,10 +2018,10 @@ is_dynamic_type_internal (struct type *type, int top_level)
|| is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0));
}
@@ -451,26 +423,26 @@ diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
case TYPE_CODE_ARRAY:
+ case TYPE_CODE_STRING:
{
- gdb_assert (TYPE_NFIELDS (type) == 1);
+ gdb_assert (type->num_fields () == 1);
-@@ -2139,11 +2140,15 @@ resolve_dynamic_array_or_string (struct type *type,
+@@ -2183,11 +2184,15 @@ resolve_dynamic_array_or_string (struct type *type,
ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type));
-- if (ary_dim != NULL && TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY)
-+ if (ary_dim != NULL && (TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY
-+ || TYPE_CODE (ary_dim) == TYPE_CODE_STRING))
+- if (ary_dim != NULL && ary_dim->code () == TYPE_CODE_ARRAY)
++ if (ary_dim != NULL && (ary_dim->code () == TYPE_CODE_ARRAY
++ || ary_dim->code () == TYPE_CODE_STRING))
elt_type = resolve_dynamic_array_or_string (ary_dim, addr_stack);
else
elt_type = TYPE_TARGET_TYPE (type);
-+ if (TYPE_CODE (type) == TYPE_CODE_STRING)
++ if (type->code () == TYPE_CODE_STRING)
+ return create_string_type (type, elt_type, range_type);
+
- prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
+ prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE);
if (prop != NULL)
{
-@@ -2295,6 +2300,28 @@ resolve_dynamic_struct (struct type *type,
+@@ -2533,6 +2538,25 @@ resolve_dynamic_struct (struct type *type,
return resolved_type;
}
@@ -488,10 +460,7 @@ diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
+ /* Resolve associated property. */
+ prop = TYPE_ASSOCIATED_PROP (type);
+ if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
-+ {
-+ TYPE_DYN_PROP_ADDR (prop) = value;
-+ TYPE_DYN_PROP_KIND (prop) = PROP_CONST;
-+ }
++ prop->set_const_val (value);
+
+ return type;
+}
@@ -499,7 +468,7 @@ diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
/* Worker for resolved_dynamic_type. */
static struct type *
-@@ -2349,6 +2376,9 @@ resolve_dynamic_type_internal (struct type *type,
+@@ -2594,6 +2618,9 @@ resolve_dynamic_type_internal (struct type *type,
case TYPE_CODE_ARRAY:
resolved_type = resolve_dynamic_array_or_string (type, addr_stack);
break;
@@ -804,7 +773,7 @@ diff --git a/gdb/testsuite/gdb.fortran/print_type.exp b/gdb/testsuite/gdb.fortra
# 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 3 of the License, or
-@@ -40,7 +41,7 @@ set complex [fortran_complex4]
+@@ -42,7 +43,7 @@ set complex [fortran_complex4]
# matches the string TYPE.
proc check_pointer_type { var_name type } {
gdb_test "ptype ${var_name}" \
@@ -813,7 +782,7 @@ diff --git a/gdb/testsuite/gdb.fortran/print_type.exp b/gdb/testsuite/gdb.fortra
}
gdb_breakpoint [gdb_get_line_number "Before pointer assignment"]
-@@ -85,7 +86,8 @@ gdb_test "ptype twop" \
+@@ -87,7 +88,8 @@ gdb_test "ptype twop" \
[multi_line "type = PTR TO -> \\( Type two" \
" $int, allocatable :: ivla1\\(:\\)" \
" $int, allocatable :: ivla2\\(:,:\\)" \
@@ -823,7 +792,7 @@ diff --git a/gdb/testsuite/gdb.fortran/print_type.exp b/gdb/testsuite/gdb.fortra
gdb_breakpoint [gdb_get_line_number "After value assignment"]
gdb_continue_to_breakpoint "After value assignment"
-@@ -97,11 +99,11 @@ gdb_test "ptype intv" "type = $int"
+@@ -99,11 +101,11 @@ gdb_test "ptype intv" "type = $int"
gdb_test "ptype inta" "type = $int \\(10,2\\)"
gdb_test "ptype realv" "type = $real"
@@ -840,7 +809,7 @@ diff --git a/gdb/testsuite/gdb.fortran/print_type.exp b/gdb/testsuite/gdb.fortra
set test "ptype intap"
gdb_test_multiple $test $test {
-re "type = $int \\(10,2\\)\r\n$gdb_prompt $" {
-@@ -111,4 +113,4 @@ gdb_test_multiple $test $test {
+@@ -113,4 +115,4 @@ gdb_test_multiple $test $test {
pass $test
}
}
@@ -1001,7 +970,7 @@ new file mode 100644
diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran/vla-value.exp
--- a/gdb/testsuite/gdb.fortran/vla-value.exp
+++ b/gdb/testsuite/gdb.fortran/vla-value.exp
-@@ -35,7 +35,7 @@ gdb_breakpoint [gdb_get_line_number "vla1-init"]
+@@ -37,7 +37,7 @@ gdb_breakpoint [gdb_get_line_number "vla1-init"]
gdb_continue_to_breakpoint "vla1-init"
gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
gdb_test "print &vla1" \
@@ -1010,7 +979,7 @@ diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran
"print non-allocated &vla1"
gdb_test "print vla1(1,1,1)" "no such vector element \\\(vector not allocated\\\)" \
"print member in non-allocated vla1 (1)"
-@@ -56,7 +56,7 @@ with_timeout_factor 15 {
+@@ -58,7 +58,7 @@ with_timeout_factor 15 {
"step over value assignment of vla1"
}
gdb_test "print &vla1" \
@@ -1019,7 +988,7 @@ diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran
"print allocated &vla1"
gdb_test "print vla1(3, 6, 9)" " = 1311" "print allocated vla1(3,6,9)"
gdb_test "print vla1(1, 3, 8)" " = 1311" "print allocated vla1(1,3,8)"
-@@ -76,7 +76,7 @@ gdb_test "print vla1(9, 9, 9)" " = 999" \
+@@ -78,7 +78,7 @@ gdb_test "print vla1(9, 9, 9)" " = 999" \
# Try to access values in undefined pointer to VLA (dangling)
gdb_test "print pvla" " = <not associated>" "print undefined pvla"
gdb_test "print &pvla" \
@@ -1028,7 +997,7 @@ diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran
"print non-associated &pvla"
gdb_test "print pvla(1, 3, 8)" "no such vector element \\\(vector not associated\\\)" \
"print undefined pvla(1,3,8)"
-@@ -85,7 +85,7 @@ gdb_test "print pvla(1, 3, 8)" "no such vector element \\\(vector not associated
+@@ -87,7 +87,7 @@ gdb_test "print pvla(1, 3, 8)" "no such vector element \\\(vector not associated
gdb_breakpoint [gdb_get_line_number "pvla-associated"]
gdb_continue_to_breakpoint "pvla-associated"
gdb_test "print &pvla" \
@@ -1040,7 +1009,7 @@ diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran
diff --git a/gdb/typeprint.c b/gdb/typeprint.c
--- a/gdb/typeprint.c
+++ b/gdb/typeprint.c
-@@ -574,6 +574,25 @@ whatis_exp (const char *exp, int show)
+@@ -565,6 +565,25 @@ whatis_exp (const char *exp, int show)
printf_filtered (" */\n");
}
@@ -1048,7 +1017,7 @@ diff --git a/gdb/typeprint.c b/gdb/typeprint.c
+ additional information about the target.
+ For example, in Fortran and C we are printing the dimension of the
+ dynamic array the pointer is pointing to. */
-+ if (TYPE_CODE (type) == TYPE_CODE_PTR
++ if (type->code () == TYPE_CODE_PTR
+ && is_dynamic_type (type) == 1)
+ {
+ CORE_ADDR addr;
@@ -1060,7 +1029,7 @@ diff --git a/gdb/typeprint.c b/gdb/typeprint.c
+ if (addr != 0
+ && type_not_associated (type) == 0)
+ TYPE_TARGET_TYPE (type) = resolve_dynamic_type (TYPE_TARGET_TYPE (type),
-+ NULL, addr);
++ {}, addr);
+ }
+
LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
@@ -1070,7 +1039,7 @@ diff --git a/gdb/valops.c b/gdb/valops.c
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -1553,6 +1553,19 @@ value_ind (struct value *arg1)
- if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
+ if (base_type->code () == TYPE_CODE_PTR)
{
struct type *enc_type;
+ CORE_ADDR addr;
@@ -1085,24 +1054,24 @@ diff --git a/gdb/valops.c b/gdb/valops.c
+
+ if (addr != 0)
+ TYPE_TARGET_TYPE (base_type) =
-+ resolve_dynamic_type (TYPE_TARGET_TYPE (base_type), NULL, addr);
++ resolve_dynamic_type (TYPE_TARGET_TYPE (base_type), {}, addr);
/* We may be pointing to something embedded in a larger object.
Get the real type of the enclosing object. */
-@@ -1568,8 +1581,7 @@ value_ind (struct value *arg1)
+@@ -1570,8 +1583,7 @@ value_ind (struct value *arg1)
else
- /* Retrieve the enclosing object pointed to. */
- arg2 = value_at_lazy (enc_type,
-- (value_as_address (arg1)
-- - value_pointed_to_offset (arg1)));
-+ (addr - value_pointed_to_offset (arg1)));
-
+ {
+ /* Retrieve the enclosing object pointed to. */
+- base_addr = (value_as_address (arg1)
+- - value_pointed_to_offset (arg1));
++ base_addr = (addr - value_pointed_to_offset (arg1));
+ }
+ arg2 = value_at_lazy (enc_type, base_addr);
enc_type = value_type (arg2);
- return readjust_indirect_value_type (arg2, enc_type, base_type, arg1);
diff --git a/gdb/valprint.c b/gdb/valprint.c
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
-@@ -1149,12 +1149,6 @@ value_check_printable (struct value *val, struct ui_file *stream,
+@@ -1046,12 +1046,6 @@ value_check_printable (struct value *val, struct ui_file *stream,
return 0;
}
diff --git a/gdb-vla-intel-stringbt-fix.patch b/gdb-vla-intel-stringbt-fix.patch
index aedc7b1..1a2bbb1 100644
--- a/gdb-vla-intel-stringbt-fix.patch
+++ b/gdb-vla-intel-stringbt-fix.patch
@@ -27,10 +27,10 @@ cannot reproduce it.
Thanks,
Jan
-diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
---- a/gdb/dwarf2loc.c
-+++ b/gdb/dwarf2loc.c
-@@ -2154,6 +2154,20 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
+diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
+--- a/gdb/dwarf2/loc.c
++++ b/gdb/dwarf2/loc.c
+@@ -2249,6 +2249,20 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
ctx.per_cu = per_cu;
ctx.obj_address = 0;
@@ -50,7 +50,7 @@ diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
+
scoped_value_mark free_values;
- ctx.gdbarch = get_objfile_arch (objfile);
+ ctx.gdbarch = per_objfile->objfile->arch ();
diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 b/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90
new file mode 100644
--- /dev/null
diff --git a/gdb-vla-intel-tests.patch b/gdb-vla-intel-tests.patch
index 4814b71..bfde742 100644
--- a/gdb-vla-intel-tests.patch
+++ b/gdb-vla-intel-tests.patch
@@ -18,12 +18,15 @@ diff --git a/gdb/testsuite/gdb.fortran/ptr-indentation.exp b/gdb/testsuite/gdb.f
diff --git a/gdb/testsuite/gdb.fortran/ptype-on-functions.exp b/gdb/testsuite/gdb.fortran/ptype-on-functions.exp
--- a/gdb/testsuite/gdb.fortran/ptype-on-functions.exp
+++ b/gdb/testsuite/gdb.fortran/ptype-on-functions.exp
-@@ -42,4 +42,4 @@ gdb_test "ptype say_numbers" \
+@@ -42,7 +42,7 @@ gdb_test "ptype say_numbers" \
"type = void \\(integer\\(kind=4\\), integer\\(kind=4\\), integer\\(kind=4\\)\\)"
gdb_test "ptype fun_ptr" \
- "type = PTR TO -> \\( integer\\(kind=4\\) \\(\\) \\(REF TO -> \\( integer\\(kind=4\\) \\)\\) \\)"
+ "type = PTR TO -> \\( integer\\(kind=4\\) \\(\\) \\(REF TO -> \\( integer\\(kind=4\\)\\)\\)\\)"
+
+ gdb_test "ptype say_string" \
+ "type = void \\(character\\*\\(\\*\\), integer\\(kind=\\d+\\)\\)"
diff --git a/gdb/testsuite/gdb.fortran/vla-func.exp b/gdb/testsuite/gdb.fortran/vla-func.exp
new file mode 100644
--- /dev/null
@@ -169,12 +172,12 @@ new file mode 100644
diff --git a/gdb/testsuite/gdb.fortran/vla-ptr-info.exp b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
--- a/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
+++ b/gdb/testsuite/gdb.fortran/vla-ptr-info.exp
-@@ -28,5 +28,5 @@ if ![runto_main] {
+@@ -33,5 +33,5 @@ set real4 [fortran_real4]
# Check the status of a pointer to a dynamic array.
gdb_breakpoint [gdb_get_line_number "pvla-associated"]
gdb_continue_to_breakpoint "pvla-associated"
--gdb_test "print &pvla" " = \\(PTR TO -> \\( real\\(kind=4\\) \\(10,10,10\\) \\)\\) ${hex}" \
-+gdb_test "print &pvla" " = \\(PTR TO -> \\( real\\(kind=4\\) \\(10,10,10\\)\\)\\) ${hex}" \
+-gdb_test "print &pvla" " = \\(PTR TO -> \\( $real4 \\(10,10,10\\) \\)\\) ${hex}" \
++gdb_test "print &pvla" " = \\(PTR TO -> \\( $real4 \\(10,10,10\\)\\)\\) ${hex}" \
"print pvla pointer information"
diff --git a/gdb/testsuite/gdb.fortran/vla-stringsold.exp b/gdb/testsuite/gdb.fortran/vla-stringsold.exp
new file mode 100644
diff --git a/gdb.spec b/gdb.spec
index ca0845a..b218e62 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -31,13 +31,13 @@ Name: %{?scl_prefix}gdb
# Freeze it when GDB gets branched
%global snapsrc 20200208
# See timestamp of source gnulib installed into gnulib/ .
-%global snapgnulib 20191216
+%global snapgnulib 20200630
%global tarname gdb-%{version}
-Version: 9.2
+Version: 10.1
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 8%{?dist}
+Release: 1%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and LGPLv3+ and BSD and Public Domain and GFDL
# Do not provide URL for snapshots as the file lasts there only for 2 days.
@@ -205,10 +205,6 @@ Patch1119: gdb-testsuite-readline63-sigint-revert.patch
#push=Should be pushed upstream.
Patch2000: gdb-config.patch
-# Fix type mismatch issue exposed by LTO
-#push=Should be pushed upstream.
-Patch2001: gdb-ltofix.patch
-
# Include the auto-generated file containing the "Patch:" directives.
# See README.local-patches for more details.
Patch9998: _gdb.spec.Patch.include
@@ -497,7 +493,6 @@ done
%endif
%patch2000 -p1
-%patch2001 -p1
# The above patches twiddle a .m4 file for configure, so update the affected
# configure files
@@ -1189,6 +1184,18 @@ fi
%endif
%changelog
+* Wed Nov 04 2020 Kevin Buettner <kevinb@redhat.com> - 10.1-1
+- Rebase to FSF GDB 10.1.
+- Bump 'snapgnulib' date.
+- Drop gdb-rhbz1818011-bfd-gcc10-error.patch.
+- Drop gdb-rhbz1822715-fix-python-deprecation.patch.
+- Drop gdb-rhbz1829702-fix-python39.patch.
+- Drop gdb-rhbz1838777-debuginfod.patch.
+- Drop gdb-rhbz1844458-use-fputX_unfiltered.patch.
+- Drop gdb-rhbz1869484-deleted-working-directory.
+- Adjust build-id related patches.
+- Ajust VLA patches.
+
* Mon Nov 2 2020 Kevin Buettner <kevinb@redhat.com> - 9.2-8
- Backport patches fixing abort when working directory is deleted.
(RHBZ 1869484, Sergio Durigan Junior)
diff --git a/sources b/sources
index 2a3425d..96507cc 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
SHA512 (gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz) = a8b1c54dd348cfeb37da73f968742896be3dd13a4215f8d8519870c2abea915f5176c3fa6989ddd10f20020a16f0fab20cbae68ee8d58a82234d8778023520f8
SHA512 (v2.0.2.tar.gz) = bc256a57a8481e0be8220624da3ccf1fe4bf0ea83e9808fdf0aad6db865aee402a36e78285efb0316c016f57e0d6fc56b647ee8e9a2ad4b05bfc1ad68ddde535
-SHA512 (gdb-9.2.tar.xz) = 73635f00f343117aa5e2436f1e1597099e2bfb31ef7bb162b273fa1ea282c3fa9b0f52762e70bfc7ad0334addb8d159e9ac7cbe5998ca4f755ea8cf90714d274
+SHA512 (gdb-10.1.tar.xz) = 0dc54380435c6853db60f1e388b94836d294dfa9ad7f518385a27db4edd03cb970f8717d5f1e9c9a0d4a33d7fcf91bc2e5d6c9cf9e4b561dcc74e65b806c1537
reply other threads:[~2026-06-28 0:00 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178260480544.1.8368842123247641320.rpms-gdb-ed8730b4d972@fedoraproject.org \
--to=kevinb@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox