From 59e24d72dd1d1c9ac96d51090a78fa9383deb4c9 Mon Sep 17 00:00:00 2001 From: Kevin Buettner Date: Thu, 5 May 2022 10:39:10 -0700 Subject: [PATCH] Rebase to FSF GDB 12.1. Update gdb-6.6-buildid-locate.patch. Update gdb-6.6-buildid-locate-rpm.patch. Dropped backported patches from GDB 11.1 and 11.2. --- .gitignore | 2 +- _gdb.spec.Patch.include | 45 -- _gdb.spec.patch.include | 12 - _git_upstream_commit | 2 +- _patch_order | 12 - gdb-6.3-gstack-20050411.patch | 8 +- gdb-6.3-rh-testversion-20041202.patch | 2 +- ...337-resolve-tls-without-debuginfo-v2.patch | 2 +- ...buildid-locate-rpm-librpm-workaround.patch | 2 +- gdb-6.6-buildid-locate-rpm-scl.patch | 12 +- gdb-6.6-buildid-locate-rpm.patch | 32 +- ...6.6-buildid-locate-solib-missing-ids.patch | 4 +- gdb-6.6-buildid-locate.patch | 125 ++-- gdb-container-rh-pkg.patch | 2 +- gdb-core-open-vdso-warning.patch | 2 +- gdb-fedora-libncursesw.patch | 12 +- gdb-linux_perf-bundle.patch | 2 +- gdb-rhbz-853071-update-manpages.patch | 258 -------- gdb-rhbz1976887-field-location-kind.patch | 30 - ...2976-paper-over-fortran-lex-problems.patch | 185 ------ gdb-rhbz2022177-dprintf-1.patch | 315 ---------- gdb-rhbz2022177-dprintf-2.patch | 194 ------ gdb-rhbz202487-rework-set-debuginfod.patch | 475 -------------- ...-expand-documentation-for-debuginfod.patch | 152 ----- gdb-rhbz2024875-fix-unittest-failure.patch | 37 -- gdb-rhbz2024875-pr27026.patch | 60 -- ...875-set_show-for-managing-debuginfod.patch | 414 ------------ ...z2068280-debuginfod-unavailable-size.patch | 94 --- gdb-test-for-rhbz1976887.patch | 592 ------------------ gdb.spec | 19 +- sources | 2 +- 31 files changed, 126 insertions(+), 2979 deletions(-) delete mode 100644 gdb-rhbz-853071-update-manpages.patch delete mode 100644 gdb-rhbz1976887-field-location-kind.patch delete mode 100644 gdb-rhbz2012976-paper-over-fortran-lex-problems.patch delete mode 100644 gdb-rhbz2022177-dprintf-1.patch delete mode 100644 gdb-rhbz2022177-dprintf-2.patch delete mode 100644 gdb-rhbz202487-rework-set-debuginfod.patch delete mode 100644 gdb-rhbz2024875-expand-documentation-for-debuginfod.patch delete mode 100644 gdb-rhbz2024875-fix-unittest-failure.patch delete mode 100644 gdb-rhbz2024875-pr27026.patch delete mode 100644 gdb-rhbz2024875-set_show-for-managing-debuginfod.patch delete mode 100644 gdb-rhbz2068280-debuginfod-unavailable-size.patch delete mode 100644 gdb-test-for-rhbz1976887.patch diff --git a/.gitignore b/.gitignore index eef8dc2..d57a0dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /new-fedora-release /gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz /v2.0.4.tar.gz -/gdb-11.2.tar.xz +/gdb-12.1.tar.xz diff --git a/_gdb.spec.Patch.include b/_gdb.spec.Patch.include index 94215fb..c0d303d 100644 --- a/_gdb.spec.Patch.include +++ b/_gdb.spec.Patch.include @@ -314,48 +314,3 @@ Patch074: gdb-rhbz1398387-tab-crash-test.patch # =fedoratest Patch075: gdb-rhbz1553104-s390x-arch12-test.patch -#Backport upstream patch which fixes internal-error: Unexpected -#type field location kind (RHBZ 1976887). -Patch076: gdb-rhbz1976887-field-location-kind.patch - -# Backport test for RHBZ 1976887 (Kevin Buettner). -Patch077: gdb-test-for-rhbz1976887.patch - -# Backport gdb.fortran testsuite changes in order to avoid Fortran -# lexical analyzer bug. -Patch078: gdb-rhbz2012976-paper-over-fortran-lex-problems.patch - -# Backport manpage update -Patch079: gdb-rhbz-853071-update-manpages.patch - -# Backport fix for dprintf bug (RH BZ 2022177). -Patch080: gdb-rhbz2022177-dprintf-1.patch - -# Backport test case for dprintf bug (RH BZ 2022177). -Patch081: gdb-rhbz2022177-dprintf-2.patch - -#Backport upstream commit from Aaron Merey -#3ea44f21299 gdb.texinfo: Expand documentation for debuginfod -Patch082: gdb-rhbz2024875-expand-documentation-for-debuginfod.patch - -#Backport upstream commit from Aaron Merey -#7811fa5995f gdb: add set/show commands for managing debuginfod -Patch083: gdb-rhbz2024875-set_show-for-managing-debuginfod.patch - -#Backport upstream commit from Tom Tromey -#2a8f1f47446 Fix unittest.exp failure due to 'set debuginfod' addition -Patch084: gdb-rhbz2024875-fix-unittest-failure.patch - -#Backport upstream commit from Simon Marchi -#333f35b6315 gdb: pass/return setting setter/getter -#scalar values by value -Patch085: gdb-rhbz202487-rework-set-debuginfod.patch - -#Backport upstream commit from Aaron Merey -#b9db26b4c44 [PR gdb/27026] CTRL-C is ignored when debug info is downloaded -Patch086: gdb-rhbz2024875-pr27026.patch - -# Backport upstream patch from Aaron Merey which suppresses debuginfod -# progress messages when size is zero. (RH BZ 2068280). -Patch087: gdb-rhbz2068280-debuginfod-unavailable-size.patch - diff --git a/_gdb.spec.patch.include b/_gdb.spec.patch.include index 470a7be..f5bd893 100644 --- a/_gdb.spec.patch.include +++ b/_gdb.spec.patch.include @@ -73,15 +73,3 @@ %patch073 -p1 %patch074 -p1 %patch075 -p1 -%patch076 -p1 -%patch077 -p1 -%patch078 -p1 -%patch079 -p1 -%patch080 -p1 -%patch081 -p1 -%patch082 -p1 -%patch083 -p1 -%patch084 -p1 -%patch085 -p1 -%patch086 -p1 -%patch087 -p1 diff --git a/_git_upstream_commit b/_git_upstream_commit index 6089eaf..da9ead1 100644 --- a/_git_upstream_commit +++ b/_git_upstream_commit @@ -1 +1 @@ -ef6ec3333e80e39ce207c6c5d5628bdd5402111d +e53a8e8685685c97588f8319d993ea6cd5635e47 diff --git a/_patch_order b/_patch_order index f089f69..a06c5f5 100644 --- a/_patch_order +++ b/_patch_order @@ -73,15 +73,3 @@ gdb-linux_perf-bundle.patch gdb-libexec-add-index.patch gdb-rhbz1398387-tab-crash-test.patch gdb-rhbz1553104-s390x-arch12-test.patch -gdb-rhbz1976887-field-location-kind.patch -gdb-test-for-rhbz1976887.patch -gdb-rhbz2012976-paper-over-fortran-lex-problems.patch -gdb-rhbz-853071-update-manpages.patch -gdb-rhbz2022177-dprintf-1.patch -gdb-rhbz2022177-dprintf-2.patch -gdb-rhbz2024875-expand-documentation-for-debuginfod.patch -gdb-rhbz2024875-set_show-for-managing-debuginfod.patch -gdb-rhbz2024875-fix-unittest-failure.patch -gdb-rhbz202487-rework-set-debuginfod.patch -gdb-rhbz2024875-pr27026.patch -gdb-rhbz2068280-debuginfod-unavailable-size.patch diff --git a/gdb-6.3-gstack-20050411.patch b/gdb-6.3-gstack-20050411.patch index 9fa2e7d..6f6ecfb 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 -@@ -1753,7 +1753,7 @@ info install-info clean-info dvi pdf install-pdf html install-html: force +@@ -1767,7 +1767,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 \ -@@ -1802,7 +1802,25 @@ install-guile: +@@ -1816,7 +1816,25 @@ install-guile: install-python: $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb @@ -52,8 +52,8 @@ 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 \ -@@ -1825,6 +1843,18 @@ uninstall: force $(CONFIG_UNINSTALL) - fi +@@ -1847,6 +1865,18 @@ uninstall: force $(CONFIG_UNINSTALL) + rm -f $(DESTDIR)$(bindir)/$$transformed_name @$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do +.PHONY: uninstall-gstack diff --git a/gdb-6.3-rh-testversion-20041202.patch b/gdb-6.3-rh-testversion-20041202.patch index 7ee68e4..82c693b 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 -@@ -2195,7 +2195,7 @@ init_gdb_version_vars (void) +@@ -2234,7 +2234,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.5-bz185337-resolve-tls-without-debuginfo-v2.patch b/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch index 304aa38..ac3aa17 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 -@@ -1306,6 +1306,10 @@ process_print_command_args (const char *args, value_print_options *print_opts, +@@ -1301,6 +1301,10 @@ process_print_command_args (const char *args, value_print_options *print_opts, if (exp != nullptr && *exp) { diff --git a/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch b/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch index c86ec6b..f8dcbeb 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 -@@ -708,6 +708,19 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return) +@@ -712,6 +712,19 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return) #include #endif diff --git a/gdb-6.6-buildid-locate-rpm-scl.patch b/gdb-6.6-buildid-locate-rpm-scl.patch index 1dc3ac4..25f9c1e 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 -@@ -742,7 +742,11 @@ static int missing_rpm_list_entries; +@@ -746,7 +746,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; -@@ -849,7 +853,11 @@ missing_rpm_enlist (const char *filename) +@@ -853,7 +857,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; -@@ -967,6 +975,37 @@ missing_rpm_enlist (const char *filename) +@@ -971,6 +979,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); } -@@ -976,6 +1015,20 @@ missing_rpm_enlist (const char *filename) +@@ -980,6 +1019,20 @@ missing_rpm_enlist (const char *filename) return count; } @@ -98,7 +98,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c -@@ -2801,6 +2801,16 @@ read_gdb_index_from_buffer (const char *filename, +@@ -2797,6 +2797,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/dwarf2/read.c b/gdb/dwarf2/read.c static int warning_printed = 0; if (!warning_printed) { -@@ -2812,6 +2822,10 @@ to use the section anyway."), +@@ -2808,6 +2818,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 c29969f..29a6a46 100644 --- a/gdb-6.6-buildid-locate-rpm.patch +++ b/gdb-6.6-buildid-locate-rpm.patch @@ -243,7 +243,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c #include "objfiles.h" #include "observable.h" #include "symfile.h" -@@ -697,8 +698,374 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return) +@@ -701,8 +702,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 -@@ -752,11 +1119,17 @@ missing_filepair_change (void) +@@ -756,11 +1123,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 (); } -@@ -823,14 +1196,38 @@ debug_print_missing (const char *binary, const char *debug) +@@ -827,14 +1200,38 @@ debug_print_missing (const char *binary, const char *debug) *slot = missing_filepair; @@ -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 -@@ -250,6 +253,9 @@ +@@ -259,6 +262,9 @@ /* Define if you have the mpfr library. */ #undef HAVE_LIBMPFR @@ -709,9 +709,9 @@ diff --git a/gdb/config.in b/gdb/config.in diff --git a/gdb/configure b/gdb/configure --- a/gdb/configure +++ b/gdb/configure -@@ -771,6 +771,11 @@ PKG_CONFIG - HAVE_NATIVE_GCORE_TARGET - TARGET_OBS +@@ -775,6 +775,11 @@ TARGET_OBS + ENABLE_BFD_64_BIT_FALSE + ENABLE_BFD_64_BIT_TRUE subdirs +RPM_LIBS +RPM_CFLAGS @@ -721,7 +721,7 @@ diff --git a/gdb/configure b/gdb/configure GDB_DATADIR DEBUGDIR MAKEINFO_EXTRA_FLAGS -@@ -876,6 +881,7 @@ with_gdb_datadir +@@ -880,6 +885,7 @@ with_gdb_datadir with_relocated_sources with_auto_load_dir with_auto_load_safe_path @@ -729,7 +729,7 @@ diff --git a/gdb/configure b/gdb/configure enable_targets enable_64_bit_bfd enable_gdbmi -@@ -953,6 +959,8 @@ PKG_CONFIG_PATH +@@ -959,6 +965,8 @@ PKG_CONFIG_PATH PKG_CONFIG_LIBDIR DEBUGINFOD_CFLAGS DEBUGINFOD_LIBS @@ -738,7 +738,7 @@ diff --git a/gdb/configure b/gdb/configure YACC YFLAGS XMKMF' -@@ -1625,6 +1633,8 @@ Optional Packages: +@@ -1635,6 +1643,8 @@ Optional Packages: do not restrict auto-loaded files locations --with-debuginfod Enable debuginfo lookups with debuginfod (auto/yes/no) @@ -747,7 +747,7 @@ diff --git a/gdb/configure b/gdb/configure --with-libunwind-ia64 use libunwind frame unwinding for ia64 targets --with-curses use the curses library instead of the termcap library -@@ -1705,6 +1715,8 @@ Some influential environment variables: +@@ -1715,6 +1725,8 @@ Some influential environment variables: C compiler flags for DEBUGINFOD, overriding pkg-config DEBUGINFOD_LIBS linker flags for DEBUGINFOD, overriding pkg-config @@ -756,7 +756,7 @@ diff --git a/gdb/configure b/gdb/configure YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. -@@ -6624,6 +6636,494 @@ _ACEOF +@@ -6634,6 +6646,494 @@ _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5 $as_echo "$with_auto_load_safe_path" >&6; } @@ -1457,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 "gdbsupport/gdb_select.h" +@@ -42,6 +42,7 @@ #include "gdbsupport/gdb-sigmask.h" #include "async-event.h" + #include "bt-utils.h" +#include "symfile.h" /* readline include files. */ #include "readline/readline.h" -@@ -363,6 +364,8 @@ display_gdb_prompt (const char *new_prompt) +@@ -374,6 +375,8 @@ display_gdb_prompt (const char *new_prompt) /* Reset the nesting depth used when trace-commands is set. */ reset_command_nest_depth (); @@ -1474,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. */ -@@ -773,7 +776,10 @@ command_line_handler (gdb::unique_xmalloc_ptr &&rl) +@@ -800,7 +803,10 @@ command_line_handler (gdb::unique_xmalloc_ptr &&rl) command_handler (cmd); if (ui->prompt_state != PROMPTED) diff --git a/gdb-6.6-buildid-locate-solib-missing-ids.patch b/gdb-6.6-buildid-locate-solib-missing-ids.patch index 7dd4fb1..df45319 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 -@@ -1350,14 +1350,28 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm, +@@ -1250,14 +1250,28 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm, } { @@ -45,7 +45,7 @@ diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c if (build_id != NULL) { char *name, *build_id_filename; -@@ -1372,23 +1386,7 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm, +@@ -1272,23 +1286,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 e9ee342..1cd9a0a 100644 --- a/gdb-6.6-buildid-locate.patch +++ b/gdb-6.6-buildid-locate.patch @@ -463,14 +463,15 @@ 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 +465,159 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check) +@@ -66,63 +465,166 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check) return retval; } +static char * +link_resolve (const char *symlink, int level) +{ -+ char buf[PATH_MAX + 1], *target, *retval; ++ char buf[PATH_MAX + 1], *retval; ++ gdb::unique_xmalloc_ptr target; + ssize_t got; + + if (level > 10) @@ -482,7 +483,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c + buf[got] = '\0'; + + if (IS_ABSOLUTE_PATH (buf)) -+ target = xstrdup (buf); ++ target = make_unique_xstrdup (buf); + else + { + const std::string dir (ldirname (symlink)); @@ -496,8 +497,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c + "%s", dir.c_str(), buf); + } + -+ retval = link_resolve (target, level + 1); -+ xfree (target); ++ retval = link_resolve (target.get (), level + 1); + return retval; +} + @@ -516,42 +516,49 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c + if (separate_debug_file_debug) { -- printf_unfiltered (_(" Trying %s..."), link.c_str ()); -+ printf_unfiltered (_(" Trying %s..."), orig_link.c_str ()); - gdb_flush (gdb_stdout); +- fprintf_unfiltered (gdb_stdlog, _(" Trying %s..."), link.c_str ()); +- gdb_flush (gdb_stdlog); ++ fprintf_unfiltered (gdb_stdlog, _(" Trying %s..."), orig_link.c_str ()); ++ gdb_flush (gdb_stdout); } - /* lrealpath() is expensive even for the usually non-existent files. */ -- gdb::unique_xmalloc_ptr filename; -- if (access (link.c_str (), F_OK) == 0) -- filename.reset (lrealpath (link.c_str ())); -- -- if (filename == NULL) +- gdb::unique_xmalloc_ptr filename_holder; +- const char *filename = nullptr; +- if (startswith (link, TARGET_SYSROOT_PREFIX)) +- filename = link.c_str (); +- else if (access (link.c_str (), F_OK) == 0) + for (unsigned seqno = 0;; seqno++) { -- if (separate_debug_file_debug) -- printf_unfiltered (_(" no, unable to compute real path\n")); +- filename_holder.reset (lrealpath (link.c_str ())); +- filename = filename_holder.get (); +- } + std::string link = orig_link; -- return {}; -- } +- if (filename == NULL) +- { +- if (separate_debug_file_debug) +- fprintf_unfiltered (gdb_stdlog, +- _(" no, unable to compute real path\n")); + if (seqno > 0) + { + /* There can be multiple build-id symlinks pointing to real files + with the same build-id (such as hard links). Some of the real + files may not be installed. */ -+ + +- return {}; +- } + string_appendf (link, ".%u", seqno); + } - /* We expect to be silent on the non-existing files. */ -- gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename.get (), gnutarget); +- gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename, gnutarget); + ret_link = link; - if (debug_bfd == NULL) - { - if (separate_debug_file_debug) -- printf_unfiltered (_(" no, unable to open.\n")); +- fprintf_unfiltered (gdb_stdlog, _(" no, unable to open.\n")); + struct stat statbuf_trash; + + /* `access' automatically dereferences LINK. */ @@ -562,27 +569,33 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c + } + + /* lrealpath() is expensive even for the usually non-existent files. */ -+ gdb::unique_xmalloc_ptr filename; -+ -+ if (access (link.c_str (), F_OK) == 0) -+ filename.reset (lrealpath (link.c_str ())); ++ gdb::unique_xmalloc_ptr filename_holder; ++ const char *filename = nullptr; ++ if (startswith (link, TARGET_SYSROOT_PREFIX)) ++ filename = link.c_str (); ++ else if (access (link.c_str (), F_OK) == 0) ++ { ++ filename_holder.reset (lrealpath (link.c_str ())); ++ filename = filename_holder.get (); ++ } + + if (filename == NULL) + { + if (separate_debug_file_debug) -+ printf_unfiltered (_(" no, unable to compute real path\n")); ++ fprintf_unfiltered (gdb_stdlog, ++ _(" no, unable to compute real path\n")); + + continue; + } + + /* 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, gnutarget); - return {}; + if (debug_bfd == NULL) + { + if (separate_debug_file_debug) -+ printf_unfiltered (_(" no, unable to open.\n")); ++ fprintf_unfiltered (gdb_stdlog, _(" no, unable to open.\n")); + + continue; + } @@ -590,7 +603,8 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c + if (!build_id_verify (debug_bfd.get(), build_id_len, build_id)) + { + if (separate_debug_file_debug) -+ printf_unfiltered (_(" no, build-id does not match.\n")); ++ fprintf_unfiltered (gdb_stdlog, ++ _(" no, build-id does not match.\n")); + + continue; + } @@ -605,10 +619,10 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c + if (ret_bfd != NULL) { if (separate_debug_file_debug) -- printf_unfiltered (_(" no, build-id does not match.\n")); +- fprintf_unfiltered (gdb_stdlog, _(" no, build-id does not match.\n")); - - return {}; -+ printf_unfiltered (_(" yes!\n")); ++ fprintf_unfiltered (gdb_stdlog, _(" yes!\n")); + } + else + { @@ -632,7 +646,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c } - if (separate_debug_file_debug) -- printf_unfiltered (_(" yes!\n")); +- fprintf_unfiltered (gdb_stdlog, _(" yes!\n")); + if (link_return != NULL) + { + if (ret_bfd != NULL) @@ -650,7 +664,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 +626,7 @@ build_id_to_debug_bfd_1 (const std::string &link, size_t build_id_len, +@@ -131,7 +633,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, @@ -659,7 +673,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 +649,17 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id, +@@ -154,16 +656,17 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id, if (size > 0) { size--; @@ -680,8 +694,8 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c if (debug_bfd != NULL) return debug_bfd; -@@ -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) +@@ -174,7 +677,8 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id, + if (!gdb_sysroot.empty ()) { link = gdb_sysroot + link; - debug_bfd = build_id_to_debug_bfd_1 (link, build_id_len, build_id); @@ -690,7 +704,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c if (debug_bfd != NULL) return debug_bfd; } -@@ -179,38 +683,208 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id, +@@ -183,30 +687,187 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id, return {}; } @@ -884,8 +898,9 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c if (build_id != NULL) { if (separate_debug_file_debug) - printf_unfiltered (_("\nLooking for separate debug info (build-id) for " - "%s\n"), objfile_name (objfile)); +@@ -214,8 +875,21 @@ find_separate_debug_file_by_buildid (struct objfile *objfile) + _("\nLooking for separate debug info (build-id) for " + "%s\n"), objfile_name (objfile)); + char *build_id_filename_cstr = NULL; gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size, @@ -906,7 +921,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 +897,22 @@ find_separate_debug_file_by_buildid (struct objfile *objfile) +@@ -228,3 +902,22 @@ find_separate_debug_file_by_buildid (struct objfile *objfile) return std::string (); } @@ -1056,7 +1071,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 -@@ -21415,6 +21415,27 @@ information files. +@@ -21524,6 +21524,27 @@ information files. @end table @@ -1087,7 +1102,7 @@ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo 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) +@@ -97,7 +97,7 @@ index_cache::store (dwarf2_per_objfile *per_objfile) return; /* Get build id of objfile. */ @@ -1095,8 +1110,8 @@ diff --git a/gdb/dwarf2/index-cache.c b/gdb/dwarf2/index-cache.c + const bfd_build_id *build_id = build_id_bfd_shdr_get (obj->obfd); if (build_id == nullptr) { - if (debug_index_cache) -@@ -113,7 +113,8 @@ index_cache::store (dwarf2_per_objfile *per_objfile) + index_cache_debug ("objfile %s has no build id", +@@ -114,7 +114,8 @@ index_cache::store (dwarf2_per_objfile *per_objfile) if (dwz != nullptr) { @@ -1109,7 +1124,7 @@ diff --git a/gdb/dwarf2/index-cache.c b/gdb/dwarf2/index-cache.c diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c -@@ -5447,7 +5447,7 @@ get_gdb_index_contents_from_section (objfile *obj, T *section_owner) +@@ -5476,7 +5476,7 @@ get_gdb_index_contents_from_section (objfile *obj, T *section_owner) static gdb::array_view get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_bfd *dwarf2_per_bfd) { @@ -1118,7 +1133,7 @@ diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c if (build_id == nullptr) return {}; -@@ -5460,7 +5460,7 @@ get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_bfd *dwarf2_per_bfd) +@@ -5489,7 +5489,7 @@ get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_bfd *dwarf2_per_bfd) static gdb::array_view get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz) { @@ -1130,7 +1145,7 @@ diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c diff --git a/gdb/elfread.c b/gdb/elfread.c --- a/gdb/elfread.c +++ b/gdb/elfread.c -@@ -1272,7 +1272,9 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) +@@ -1270,7 +1270,9 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) && objfile->separate_debug_objfile == NULL && objfile->separate_debug_objfile_backlink == NULL) { @@ -1141,7 +1156,7 @@ diff --git a/gdb/elfread.c b/gdb/elfread.c if (debugfile.empty ()) debugfile = find_separate_debug_file_by_debuglink (objfile); -@@ -1287,7 +1289,7 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) +@@ -1285,7 +1287,7 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) else { has_dwarf2 = false; @@ -1150,7 +1165,7 @@ diff --git a/gdb/elfread.c b/gdb/elfread.c if (build_id != nullptr) { -@@ -1312,6 +1314,10 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) +@@ -1310,6 +1312,10 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) has_dwarf2 = true; } } @@ -1164,7 +1179,7 @@ diff --git a/gdb/elfread.c b/gdb/elfread.c diff --git a/gdb/exec.c b/gdb/exec.c --- a/gdb/exec.c +++ b/gdb/exec.c -@@ -237,7 +237,7 @@ validate_exec_file (int from_tty) +@@ -238,7 +238,7 @@ validate_exec_file (int from_tty) current_exec_file = get_exec_file (0); const bfd_build_id *exec_file_build_id @@ -1173,7 +1188,7 @@ diff --git a/gdb/exec.c b/gdb/exec.c if (exec_file_build_id != nullptr) { /* Prepend the target prefix, to force gdb_bfd_open to open the -@@ -250,7 +250,7 @@ validate_exec_file (int from_tty) +@@ -251,7 +251,7 @@ validate_exec_file (int from_tty) if (abfd != nullptr) { const bfd_build_id *target_exec_file_build_id @@ -1185,7 +1200,7 @@ diff --git a/gdb/exec.c b/gdb/exec.c diff --git a/gdb/objfiles.h b/gdb/objfiles.h --- a/gdb/objfiles.h +++ b/gdb/objfiles.h -@@ -812,6 +812,10 @@ struct objfile +@@ -769,6 +769,10 @@ struct objfile bool skip_jit_symbol_lookup = false; }; @@ -1228,7 +1243,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); -@@ -1348,9 +1349,51 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm, +@@ -1248,9 +1249,51 @@ svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm, continue; } @@ -1286,7 +1301,7 @@ diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c diff --git a/gdb/source.c b/gdb/source.c --- a/gdb/source.c +++ b/gdb/source.c -@@ -1178,7 +1178,7 @@ open_source_file (struct symtab *s) +@@ -1199,7 +1199,7 @@ open_source_file (struct symtab *s) srcpath += s->filename; } @@ -1381,7 +1396,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 -@@ -130,7 +130,8 @@ if ![info exists INTERNAL_GDBFLAGS] { +@@ -141,7 +141,8 @@ if ![info exists INTERNAL_GDBFLAGS] { "-nx" \ "-data-directory $BUILD_DATA_DIRECTORY" \ {-iex "set height 0"} \ @@ -1391,7 +1406,7 @@ diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp } # The variable gdb_prompt is a regexp which matches the gdb prompt. -@@ -2130,6 +2131,17 @@ proc default_gdb_start { } { +@@ -2200,6 +2201,17 @@ proc default_gdb_start { } { } } diff --git a/gdb-container-rh-pkg.patch b/gdb-container-rh-pkg.patch index 929ff7d..618b621 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 -@@ -14291,7 +14291,17 @@ remote_target::pid_to_exec_file (int pid) +@@ -14343,7 +14343,17 @@ remote_target::pid_to_exec_file (int pid) char *annex = NULL; if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE) diff --git a/gdb-core-open-vdso-warning.patch b/gdb-core-open-vdso-warning.patch index f58d8be..d6f8e00 100644 --- a/gdb-core-open-vdso-warning.patch +++ b/gdb-core-open-vdso-warning.patch @@ -27,7 +27,7 @@ diff --git a/gdb/testsuite/gdb.base/solib-symbol.exp b/gdb/testsuite/gdb.base/so if [get_compiler_info] { return -1 -@@ -71,8 +72,26 @@ gdb_test "br foo2" \ +@@ -70,8 +71,26 @@ gdb_test "br foo2" \ "Breakpoint.*: foo2. .2 locations..*" \ "foo2 in mdlib" diff --git a/gdb-fedora-libncursesw.patch b/gdb-fedora-libncursesw.patch index df22045..7456bf8 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 -@@ -9552,6 +9552,7 @@ if test x"$prefer_curses" = xyes; then +@@ -9567,6 +9567,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 : -@@ -9576,7 +9577,7 @@ return waddstr (); +@@ -9591,7 +9592,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 -@@ -9650,6 +9651,7 @@ case $host_os in +@@ -9665,6 +9666,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 : -@@ -9674,7 +9676,7 @@ return tgetent (); +@@ -9689,7 +9691,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 -@@ -736,7 +736,8 @@ if test x"$prefer_curses" = xyes; then +@@ -713,7 +713,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 -@@ -778,7 +779,8 @@ case $host_os in +@@ -755,7 +756,8 @@ case $host_os in esac # These are the libraries checked by Readline. diff --git a/gdb-linux_perf-bundle.patch b/gdb-linux_perf-bundle.patch index 6e27500..a2e443d 100644 --- a/gdb-linux_perf-bundle.patch +++ b/gdb-linux_perf-bundle.patch @@ -213,7 +213,7 @@ diff --git a/gdb/nat/linux-btrace.h b/gdb/nat/linux-btrace.h diff --git a/gdbsupport/common.m4 b/gdbsupport/common.m4 --- a/gdbsupport/common.m4 +++ b/gdbsupport/common.m4 -@@ -140,7 +140,7 @@ AC_DEFUN([GDB_AC_COMMON], [ +@@ -156,7 +156,7 @@ AC_DEFUN([GDB_AC_COMMON], [ AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ #include #ifndef PERF_ATTR_SIZE_VER5 diff --git a/gdb-rhbz-853071-update-manpages.patch b/gdb-rhbz-853071-update-manpages.patch deleted file mode 100644 index a9095ec..0000000 --- a/gdb-rhbz-853071-update-manpages.patch +++ /dev/null @@ -1,258 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: Bruno Larsen -Date: Wed, 13 Oct 2021 09:43:13 -0300 -Subject: gdb-rhbz-853071-update-manpages.patch - -;; Backport manpage update - -[gdb/doc]: Updated manpages to be consistent with help - -Updated manpages to be consistent with help information provided by the -binary. The main changes are: - -* Making all long-form options have '--', instead of a single '-'; -* added most of the missing options to the manpage; -* removed the information about using '+' instead of '-', since it - doesn't seem to be supported anymore. - -This also fixes 2 upstream bugs: -* https://sourceware.org/bugzilla/show_bug.cgi?id=23965; by adding ---args to the manpage -* https://sourceware.org/bugzilla/show_bug.cgi?id=10619; by adding the -double dashes - -diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo ---- a/gdb/doc/gdb.texinfo -+++ b/gdb/doc/gdb.texinfo -@@ -47030,14 +47030,7 @@ switch (die->tag) - @c man title gdb The GNU Debugger - - @c man begin SYNOPSIS gdb --gdb [@option{-help}] [@option{-nh}] [@option{-nx}] [@option{-q}] --[@option{-batch}] [@option{-cd=}@var{dir}] [@option{-f}] --[@option{-b}@w{ }@var{bps}] -- [@option{-tty=}@var{dev}] [@option{-s} @var{symfile}] --[@option{-e}@w{ }@var{prog}] [@option{-se}@w{ }@var{prog}] --[@option{-c}@w{ }@var{core}] [@option{-p}@w{ }@var{procID}] -- [@option{-x}@w{ }@var{cmds}] [@option{-d}@w{ }@var{dir}] --[@var{prog}|@var{prog} @var{procID}|@var{prog} @var{core}] -+gdb [OPTIONS] [@var{prog}|@var{prog} @var{procID}|@var{prog} @var{core}] - @c man end - - @c man begin DESCRIPTION gdb -@@ -47101,8 +47094,8 @@ Here are some of the most frequently needed @value{GDBN} commands: - - @c pod2man highlights the right hand side of the @item lines. - @table @env --@item break [@var{file}:]@var{function} --Set a breakpoint at @var{function} (in @var{file}). -+@item break [@var{file}:][@var{function}|@var{line}] -+Set a breakpoint at @var{function} or @var{line} (in @var{file}). - - @item run [@var{arglist}] - Start your program (with @var{arglist}, if specified). -@@ -47150,72 +47143,91 @@ as the @code{gdb} entry in the @code{info} program. - Any arguments other than options specify an executable - file and core file (or process ID); that is, the first argument - encountered with no --associated option flag is equivalent to a @option{-se} option, and the second, -+associated option flag is equivalent to a @option{--se} option, and the second, - if any, is equivalent to a @option{-c} option if it's the name of a file. - Many options have --both long and short forms; both are shown here. The long forms are also -+both long and abbreviated forms; both are shown here. The long forms are also - recognized if you truncate them, so long as enough of the option is --present to be unambiguous. (If you prefer, you can flag option --arguments with @option{+} rather than @option{-}, though we illustrate the --more usual convention.) -+present to be unambiguous. -+ -+The abbreviated forms are shown here with @samp{-} and long forms are shown -+with @samp{--} to reflect how they are shown in @option{--help}. However, -+@value{GDBN} recognizes all of the following conventions for most options: -+ -+@table @code -+@item --option=@var{value} -+@item --option @var{value} -+@item -option=@var{value} -+@item -option @var{value} -+@item --o=@var{value} -+@item --o @var{value} -+@item -o=@var{value} -+@item -o @var{value} -+@end table - - All the options and command line arguments you give are processed - in sequential order. The order makes a difference when the @option{-x} - option is used. - - @table @env --@item -help -+@item --help - @itemx -h - List all options, with brief explanations. - --@item -symbols=@var{file} -+@item --symbols=@var{file} - @itemx -s @var{file} --Read symbol table from file @var{file}. -+Read symbol table from @var{file}. - --@item -write -+@item --write - Enable writing into executable and core files. - --@item -exec=@var{file} -+@item --exec=@var{file} - @itemx -e @var{file} --Use file @var{file} as the executable file to execute when -+Use @var{file} as the executable file to execute when - appropriate, and for examining pure data in conjunction with a core - dump. - --@item -se=@var{file} --Read symbol table from file @var{file} and use it as the executable -+@item --se=@var{file} -+Read symbol table from @var{file} and use it as the executable - file. - --@item -core=@var{file} -+@item --core=@var{file} - @itemx -c @var{file} --Use file @var{file} as a core dump to examine. -+Use @var{file} as a core dump to examine. - --@item -command=@var{file} -+@item --command=@var{file} - @itemx -x @var{file} --Execute @value{GDBN} commands from file @var{file}. -+Execute @value{GDBN} commands from @var{file}. - -+@item --eval-command=@var{command} - @item -ex @var{command} - Execute given @value{GDBN} @var{command}. - --@item -directory=@var{directory} -+@item --init-eval-command=@var{command} -+@item -iex -+Execute @value{GDBN} @var{command} before loading the inferior. -+ -+@item --directory=@var{directory} - @itemx -d @var{directory} - Add @var{directory} to the path to search for source files. - --@item -nh -+@item --nh - Do not execute commands from @file{~/.config/gdb/gdbinit}, - @file{~/.gdbinit}, @file{~/.config/gdb/gdbearlyinit}, or - @file{~/.gdbearlyinit} - --@item -nx -+@item --nx - @itemx -n - Do not execute commands from any @file{.gdbinit} or - @file{.gdbearlyinit} initialization files. - --@item -quiet -+@item --quiet -+@item --silent - @itemx -q - ``Quiet''. Do not print the introductory and copyright messages. These - messages are also suppressed in batch mode. - --@item -batch -+@item --batch - Run in batch mode. Exit with status @code{0} after processing all the command - files specified with @option{-x} (and @file{.gdbinit}, if not inhibited). - Exit with nonzero status if an error occurs in executing the @value{GDBN} -@@ -47233,11 +47245,71 @@ Program exited normally. - (which is ordinarily issued whenever a program running under @value{GDBN} control - terminates) is not issued when running in batch mode. - --@item -cd=@var{directory} -+@item --batch-silent -+Run in batch mode, just like @option{--batch}, but totally silent. All @value{GDBN} -+output is supressed (stderr is unaffected). This is much quieter than -+@option{--silent} and would be useless for an interactive session. -+ -+This is particularly useful when using targets that give @samp{Loading section} -+messages, for example. -+ -+Note that targets that give their output via @value{GDBN}, as opposed to writing -+directly to @code{stdout}, will also be made silent. -+ -+@item --args @var{prog} [@var{arglist}] -+Change interpretation of command line so that arguments following this -+option are passed as arguments to the inferior. As an example, take -+the following command: -+ -+@smallexample -+gdb ./a.out -q -+@end smallexample -+ -+@noindent -+It would start @value{GDBN} with @option{-q}, not printing the introductory message. On -+the other hand, using: -+ -+@smallexample -+gdb --args ./a.out -q -+@end smallexample -+ -+@noindent -+starts @value{GDBN} with the introductory message, and passes the option to the inferior. -+ -+@item --pid=@var{pid} -+Attach @value{GDBN} to an already running program, with the PID @var{pid}. -+ -+@item --tui -+Open the terminal user interface. -+ -+@item --readnow -+Read all symbols from the given symfile on the first access. -+ -+@item --readnever -+Do not read symbol files. -+ -+@item --dbx -+Run in DBX compatibility mode. -+ -+@item --return-child-result -+@value{GDBN}'s exit code will be the same as the child's exit code. -+ -+@item --configuration -+Print details about GDB configuration and then exit. -+ -+@item --version -+Print version information and then exit. -+ -+@item --cd=@var{directory} - Run @value{GDBN} using @var{directory} as its working directory, - instead of the current directory. - --@item -fullname -+@item --data-directory=@var{directory} -+@item -D -+Run @value{GDBN} using @var{directory} as its data directory. The data -+directory is where @value{GDBN} searches for its auxiliary files. -+ -+@item --fullname - @itemx -f - Emacs sets this option when it runs @value{GDBN} as a subprocess. It tells - @value{GDBN} to output the full file name and line number in a standard, -@@ -47248,11 +47320,14 @@ and character position separated by colons, and a newline. The - Emacs-to-@value{GDBN} interface program uses the two @samp{\032} - characters as a signal to display the source code for the frame. - --@item -b @var{bps} -+@item -b @var{baudrate} - Set the line speed (baud rate or bits per second) of any serial - interface used by @value{GDBN} for remote debugging. - --@item -tty=@var{device} -+@item -l @var{timeout} -+Set timeout, in seconds, for remote debugging. -+ -+@item --tty=@var{device} - Run using @var{device} for your program's standard input and output. - @end table - @c man end diff --git a/gdb-rhbz1976887-field-location-kind.patch b/gdb-rhbz1976887-field-location-kind.patch deleted file mode 100644 index 00f9acc..0000000 --- a/gdb-rhbz1976887-field-location-kind.patch +++ /dev/null @@ -1,30 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= -Date: Wed, 29 Sep 2021 10:58:50 +0200 -Subject: gdb-rhbz1976887-field-location-kind.patch - -;;Backport upstream patch which fixes internal-error: Unexpected -;;type field location kind (RHBZ 1976887). - -gdbtypes.c: Add the case for FIELD_LOC_KIND_DWARF_BLOCK - -The case for FIELD_LOC_KIND_DWARF_BLOCK was missing for -switch TYPE_FIELD_LOC_KIND. Thas caused an internal-error -under some circumstances. - -Fixes bug 28030. - -diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c ---- a/gdb/gdbtypes.c -+++ b/gdb/gdbtypes.c -@@ -5571,6 +5571,10 @@ copy_type_recursive (struct objfile *objfile, - xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type, - i))); - break; -+ case FIELD_LOC_KIND_DWARF_BLOCK: -+ SET_FIELD_DWARF_BLOCK (new_type->field (i), -+ TYPE_FIELD_DWARF_BLOCK (type, i)); -+ break; - default: - internal_error (__FILE__, __LINE__, - _("Unexpected type field location kind: %d"), diff --git a/gdb-rhbz2012976-paper-over-fortran-lex-problems.patch b/gdb-rhbz2012976-paper-over-fortran-lex-problems.patch deleted file mode 100644 index 433f51d..0000000 --- a/gdb-rhbz2012976-paper-over-fortran-lex-problems.patch +++ /dev/null @@ -1,185 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: Kevin Buettner -Date: Mon, 11 Oct 2021 11:22:04 -0700 -Subject: gdb-rhbz2012976-paper-over-fortran-lex-problems.patch - -;; Backport gdb.fortran testsuite changes in order to avoid Fortran -;; lexical analyzer bug. - -[gdb/testsuite] Fix FAIL in gdb.mi/mi-var-child-f.exp - -When running test-case gdb.mi/mi-var-child-f.exp on openSUSE Tumbleweed -(with glibc 2.34) I run into: -... -(gdb) ^M -PASS: gdb.mi/mi-var-child-f.exp: mi runto prog_array -Expecting: ^(-var-create array \* array[^M -]+)?(\^done,name="array",numchild="[0-9]+",value=".*",type=.*,has_more="0"[^M -]+[(]gdb[)] ^M -[ ]*) --var-create array * array^M -&"Attempt to use a type name as an expression.\n"^M -^error,msg="-var-create: unable to create variable object"^M -(gdb) ^M -FAIL: gdb.mi/mi-var-child-f.exp: create local variable array (unexpected output) -... - -The problem is that the name array is used both: -- as the name for a local variable -- as the name of a type in glibc, in file malloc/dynarray-skeleton.c, as included - by nss/nss_files/files-hosts.c. - -Fix this by ignoring the shared lib symbols. - -Likewise in a couple of other fortran tests. - -Tested on x86_64-linux. - -diff --git a/gdb/testsuite/gdb.fortran/allocated.exp b/gdb/testsuite/gdb.fortran/allocated.exp ---- a/gdb/testsuite/gdb.fortran/allocated.exp -+++ b/gdb/testsuite/gdb.fortran/allocated.exp -@@ -25,11 +25,17 @@ if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ - return -1 - } - -+# Avoid shared lib symbols. -+gdb_test_no_output "set auto-solib-add off" -+ - if ![fortran_runto_main] { - untested "could not run to main" - return -1 - } - -+# Avoid libc symbols, in particular the 'array' type. -+gdb_test_no_output "nosharedlibrary" -+ - # Set all the breakpoints. - for { set i 1 } { $i < 6 } { incr i } { - gdb_breakpoint [gdb_get_line_number "Breakpoint $i"] -diff --git a/gdb/testsuite/gdb.fortran/array-slices-bad.exp b/gdb/testsuite/gdb.fortran/array-slices-bad.exp ---- a/gdb/testsuite/gdb.fortran/array-slices-bad.exp -+++ b/gdb/testsuite/gdb.fortran/array-slices-bad.exp -@@ -25,11 +25,17 @@ if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ - return -1 - } - -+# Avoid shared lib symbols. -+gdb_test_no_output "set auto-solib-add off" -+ - if ![fortran_runto_main] { - untested "could not run to main" - return -1 - } - -+# Avoid libc symbols, in particular the 'array' type. -+gdb_test_no_output "nosharedlibrary" -+ - # gdb_breakpoint [gdb_get_line_number "Display Message Breakpoint"] - gdb_breakpoint [gdb_get_line_number "First Breakpoint"] - gdb_breakpoint [gdb_get_line_number "Second Breakpoint"] -diff --git a/gdb/testsuite/gdb.fortran/array-slices-sub-slices.exp b/gdb/testsuite/gdb.fortran/array-slices-sub-slices.exp ---- a/gdb/testsuite/gdb.fortran/array-slices-sub-slices.exp -+++ b/gdb/testsuite/gdb.fortran/array-slices-sub-slices.exp -@@ -25,11 +25,17 @@ if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ - return -1 - } - -+# Avoid shared lib symbols. -+gdb_test_no_output "set auto-solib-add off" -+ - if ![fortran_runto_main] { - untested "could not run to main" - return -1 - } - -+# Avoid libc symbols, in particular the 'array' type. -+gdb_test_no_output "nosharedlibrary" -+ - # gdb_breakpoint [gdb_get_line_number "Display Message Breakpoint"] - gdb_breakpoint [gdb_get_line_number "Stop Here"] - gdb_breakpoint [gdb_get_line_number "Final Breakpoint"] -diff --git a/gdb/testsuite/gdb.fortran/array-slices.exp b/gdb/testsuite/gdb.fortran/array-slices.exp ---- a/gdb/testsuite/gdb.fortran/array-slices.exp -+++ b/gdb/testsuite/gdb.fortran/array-slices.exp -@@ -55,11 +55,17 @@ proc run_test { repack } { - - clean_restart ${binfile} - -+ # Avoid shared lib symbols. -+ gdb_test_no_output "set auto-solib-add off" -+ - if ![fortran_runto_main] { - untested "could not run to main" - return -1 - } - -+ # Avoid libc symbols, in particular the 'array' type. -+ gdb_test_no_output "nosharedlibrary" -+ - gdb_test_no_output "set fortran repack-array-slices $repack" - - # gdb_breakpoint [gdb_get_line_number "Display Message Breakpoint"] -diff --git a/gdb/testsuite/gdb.fortran/lbound-ubound.exp b/gdb/testsuite/gdb.fortran/lbound-ubound.exp ---- a/gdb/testsuite/gdb.fortran/lbound-ubound.exp -+++ b/gdb/testsuite/gdb.fortran/lbound-ubound.exp -@@ -25,12 +25,17 @@ if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ - return -1 - } - -+# Avoid shared lib symbols. -+gdb_test_no_output "set auto-solib-add off" - - if ![fortran_runto_main] { - untested "could not run to main" - return -1 - } - -+# Avoid libc symbols, in particular the 'array' type. -+gdb_test_no_output "nosharedlibrary" -+ - gdb_breakpoint [gdb_get_line_number "Test Breakpoint"] - gdb_breakpoint [gdb_get_line_number "Final Breakpoint"] - -diff --git a/gdb/testsuite/gdb.fortran/subarray.exp b/gdb/testsuite/gdb.fortran/subarray.exp ---- a/gdb/testsuite/gdb.fortran/subarray.exp -+++ b/gdb/testsuite/gdb.fortran/subarray.exp -@@ -27,16 +27,17 @@ if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}]} { - return -1 - } - --gdb_exit --gdb_start --gdb_reinitialize_dir $srcdir/$subdir --gdb_load ${binfile} -+# Avoid shared lib symbols. -+gdb_test_no_output "set auto-solib-add off" - - if ![fortran_runto_main] then { - perror "couldn't run to main" - continue - } - -+# Avoid libc symbols, in particular the 'array' type. -+gdb_test_no_output "nosharedlibrary" -+ - # Try to set breakpoint at the last write statement. - - set bp_location [gdb_get_line_number "str(:)"] -diff --git a/gdb/testsuite/gdb.mi/mi-var-child-f.exp b/gdb/testsuite/gdb.mi/mi-var-child-f.exp ---- a/gdb/testsuite/gdb.mi/mi-var-child-f.exp -+++ b/gdb/testsuite/gdb.mi/mi-var-child-f.exp -@@ -36,8 +36,14 @@ if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ - mi_gdb_reinitialize_dir $srcdir/$subdir - mi_gdb_load ${binfile} - -+# Avoid shared lib symbols. -+mi_gdb_test "-gdb-set auto-solib-add off" "\\^done" -+ - mi_runto prog_array - -+# Avoid libc symbols, in particular the 'array' type. -+mi_gdb_test "nosharedlibrary" ".*\\^done" -+ - mi_create_varobj "array" "array" "create local variable array" - - diff --git a/gdb-rhbz2022177-dprintf-1.patch b/gdb-rhbz2022177-dprintf-1.patch deleted file mode 100644 index d912289..0000000 --- a/gdb-rhbz2022177-dprintf-1.patch +++ /dev/null @@ -1,315 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: Kevin Buettner -Date: Wed, 10 Nov 2021 18:52:22 -0700 -Subject: gdb-rhbz2022177-dprintf-1.patch - -;; Backport fix for dprintf bug (RH BZ 2022177). - -Fix PR 28308 - dprintf breakpoints not working when run from script - -This commit fixes Bug 28308, titled "Strange interactions with -dprintf and break/commands": - -Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28308 - -Since creating that bug report, I've found a somewhat simpler way of -reproducing the problem. I've encapsulated it into the GDB test case -which I've created along with this bug fix. The name of the new test -is gdb.base/dprintf-execution-x-script.exp, I'll demonstrate the -problem using this test case, though for brevity, I've placed all -relevant files in the same directory and have renamed the files to all -start with 'dp-bug' instead of 'dprintf-execution-x-script'. - -The script file, named dp-bug.gdb, consists of the following commands: - -dprintf increment, "dprintf in increment(), vi=%d\n", vi -break inc_vi -commands - continue -end -run - -Note that the final command in this script is 'run'. When 'run' is -instead issued interactively, the bug does not occur. So, let's look -at the interactive case first in order to see the correct/expected -output: - -$ gdb -q -x dp-bug.gdb dp-bug -... eliding buggy output which I'll discuss later ... -(gdb) run -Starting program: /mesquite2/sourceware-git/f34-master/bld/gdb/tmp/dp-bug -vi=0 -dprintf in increment(), vi=0 - -Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 -26 in dprintf-execution-x-script.c -vi=1 -dprintf in increment(), vi=1 - -Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 -26 in dprintf-execution-x-script.c -vi=2 -dprintf in increment(), vi=2 - -Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 -26 in dprintf-execution-x-script.c -vi=3 -[Inferior 1 (process 1539210) exited normally] - -In this run, in which 'run' was issued from the gdb prompt (instead -of at the end of the script), there are three dprintf messages along -with three 'Breakpoint 2' messages. This is the correct output. - -Now let's look at the output that I snipped above; this is the output -when 'run' is issued from the script loaded via GDB's -x switch: - -$ gdb -q -x dp-bug.gdb dp-bug -Reading symbols from dp-bug... -Dprintf 1 at 0x40116e: file dprintf-execution-x-script.c, line 38. -Breakpoint 2 at 0x40113a: file dprintf-execution-x-script.c, line 26. -vi=0 -dprintf in increment(), vi=0 - -Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 -26 dprintf-execution-x-script.c: No such file or directory. -vi=1 - -Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 -26 in dprintf-execution-x-script.c -vi=2 - -Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26 -26 in dprintf-execution-x-script.c -vi=3 -[Inferior 1 (process 1539175) exited normally] - -In the output shown above, only the first dprintf message is printed. -The 2nd and 3rd dprintf messages are missing! However, all three -'Breakpoint 2...' messages are still printed. - -Why does this happen? - -bpstat_do_actions_1() in gdb/breakpoint.c contains the following -comment and code near the start of the function: - - /* Avoid endless recursion if a `source' command is contained - in bs->commands. */ - if (executing_breakpoint_commands) - return 0; - - scoped_restore save_executing - = make_scoped_restore (&executing_breakpoint_commands, 1); - -Also, as described by this comment prior to the 'async' field -in 'struct ui' in top.h, the main UI starts off in sync mode -when processing command line arguments: - - /* True if the UI is in async mode, false if in sync mode. If in - sync mode, a synchronous execution command (e.g, "next") does not - return until the command is finished. If in async mode, then - running a synchronous command returns right after resuming the - target. Waiting for the command's completion is later done on - the top event loop. For the main UI, this starts out disabled, - until all the explicit command line arguments (e.g., `gdb -ex - "start" -ex "next"') are processed. */ - -This combination of things, the state of the static global -'executing_breakpoint_commands' plus the state of the async -field in the main UI causes this behavior. - -This is a backtrace after hitting the dprintf breakpoint for -the second time when doing 'run' from the script file, i.e. -non-interactively: - -Thread 1 "gdb" hit Breakpoint 3, bpstat_do_actions_1 (bsp=0x7fffffffc2b8) - at /ironwood1/sourceware-git/f34-master/bld/../../worktree-master/gdb/breakpoint.c:4431 -4431 if (executing_breakpoint_commands) - - #0 bpstat_do_actions_1 (bsp=0x7fffffffc2b8) - at gdb/breakpoint.c:4431 - #1 0x00000000004d8bc6 in dprintf_after_condition_true (bs=0x1538090) - at gdb/breakpoint.c:13048 - #2 0x00000000004c5caa in bpstat_stop_status (aspace=0x116dbc0, bp_addr=0x40116e, thread=0x137f450, ws=0x7fffffffc718, - stop_chain=0x1538090) at gdb/breakpoint.c:5498 - #3 0x0000000000768d98 in handle_signal_stop (ecs=0x7fffffffc6f0) - at gdb/infrun.c:6172 - #4 0x00000000007678d3 in handle_inferior_event (ecs=0x7fffffffc6f0) - at gdb/infrun.c:5662 - #5 0x0000000000763cd5 in fetch_inferior_event () - at gdb/infrun.c:4060 - #6 0x0000000000746d7d in inferior_event_handler (event_type=INF_REG_EVENT) - at gdb/inf-loop.c:41 - #7 0x00000000007a702f in handle_target_event (error=0, client_data=0x0) - at gdb/linux-nat.c:4207 - #8 0x0000000000b8cd6e in gdb_wait_for_event (block=block@entry=0) - at gdbsupport/event-loop.cc:701 - #9 0x0000000000b8d032 in gdb_wait_for_event (block=0) - at gdbsupport/event-loop.cc:597 - #10 gdb_do_one_event () at gdbsupport/event-loop.cc:212 - #11 0x00000000009d19b6 in wait_sync_command_done () - at gdb/top.c:528 - #12 0x00000000009d1a3f in maybe_wait_sync_command_done (was_sync=0) - at gdb/top.c:545 - #13 0x00000000009d2033 in execute_command (p=0x7fffffffcb18 "", from_tty=0) - at gdb/top.c:676 - #14 0x0000000000560d5b in execute_control_command_1 (cmd=0x13b9bb0, from_tty=0) - at gdb/cli/cli-script.c:547 - #15 0x000000000056134a in execute_control_command (cmd=0x13b9bb0, from_tty=0) - at gdb/cli/cli-script.c:717 - #16 0x00000000004c3bbe in bpstat_do_actions_1 (bsp=0x137f530) - at gdb/breakpoint.c:4469 - #17 0x00000000004c3d40 in bpstat_do_actions () - at gdb/breakpoint.c:4533 - #18 0x00000000006a473a in command_handler (command=0x1399ad0 "run") - at gdb/event-top.c:624 - #19 0x00000000009d182e in read_command_file (stream=0x113e540) - at gdb/top.c:443 - #20 0x0000000000563697 in script_from_file (stream=0x113e540, file=0x13bb0b0 "dp-bug.gdb") - at gdb/cli/cli-script.c:1642 - #21 0x00000000006abd63 in source_gdb_script (extlang=0xc44e80 , stream=0x113e540, - file=0x13bb0b0 "dp-bug.gdb") at gdb/extension.c:188 - #22 0x0000000000544400 in source_script_from_stream (stream=0x113e540, file=0x7fffffffd91a "dp-bug.gdb", - file_to_open=0x13bb0b0 "dp-bug.gdb") - at gdb/cli/cli-cmds.c:692 - #23 0x0000000000544557 in source_script_with_search (file=0x7fffffffd91a "dp-bug.gdb", from_tty=1, search_path=0) - at gdb/cli/cli-cmds.c:750 - #24 0x00000000005445cf in source_script (file=0x7fffffffd91a "dp-bug.gdb", from_tty=1) - at gdb/cli/cli-cmds.c:759 - #25 0x00000000007cf6d9 in catch_command_errors (command=0x5445aa , - arg=0x7fffffffd91a "dp-bug.gdb", from_tty=1, do_bp_actions=false) - at gdb/main.c:523 - #26 0x00000000007cf85d in execute_cmdargs (cmdarg_vec=0x7fffffffd1b0, file_type=CMDARG_FILE, cmd_type=CMDARG_COMMAND, - ret=0x7fffffffd18c) at gdb/main.c:615 - #27 0x00000000007d0c8e in captured_main_1 (context=0x7fffffffd3f0) - at gdb/main.c:1322 - #28 0x00000000007d0eba in captured_main (data=0x7fffffffd3f0) - at gdb/main.c:1343 - #29 0x00000000007d0f25 in gdb_main (args=0x7fffffffd3f0) - at gdb/main.c:1368 - #30 0x00000000004186dd in main (argc=5, argv=0x7fffffffd508) - at gdb/gdb.c:32 - -There are two frames for bpstat_do_actions_1(), one at frame #16 and -the other at frame #0. The one at frame #16 is processing the actions -for Breakpoint 2, which is a 'continue'. The one at frame #0 is attempting -to process the dprintf breakpoint action. However, at this point, -the value of 'executing_breakpoint_commands' is 1, forcing an early -return, i.e. prior to executing the command(s) associated with the dprintf -breakpoint. - -For the sake of comparison, this is what the stack looks like when hitting -the dprintf breakpoint for the second time when issuing the 'run' -command from the GDB prompt. - -Thread 1 "gdb" hit Breakpoint 3, bpstat_do_actions_1 (bsp=0x7fffffffccd8) - at /ironwood1/sourceware-git/f34-master/bld/../../worktree-master/gdb/breakpoint.c:4431 -4431 if (executing_breakpoint_commands) - - #0 bpstat_do_actions_1 (bsp=0x7fffffffccd8) - at gdb/breakpoint.c:4431 - #1 0x00000000004d8bc6 in dprintf_after_condition_true (bs=0x16b0290) - at gdb/breakpoint.c:13048 - #2 0x00000000004c5caa in bpstat_stop_status (aspace=0x116dbc0, bp_addr=0x40116e, thread=0x13f0e60, ws=0x7fffffffd138, - stop_chain=0x16b0290) at gdb/breakpoint.c:5498 - #3 0x0000000000768d98 in handle_signal_stop (ecs=0x7fffffffd110) - at gdb/infrun.c:6172 - #4 0x00000000007678d3 in handle_inferior_event (ecs=0x7fffffffd110) - at gdb/infrun.c:5662 - #5 0x0000000000763cd5 in fetch_inferior_event () - at gdb/infrun.c:4060 - #6 0x0000000000746d7d in inferior_event_handler (event_type=INF_REG_EVENT) - at gdb/inf-loop.c:41 - #7 0x00000000007a702f in handle_target_event (error=0, client_data=0x0) - at gdb/linux-nat.c:4207 - #8 0x0000000000b8cd6e in gdb_wait_for_event (block=block@entry=0) - at gdbsupport/event-loop.cc:701 - #9 0x0000000000b8d032 in gdb_wait_for_event (block=0) - at gdbsupport/event-loop.cc:597 - #10 gdb_do_one_event () at gdbsupport/event-loop.cc:212 - #11 0x00000000007cf512 in start_event_loop () - at gdb/main.c:421 - #12 0x00000000007cf631 in captured_command_loop () - at gdb/main.c:481 - #13 0x00000000007d0ebf in captured_main (data=0x7fffffffd3f0) - at gdb/main.c:1353 - #14 0x00000000007d0f25 in gdb_main (args=0x7fffffffd3f0) - at gdb/main.c:1368 - #15 0x00000000004186dd in main (argc=5, argv=0x7fffffffd508) - at gdb/gdb.c:32 - -This relatively short backtrace is due to the current UI's async field -being set to 1. - -Yet another thing to be aware of regarding this problem is the -difference in the way that commands associated to dprintf breakpoints -versus regular breakpoints are handled. While they both use a command -list associated with the breakpoint, regular breakpoints will place -the commands to be run on the bpstat chain constructed in -bp_stop_status(). These commands are run later on. For dprintf -breakpoints, commands are run via the 'after_condition_true' function -pointer directly from bpstat_stop_status(). (The 'commands' field in -the bpstat is cleared in dprintf_after_condition_true(). This -prevents the dprintf commands from being run again later on when other -commands on the bpstat chain are processed.) - -Another thing that I noticed is that dprintf breakpoints are the only -type of breakpoint which use 'after_condition_true'. This suggests -that one possible way of fixing this problem, that of making dprintf -breakpoints work more like regular breakpoints, probably won't work. -(I must admit, however, that my understanding of this code isn't -complete enough to say why. I'll trust that whoever implemented it -had a good reason for doing it this way.) - -The comment referenced earlier regarding 'executing_breakpoint_commands' -states that the reason for checking this variable is to avoid -potential endless recursion when a 'source' command appears in -bs->commands. We know that a dprintf command is constrained to either -1) execution of a GDB printf command, 2) an inferior function call of -a printf-like function, or 3) execution of an agent-printf command. -Therefore, infinite recursion due to a 'source' command cannot happen -when executing commands upon hitting a dprintf breakpoint. - -I chose to fix this problem by having dprintf_after_condition_true() -directly call execute_control_commands(). This means that it no -longer attempts to go through bpstat_do_actions_1() avoiding the -infinite recursion check for potential 'source' commands on the -command chain. I think it simplifies this code a little bit too, a -definite bonus. - -Summary: - - * breakpoint.c (dprintf_after_condition_true): Don't call - bpstat_do_actions_1(). Call execute_control_commands() - instead. - -diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c ---- a/gdb/breakpoint.c -+++ b/gdb/breakpoint.c -@@ -13043,9 +13043,6 @@ dprintf_print_recreate (struct breakpoint *tp, struct ui_file *fp) - static void - dprintf_after_condition_true (struct bpstats *bs) - { -- struct bpstats tmp_bs; -- struct bpstats *tmp_bs_p = &tmp_bs; -- - /* dprintf's never cause a stop. This wasn't set in the - check_status hook instead because that would make the dprintf's - condition not be evaluated. */ -@@ -13056,14 +13053,9 @@ dprintf_after_condition_true (struct bpstats *bs) - bpstat_do_actions, if a breakpoint that causes a stop happens to - be set at same address as this dprintf, or even if running the - commands here throws. */ -- tmp_bs.commands = bs->commands; -- bs->commands = NULL; -- -- bpstat_do_actions_1 (&tmp_bs_p); -- -- /* 'tmp_bs.commands' will usually be NULL by now, but -- bpstat_do_actions_1 may return early without processing the whole -- list. */ -+ counted_command_line cmds = std::move (bs->commands); -+ gdb_assert (cmds != nullptr); -+ execute_control_commands (cmds.get (), 0); - } - - /* The breakpoint_ops structure to be used on static tracepoints with diff --git a/gdb-rhbz2022177-dprintf-2.patch b/gdb-rhbz2022177-dprintf-2.patch deleted file mode 100644 index 44bcd87..0000000 --- a/gdb-rhbz2022177-dprintf-2.patch +++ /dev/null @@ -1,194 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: Kevin Buettner -Date: Wed, 10 Nov 2021 18:55:43 -0700 -Subject: gdb-rhbz2022177-dprintf-2.patch - -;; Backport test case for dprintf bug (RH BZ 2022177). - -Test case for Bug 28308 - -The purpose of this test is described in the comments in -dprintf-execution-x-script.exp. - -Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28308 - -The name of this new test was based on that of an existing test, -bp-cmds-execution-x-script.exp. I started off by copying that test, -adding to it, and then rewriting almost all of it. It's different -enough that I decided that listing the copyright year as 2021 -was sufficient. - -diff --git a/gdb/testsuite/gdb.base/dprintf-execution-x-script.c b/gdb/testsuite/gdb.base/dprintf-execution-x-script.c -new file mode 100644 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/dprintf-execution-x-script.c -@@ -0,0 +1,53 @@ -+/* This testcase is part of GDB, the GNU debugger. -+ -+ Copyright 2021 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 . */ -+ -+#include -+#include -+ -+volatile int vi = 0; -+ -+void -+inc_vi () -+{ -+ vi++; -+} -+ -+void -+print_vi () -+{ -+ printf ("vi=%d\n", vi); -+} -+ -+void -+increment () -+{ -+ inc_vi (); -+} -+ -+int -+main (int argc, char **argv) -+{ -+ print_vi (); -+ increment (); -+ print_vi (); -+ increment (); -+ print_vi (); -+ increment (); -+ print_vi (); -+ -+ exit (0); -+} -diff --git a/gdb/testsuite/gdb.base/dprintf-execution-x-script.exp b/gdb/testsuite/gdb.base/dprintf-execution-x-script.exp -new file mode 100644 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/dprintf-execution-x-script.exp -@@ -0,0 +1,85 @@ -+# Copyright 2021 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 . */ -+ -+# Test that commands in a GDB script file run via GDB's -x flag work -+# as expected. Specifically, the script creates a dprintf breakpoint -+# as well as a normal breakpoint that has "continue" in its command -+# list, and then does "run". Correct output from GDB is checked as -+# part of this test. -+ -+# Bail out if the target can't use the 'run' command. -+if ![target_can_use_run_cmd] { -+ return 0 -+} -+ -+standard_testfile -+ -+if {[build_executable "failed to prepare" $testfile $srcfile debug]} { -+ return -1 -+} -+ -+# This is the name of the GDB script to load. -+set x_file ${srcdir}/${subdir}/$testfile.gdb -+ -+# Create context in which the global, GDBFLAGS, will be restored at -+# the end of the block. All commands run within the block are -+# actually run in the outer context. (This is why 'res' is available -+# outside of the save_vars block.) -+save_vars { GDBFLAGS } { -+ # Set flags with which to start GDB. -+ append GDBFLAGS " -ex \"set height unlimited\"" -+ append GDBFLAGS " -x \"$x_file\"" -+ append GDBFLAGS " --args \"$binfile\"" -+ -+ # Start GDB with above flags. -+ set res [gdb_spawn] -+} -+ -+set test "load and run script with -x" -+if { $res != 0} { -+ fail $test -+ return -1 -+} -+ -+# The script loaded via -x contains a run command; while running, GDB -+# is expected to print three messages from dprintf breakpoints along -+# with three interspersed messages from an ordinary breakpoint (which -+# was set up with a continue command). Set up pattern D to match -+# output from hitting the dprintf breakpoint and B for the ordinary -+# breakpoint. Then set PAT to contain the entire pattern of expected -+# output from the interspersed dprintf and ordinary breakpoints along -+# with some (additional) expected output from the dprintf breakpoints, -+# i.e. 0, 1, and 2. -+set d "dprintf in increment.., vi=" -+set b "Breakpoint ., inc_vi" -+set pat "${d}0.*?$b.*?${d}1.*?$b.*?${d}2.*?$b.*?" -+ -+proc do_test {cmd test} { -+ gdb_test $cmd "$::pat$::inferior_exited_re normally.*" $test -+} -+ -+# Check output from running script with -x -+do_test "" $test -+ -+# Restart GDB and 'source' the script; this will (still) run the program -+# due to the 'run' command in the script. -+clean_restart $binfile -+do_test "source $x_file" "load and run script using source command" -+ -+# This should leave us at the gdb prompt; Run program again using -+# already established breakpoints, i.e. those loaded from the -+# script. Prior to fixing PR 28308, this was the only test that -+# would pass. -+do_test "run" "run again" -diff --git a/gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb b/gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb -new file mode 100644 ---- /dev/null -+++ b/gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb -@@ -0,0 +1,21 @@ -+# Copyright 2021 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 . */ -+ -+dprintf increment, "dprintf in increment(), vi=%d\n", vi -+break inc_vi -+commands -+ continue -+end -+run diff --git a/gdb-rhbz202487-rework-set-debuginfod.patch b/gdb-rhbz202487-rework-set-debuginfod.patch deleted file mode 100644 index 5992ddc..0000000 --- a/gdb-rhbz202487-rework-set-debuginfod.patch +++ /dev/null @@ -1,475 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= -Date: Wed, 5 Jan 2022 19:07:23 +0100 -Subject: gdb-rhbz202487-rework-set-debuginfod.patch - -;;Backport upstream commit from Simon Marchi -;;333f35b6315 gdb: pass/return setting setter/getter -;;scalar values by value - -gdb: rework "set debuginfod" commands - -As discussed here [1], do some re-work in the "set debuginfod commands". - -First, use "set debuginfod enabled on/off/ask" instead of "set -debuginfod on/off/ask". This is more MI-friendly, and it gives an -output that makes more sense in "info set", for example. - -Then, make the show commands not call "error" when debuginfod support is -not compiled in. This makes the commands "show" and "show debuginfod" -stop early, breaking gdb.base/default.exp: - - Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/default.exp ... - FAIL: gdb.base/default.exp: info set - FAIL: gdb.base/default.exp: show - - - Make the "debuginfod enabled" setting default to "off" when debuginfod - support is not compiled in, and "ask" otherwise. - - Make the setter of "debuginfod enabled" error out when debuginfod - support is not compiled in, so that "debuginfod enabled" will always - remain "off" in that case. - - Make the setter of "debuginfod verbose" work in any case. I don't - see the harm in letting the user change that setting, since the user will - hit an error if they try to enable the use of debuginfod. - - I would do the same for the "debuginfod urls" setter, but because - this one needs to see the DEBUGINFOD_URLS_ENV_VAR macro, provided by - libdebuginfod, I made that one error out as well if debuginfod - support is not compiled it (otherwise, I would have left it like - "debuginfod verbose". Alternatively, we could hard-code - "DEBUGINFOD_URLS" in the code (in fact, it was prior to this patch, - but I think it was an oversight, as other spots use - DEBUGINFOD_URLS_ENV_VAR), or use a dummy string to store the setting, - but I don't really see the value in that. - -Rename debuginfod_enable to debuginfod_enabled, just so it matches the -setting name. - -[1] https://sourceware.org/pipermail/gdb-patches/2021-October/182937.html - -Change-Id: I45fdb2993f668226a5639228951362b7800f09d5 -Co-Authored-By: Aaron Merey - -diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c ---- a/gdb/debuginfod-support.c -+++ b/gdb/debuginfod-support.c -@@ -32,8 +32,22 @@ static const char debuginfod_on[] = "on"; - static const char debuginfod_off[] = "off"; - static const char debuginfod_ask[] = "ask"; - --static const char *debuginfod_enable = debuginfod_ask; --static unsigned debuginfod_verbose = 1; -+static const char *debuginfod_enabled_enum[] = -+{ -+ debuginfod_on, -+ debuginfod_off, -+ debuginfod_ask, -+ nullptr -+}; -+ -+static const char *debuginfod_enabled = -+#if defined(HAVE_LIBDEBUGINFOD) -+ debuginfod_ask; -+#else -+ debuginfod_off; -+#endif -+ -+static unsigned int debuginfod_verbose = 1; - - /* This is never actually used. URLs are always pulled from the - environment. */ -@@ -60,64 +74,6 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - - #define NO_IMPL _("Support for debuginfod is not compiled into GDB.") - --/* Stub set/show commands that indicate debuginfod is not supported. */ -- --static void --set_debuginfod_on_command (const char *args, int from_tty) --{ -- error (NO_IMPL); -- debuginfod_enable = debuginfod_off; --} -- --static void --set_debuginfod_off_command (const char *args, int from_tty) --{ -- error (NO_IMPL); -- debuginfod_enable = debuginfod_off; --} -- --static void --set_debuginfod_ask_command (const char *args, int from_tty) --{ -- error (NO_IMPL); -- debuginfod_enable = debuginfod_off; --} -- --static void --show_debuginfod_status_command (const char *args, int from_tty) --{ -- error (NO_IMPL); --} -- --static void --set_debuginfod_urls_command (const char *ignore, int from_tty, -- struct cmd_list_element *c) --{ -- error (NO_IMPL); --} -- --static void --show_debuginfod_urls_command (struct ui_file *file, int from_tty, -- struct cmd_list_element *cmd, const char *value) --{ -- error (NO_IMPL); --} -- --static void --set_debuginfod_verbose_command (const char *args, int from_tty, -- struct cmd_list_element *c) --{ -- error (NO_IMPL); -- debuginfod_verbose = 0; --} -- --static void --show_debuginfod_verbose_command (struct ui_file *file, int from_tty, -- struct cmd_list_element *cmd, -- const char *value) --{ -- error (NO_IMPL); --} - #else - #include - -@@ -145,81 +101,6 @@ struct debuginfod_client_deleter - using debuginfod_client_up - = std::unique_ptr; - --/* Enable debuginfod. */ -- --static void --set_debuginfod_on_command (const char *args, int from_tty) --{ -- debuginfod_enable = debuginfod_on; --} -- --/* Disable debuginfod. */ -- --static void --set_debuginfod_off_command (const char *args, int from_tty) --{ -- debuginfod_enable = debuginfod_off; --} -- --/* Before next query, ask user whether to enable debuginfod. */ -- --static void --set_debuginfod_ask_command (const char *args, int from_tty) --{ -- debuginfod_enable = debuginfod_ask; --} -- --/* Show whether debuginfod is enabled. */ -- --static void --show_debuginfod_status_command (const char *args, int from_tty) --{ -- printf_unfiltered (_("Debuginfod functionality is currently set to " \ -- "\"%s\".\n"), debuginfod_enable); --} -- --/* Set the URLs that debuginfod will query. */ -- --static void --set_debuginfod_urls_command (const char *new_value, int from_tty, -- struct cmd_list_element *c) --{ -- if (setenv ("DEBUGINFOD_URLS", new_value, 1) != 0) -- warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno)); --} -- --/* Show the URLs that debuginfod will query. */ -- --static void --show_debuginfod_urls_command (struct ui_file *file, int from_tty, -- struct cmd_list_element *cmd, const char *value) --{ -- if (value == nullptr || value[0] == '\0') -- fprintf_unfiltered (file, _("Debuginfod URLs have not been set.\n")); -- else -- fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"), -- value); --} -- --/* No-op setter used for compatibility when gdb is built without debuginfod. */ -- --static void --set_debuginfod_verbose_command (const char *args, int from_tty, -- struct cmd_list_element *c) --{ -- return; --} -- --/* Show verbosity. */ -- --static void --show_debuginfod_verbose_command (struct ui_file *file, int from_tty, -- struct cmd_list_element *cmd, const char *value) --{ -- fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"), -- value); --} -- - static int - progressfn (debuginfod_client *c, long cur, long total) - { -@@ -276,15 +157,15 @@ get_debuginfod_client () - whether to enable debuginfod. */ - - static bool --debuginfod_enabled () -+debuginfod_is_enabled () - { - const char *urls = getenv (DEBUGINFOD_URLS_ENV_VAR); - - if (urls == nullptr || urls[0] == '\0' -- || debuginfod_enable == debuginfod_off) -+ || debuginfod_enabled == debuginfod_off) - return false; - -- if (debuginfod_enable == debuginfod_ask) -+ if (debuginfod_enabled == debuginfod_ask) - { - int resp = nquery (_("\nThis GDB supports auto-downloading debuginfo " \ - "from the following URLs:\n%s\nEnable debuginfod " \ -@@ -293,16 +174,16 @@ debuginfod_enabled () - if (!resp) - { - printf_filtered (_("Debuginfod has been disabled.\nTo make this " \ -- "setting permanent, add \'set debuginfod off\' " \ -- "to .gdbinit.\n")); -- debuginfod_enable = debuginfod_off; -+ "setting permanent, add \'set debuginfod " \ -+ "enabled off\' to .gdbinit.\n")); -+ debuginfod_enabled = debuginfod_off; - return false; - } - - printf_filtered (_("Debuginfod has been enabled.\nTo make this " \ -- "setting permanent, add \'set debuginfod on\' " \ -- "to .gdbinit.\n")); -- debuginfod_enable = debuginfod_on; -+ "setting permanent, add \'set debuginfod enabled " \ -+ "on\' to .gdbinit.\n")); -+ debuginfod_enabled = debuginfod_on; - } - - return true; -@@ -316,7 +197,7 @@ debuginfod_source_query (const unsigned char *build_id, - const char *srcpath, - gdb::unique_xmalloc_ptr *destname) - { -- if (!debuginfod_enabled ()) -+ if (!debuginfod_is_enabled ()) - return scoped_fd (-ENOSYS); - - debuginfod_client *c = get_debuginfod_client (); -@@ -353,7 +234,7 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - const char *filename, - gdb::unique_xmalloc_ptr *destname) - { -- if (!debuginfod_enabled ()) -+ if (!debuginfod_is_enabled ()) - return scoped_fd (-ENOSYS); - - debuginfod_client *c = get_debuginfod_client (); -@@ -381,6 +262,67 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - } - #endif - -+/* Set callback for "set debuginfod enabled". */ -+ -+static void -+set_debuginfod_enabled (const char *args, int from_tty, -+ struct cmd_list_element *c) -+{ -+#if defined(HAVE_LIBDEBUGINFOD) -+ /* Value is already set. */ -+#else -+ error (NO_IMPL); -+#endif -+} -+ -+/* Show callback for "set debuginfod enabled". */ -+ -+static void -+show_debuginfod_enabled (ui_file *file, int from_tty, cmd_list_element *cmd, -+ const char *value) -+{ -+ printf_unfiltered (_("Debuginfod functionality is currently set to " -+ "\"%s\".\n"), debuginfod_enabled); -+} -+ -+/* Set callback for "set debuginfod urls". */ -+ -+static void -+set_debuginfod_urls (const char *args, int from_tty, -+ struct cmd_list_element *c) -+{ -+#if defined(HAVE_LIBDEBUGINFOD) -+ gdb_assert (debuginfod_urls != nullptr); -+ if (setenv (DEBUGINFOD_URLS_ENV_VAR, debuginfod_urls, 1) != 0) -+ warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno)); -+#else -+ error (NO_IMPL); -+#endif -+} -+ -+/* Show callback for "set debuginfod urls". */ -+ -+static void -+show_debuginfod_urls (ui_file *file, int from_tty, cmd_list_element *cmd, -+ const char *value) -+{ -+ if (value[0] == '\0') -+ fprintf_unfiltered (file, _("Debuginfod URLs have not been set.\n")); -+ else -+ fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"), -+ value); -+} -+ -+/* Show callback for "set debuginfod verbose". */ -+ -+static void -+show_debuginfod_verbose_command (ui_file *file, int from_tty, -+ cmd_list_element *cmd, const char *value) -+{ -+ fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"), -+ value); -+} -+ - /* Register debuginfod commands. */ - - void _initialize_debuginfod (); -@@ -396,23 +338,17 @@ _initialize_debuginfod () - _("Show debuginfod options."), - &show_debuginfod_prefix_list, 0, &showlist); - -- /* set debuginfod on */ -- add_cmd ("on", class_run, set_debuginfod_on_command, -- _("Enable debuginfod."), &set_debuginfod_prefix_list); -- -- /* set debuginfod off */ -- add_cmd ("off", class_run, set_debuginfod_off_command, -- _("Disable debuginfod."), &set_debuginfod_prefix_list); -- -- /* set debuginfod ask */ -- add_cmd ("ask", class_run, set_debuginfod_ask_command, _("\ --Ask the user whether to enable debuginfod before performing the next query."), -- &set_debuginfod_prefix_list); -- -- /* show debuginfod status */ -- add_cmd ("status", class_run, show_debuginfod_status_command, -- _("Show whether debuginfod is set to \"on\", \"off\" or \"ask\"."), -- &show_debuginfod_prefix_list); -+ add_setshow_enum_cmd ("enabled", class_run, debuginfod_enabled_enum, -+ &debuginfod_enabled, -+ _("Set whether to use debuginfod."), -+ _("Show whether to use debuginfod."), -+ _("\ -+When on, enable the use of debuginfod to download missing debug info and\n\ -+source files."), -+ set_debuginfod_enabled, -+ show_debuginfod_enabled, -+ &set_debuginfod_prefix_list, -+ &show_debuginfod_prefix_list); - - /* set/show debuginfod urls */ - add_setshow_string_noescape_cmd ("urls", class_run, &debuginfod_urls, _("\ -@@ -421,8 +357,8 @@ Show the list of debuginfod server URLs."), _("\ - Manage the space-separated list of debuginfod server URLs that GDB will query \ - when missing debuginfo, executables or source files.\nThe default value is \ - copied from the DEBUGINFOD_URLS environment variable."), -- set_debuginfod_urls_command, -- show_debuginfod_urls_command, -+ set_debuginfod_urls, -+ show_debuginfod_urls, - &set_debuginfod_prefix_list, - &show_debuginfod_prefix_list); - if (getenv ("DEBUGINFOD_URLS") != nullptr) -@@ -436,7 +372,7 @@ Set verbosity of debuginfod output."), _("\ - Show debuginfod debugging."), _("\ - When set to a non-zero value, display verbose output for each debuginfod \ - query.\nTo disable, set to zero. Verbose output is displayed by default."), -- set_debuginfod_verbose_command, -+ nullptr, - show_debuginfod_verbose_command, - &set_debuginfod_prefix_list, - &show_debuginfod_prefix_list); -diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo ---- a/gdb/doc/gdb.texinfo -+++ b/gdb/doc/gdb.texinfo -@@ -47046,27 +47046,28 @@ regarding @code{debuginfod}. - @value{GDBN} provides the following commands for configuring @code{debuginfod}. - - @table @code --@kindex set debuginfod --@anchor{set debuginfod} --@item set debuginfod --@itemx set debuginfod on -+@kindex set debuginfod enabled -+@anchor{set debuginfod enabled} -+@item set debuginfod enabled -+@itemx set debuginfod enabled on - @cindex enable debuginfod - @value{GDBN} will attempt to query @code{debuginfod} servers when missing debug - info or source files. - --@item set debuginfod off -+@item set debuginfod enabled off - @value{GDBN} will not attempt to query @code{debuginfod} servers when missing --debug info or source files. By default, @code{debuginfod} is set to @code{off} --for non-interactive sessions. -+debug info or source files. By default, @code{debuginfod enabled} is set to -+@code{off} for non-interactive sessions. - --@item set debuginfod ask -+@item set debuginfod enabled ask - @value{GDBN} will prompt the user to enable or disable @code{debuginfod} before --attempting to perform the next query. By default, @code{debuginfod} is set to --@code{ask} for interactive sessions. -+attempting to perform the next query. By default, @code{debuginfod enabled} -+is set to @code{ask} for interactive sessions. - --@kindex show debuginfod status --@item show debuginfod status --Show whether @code{debuginfod} is set to @code{on}, @code{off} or @code{ask}. -+@kindex show debuginfod enabled -+@item show debuginfod enabled -+Display whether @code{debuginfod enabled} is set to @code{on}, @code{off} or -+@code{ask}. - - @kindex set debuginfod urls - @cindex configure debuginfod URLs -diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp ---- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp -+++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp -@@ -236,7 +236,7 @@ proc local_url { } { - clean_restart - gdb_test "file $binfile" ".*No debugging symbols.*" \ - "file [file tail $binfile] cmd" -- gdb_test_no_output "set debuginfod off" -+ gdb_test_no_output "set debuginfod enabled off" - gdb_test_no_output "set debuginfod urls http://127.0.0.1:$port" - - # gdb shouldn't find the debuginfo since debuginfod has been disabled -@@ -244,7 +244,7 @@ proc local_url { } { - "file [file tail $binfile] cmd off" - - # Enable debuginfod and fetch the debuginfo -- gdb_test_no_output "set debuginfod on" -+ gdb_test_no_output "set debuginfod enabled on" - gdb_test "file $binfile" ".*Reading symbols from.*debuginfo.*" \ - "file [file tail $binfile] cmd on" - } diff --git a/gdb-rhbz2024875-expand-documentation-for-debuginfod.patch b/gdb-rhbz2024875-expand-documentation-for-debuginfod.patch deleted file mode 100644 index daee8a3..0000000 --- a/gdb-rhbz2024875-expand-documentation-for-debuginfod.patch +++ /dev/null @@ -1,152 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= -Date: Wed, 5 Jan 2022 17:08:22 +0100 -Subject: gdb-rhbz2024875-expand-documentation-for-debuginfod.patch - -;;Backport upstream commit from Aaron Merey -;;3ea44f21299 gdb.texinfo: Expand documentation for debuginfod - -gdb.texinfo: Expand documentation for debuginfod - -Add section describing GDB's usage of debuginfod. - -Refer to this new section in the description of the '--with-debuginfod' -configure option. - -Mention debuginfod in the 'Separate Debug Files' section. - -diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo ---- a/gdb/doc/gdb.texinfo -+++ b/gdb/doc/gdb.texinfo -@@ -184,6 +184,7 @@ software in general. We will miss him. - the operating system - * Trace File Format:: GDB trace file format - * Index Section Format:: .gdb_index section format -+* Debuginfod:: Download debugging resources with @code{debuginfod} - * Man Pages:: Manual pages - * Copying:: GNU General Public License says - how you can copy and share GDB -@@ -21373,7 +21374,9 @@ For the ``build ID'' method, @value{GDBN} looks in the - a file named @file{@var{nn}/@var{nnnnnnnn}.debug}, where @var{nn} are the - first 2 hex characters of the build ID bit string, and @var{nnnnnnnn} - are the rest of the bit string. (Real build ID strings are 32 or more --hex characters, not 10.) -+hex characters, not 10.) @value{GDBN} can automatically query -+@code{debuginfod} servers using build IDs in order to download separate debug -+files that cannot be found locally. For more information see @ref{Debuginfod}. - @end itemize - - So, for example, suppose you ask @value{GDBN} to debug -@@ -21394,6 +21397,10 @@ debug information files, in the indicated order: - @file{/usr/lib/debug/usr/bin/ls.debug}. - @end itemize - -+If the debug file still has not been found and @code{debuginfod} -+(@pxref{Debuginfod}) is enabled, @value{GDBN} will attempt to download the -+file from @code{debuginfod} servers. -+ - @anchor{debug-file-directory} - Global debugging info directories default to what is set by @value{GDBN} - configure option @option{--with-separate-debug-dir}. During @value{GDBN} run -@@ -38746,12 +38753,12 @@ 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/'. -+Build @value{GDBN} with @file{libdebuginfod}, the @code{debuginfod} client -+library. Used to automatically fetch ELF, DWARF and source files from -+@code{debuginfod} servers using build IDs associated with any missing -+files. Enabled by default if @file{libdebuginfod} is installed and found -+at configure time. For more information regarding @code{debuginfod} see -+@ref{Debuginfod}. - - @item --with-libunwind-ia64 - Use the libunwind library for unwinding function call stack on ia64 -@@ -47012,6 +47019,82 @@ switch (die->tag) - @} - @end smallexample - -+@node Debuginfod -+@appendix Download debugging resources with Debuginfod -+@cindex debuginfod -+ -+@code{debuginfod} is an HTTP server for distributing ELF, DWARF and source -+files. -+ -+With the @code{debuginfod} client library, @file{libdebuginfod}, @value{GDBN} -+can query servers using the build IDs associated with missing debug info, -+executables and source files in order to download them on demand. -+ -+For instructions on building @value{GDBN} with @file{libdebuginfod}, -+@pxref{Configure Options,,--with-debuginfod}. @code{debuginfod} is packaged -+with @code{elfutils}, starting with version 0.178. See -+@uref{https://sourceware.org/elfutils/Debuginfod.html} for more information -+regarding @code{debuginfod}. -+ -+@menu -+* Debuginfod Settings:: Configuring debuginfod with @value{GDBN} -+@end menu -+ -+@node Debuginfod Settings -+@section Debuginfod Settings -+ -+@value{GDBN} provides the following commands for configuring @code{debuginfod}. -+ -+@table @code -+@kindex set debuginfod -+@anchor{set debuginfod} -+@item set debuginfod -+@itemx set debuginfod on -+@cindex enable debuginfod -+@value{GDBN} will attempt to query @code{debuginfod} servers when missing debug -+info or source files. -+ -+@item set debuginfod off -+@value{GDBN} will not attempt to query @code{debuginfod} servers when missing -+debug info or source files. By default, @code{debuginfod} is set to @code{off} -+for non-interactive sessions. -+ -+@item set debuginfod ask -+@value{GDBN} will prompt the user to enable or disable @code{debuginfod} before -+attempting to perform the next query. By default, @code{debuginfod} is set to -+@code{ask} for interactive sessions. -+ -+@kindex show debuginfod status -+@item show debuginfod status -+Show whether @code{debuginfod} is set to @code{on}, @code{off} or @code{ask}. -+ -+@kindex set debuginfod urls -+@cindex configure debuginfod URLs -+@item set debuginfod urls -+@itemx set debuginfod urls @var{urls} -+Set the space-separated list of URLs that @code{debuginfod} will attempt to -+query. Only @code{http://}, @code{https://} and @code{file://} protocols -+should be used. The default value of @code{debuginfod urls} is copied from -+the @var{DEBUGINFOD_URLS} environment variable. -+ -+@kindex show debuginfod urls -+@item show debuginfod urls -+Display the list of URLs that @code{debuginfod} will attempt to query. -+ -+@kindex set debuginfod verbose -+@cindex debuginfod verbosity -+@item set debuginfod verbose -+@itemx set debuginfod verbose @var{n} -+Enable or disable @code{debuginfod}-related output. Use a non-zero value -+to enable and @code{0} to disable. @code{debuginfod} output is shown by -+default. -+ -+@kindex show debuginfod verbose -+@item show debuginfod verbose -+Show the current verbosity setting. -+ -+@end table -+ - @node Man Pages - @appendix Manual pages - @cindex Man pages diff --git a/gdb-rhbz2024875-fix-unittest-failure.patch b/gdb-rhbz2024875-fix-unittest-failure.patch deleted file mode 100644 index 012cc5a..0000000 --- a/gdb-rhbz2024875-fix-unittest-failure.patch +++ /dev/null @@ -1,37 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= -Date: Sun, 31 Oct 2021 11:34:06 -0600 -Subject: gdb-rhbz2024875-fix-unittest-failure.patch - -;;Backport upstream commit from Tom Tromey -;;2a8f1f47446 Fix unittest.exp failure due to 'set debuginfod' addition - -Fix unittest.exp failure due to 'set debuginfod' addition - -The 'set debuginfod' change caused a regression in unittest.exp: - - Running selftest help_doc_invariants. - help doc broken invariant: command 'info set debuginfod' help doc first line is not terminated with a '.' character - help doc broken invariant: command 'set debuginfod' help doc first line is not terminated with a '.' character - help doc broken invariant: command 'show debuginfod' help doc first line is not terminated with a '.' character - Self test failed: self-test failed at ../../binutils-gdb/gdb/unittests/command-def-selftests.c:100 - -This patch fixes the problem. I'm checking it in. - -diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c ---- a/gdb/debuginfod-support.c -+++ b/gdb/debuginfod-support.c -@@ -389,11 +389,11 @@ _initialize_debuginfod () - { - /* set/show debuginfod */ - add_basic_prefix_cmd ("debuginfod", class_run, -- _("Set debuginfod options"), -+ _("Set debuginfod options."), - &set_debuginfod_prefix_list, 0, &setlist); - - add_show_prefix_cmd ("debuginfod", class_run, -- _("Show debuginfod options"), -+ _("Show debuginfod options."), - &show_debuginfod_prefix_list, 0, &showlist); - - /* set debuginfod on */ diff --git a/gdb-rhbz2024875-pr27026.patch b/gdb-rhbz2024875-pr27026.patch deleted file mode 100644 index 6d7a40c..0000000 --- a/gdb-rhbz2024875-pr27026.patch +++ /dev/null @@ -1,60 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= -Date: Wed, 5 Jan 2022 22:42:27 +0100 -Subject: gdb-rhbz2024875-pr27026.patch - -;;Backport upstream commit from Aaron Merey -;;b9db26b4c44 [PR gdb/27026] CTRL-C is ignored when debug info is downloaded - -[PR gdb/27026] CTRL-C is ignored when debug info is downloaded - -During debuginfod downloads, ctrl-c should result in the download -being cancelled and skipped. However in some cases, ctrl-c fails to -get delivered to gdb during downloading. This can result in downloads -being unskippable. - -Fix this by ensuring that target_terminal::ours is in effect for the -duration of each download. - -Co-authored-by: Tom de Vries -https://sourceware.org/bugzilla/show_bug.cgi?id=27026#c3 - -diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c ---- a/gdb/debuginfod-support.c -+++ b/gdb/debuginfod-support.c -@@ -23,6 +23,7 @@ - #include "gdbsupport/gdb_optional.h" - #include "cli/cli-cmds.h" - #include "cli/cli-style.h" -+#include "target.h" - - /* Set/show debuginfod commands. */ - static cmd_list_element *set_debuginfod_prefix_list; -@@ -208,6 +209,13 @@ debuginfod_source_query (const unsigned char *build_id, - user_data data ("source file", srcpath); - - debuginfod_set_user_data (c, &data); -+ gdb::optional term_state; -+ if (target_supports_terminal_ours ()) -+ { -+ term_state.emplace (); -+ target_terminal::ours (); -+ } -+ - scoped_fd fd (debuginfod_find_source (c, - build_id, - build_id_len, -@@ -246,6 +254,13 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - user_data data ("separate debug info for", filename); - - debuginfod_set_user_data (c, &data); -+ gdb::optional term_state; -+ if (target_supports_terminal_ours ()) -+ { -+ term_state.emplace (); -+ target_terminal::ours (); -+ } -+ - scoped_fd fd (debuginfod_find_debuginfo (c, build_id, build_id_len, - &dname)); - debuginfod_set_user_data (c, nullptr); diff --git a/gdb-rhbz2024875-set_show-for-managing-debuginfod.patch b/gdb-rhbz2024875-set_show-for-managing-debuginfod.patch deleted file mode 100644 index b051003..0000000 --- a/gdb-rhbz2024875-set_show-for-managing-debuginfod.patch +++ /dev/null @@ -1,414 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= -Date: Wed, 5 Jan 2022 17:18:31 +0100 -Subject: gdb-rhbz2024875-set_show-for-managing-debuginfod.patch - -;;Backport upstream commit from Aaron Merey -;;7811fa5995f gdb: add set/show commands for managing debuginfod - -gdb: add set/show commands for managing debuginfod - -Add 'set debuginfod' command. Accepts 'on', 'off' or 'ask' as an -argument. 'on' enables debuginfod for the current session. 'off' -disables debuginfod for the current session. 'ask' will prompt -the user to either enable or disable debuginfod when the next query -is about to be performed: - - This GDB supports auto-downloading debuginfo from the following URLs: - ... - Enable debuginfod for this session? (y or [n]) y - Debuginfod has been enabled. - To make this setting permanent, add 'set debuginfod on' to .gdbinit. - -For interactive sessions, 'ask' is the default. For non-interactive -sessions, 'off' is the default. - -Add 'show debuginfod status' command. Displays whether debuginfod -is set to 'on', 'off' or 'ask'. - -Add 'set/show debuginfod urls' commands. Accepts a string of -space-separated debuginfod server URLs to be queried. The default -value is copied from the DEBUGINFOD_URLS environment variable. - -Finally add 'set/show debuginfod verbose' commands to control whether -debuginfod-related output is displayed. Verbose output is enabled -by default. - - (gdb) run - Starting program: /bin/sleep 5 - Download failed: No route to host. Continuing without debug info for /lib64/libc.so.6. - -If GDB is not built with debuginfod then these commands will just display - - Support for debuginfod is not compiled into GDB. - -diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c ---- a/gdb/debuginfod-support.c -+++ b/gdb/debuginfod-support.c -@@ -18,10 +18,26 @@ - - #include "defs.h" - #include --#include "cli/cli-style.h" - #include "gdbsupport/scoped_fd.h" - #include "debuginfod-support.h" - #include "gdbsupport/gdb_optional.h" -+#include "cli/cli-cmds.h" -+#include "cli/cli-style.h" -+ -+/* Set/show debuginfod commands. */ -+static cmd_list_element *set_debuginfod_prefix_list; -+static cmd_list_element *show_debuginfod_prefix_list; -+ -+static const char debuginfod_on[] = "on"; -+static const char debuginfod_off[] = "off"; -+static const char debuginfod_ask[] = "ask"; -+ -+static const char *debuginfod_enable = debuginfod_ask; -+static unsigned debuginfod_verbose = 1; -+ -+/* This is never actually used. URLs are always pulled from the -+ environment. */ -+static char *debuginfod_urls; - - #ifndef HAVE_LIBDEBUGINFOD - scoped_fd -@@ -41,6 +57,67 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - { - return scoped_fd (-ENOSYS); - } -+ -+#define NO_IMPL _("Support for debuginfod is not compiled into GDB.") -+ -+/* Stub set/show commands that indicate debuginfod is not supported. */ -+ -+static void -+set_debuginfod_on_command (const char *args, int from_tty) -+{ -+ error (NO_IMPL); -+ debuginfod_enable = debuginfod_off; -+} -+ -+static void -+set_debuginfod_off_command (const char *args, int from_tty) -+{ -+ error (NO_IMPL); -+ debuginfod_enable = debuginfod_off; -+} -+ -+static void -+set_debuginfod_ask_command (const char *args, int from_tty) -+{ -+ error (NO_IMPL); -+ debuginfod_enable = debuginfod_off; -+} -+ -+static void -+show_debuginfod_status_command (const char *args, int from_tty) -+{ -+ error (NO_IMPL); -+} -+ -+static void -+set_debuginfod_urls_command (const char *ignore, int from_tty, -+ struct cmd_list_element *c) -+{ -+ error (NO_IMPL); -+} -+ -+static void -+show_debuginfod_urls_command (struct ui_file *file, int from_tty, -+ struct cmd_list_element *cmd, const char *value) -+{ -+ error (NO_IMPL); -+} -+ -+static void -+set_debuginfod_verbose_command (const char *args, int from_tty, -+ struct cmd_list_element *c) -+{ -+ error (NO_IMPL); -+ debuginfod_verbose = 0; -+} -+ -+static void -+show_debuginfod_verbose_command (struct ui_file *file, int from_tty, -+ struct cmd_list_element *cmd, -+ const char *value) -+{ -+ error (NO_IMPL); -+} - #else - #include - -@@ -68,6 +145,81 @@ struct debuginfod_client_deleter - using debuginfod_client_up - = std::unique_ptr; - -+/* Enable debuginfod. */ -+ -+static void -+set_debuginfod_on_command (const char *args, int from_tty) -+{ -+ debuginfod_enable = debuginfod_on; -+} -+ -+/* Disable debuginfod. */ -+ -+static void -+set_debuginfod_off_command (const char *args, int from_tty) -+{ -+ debuginfod_enable = debuginfod_off; -+} -+ -+/* Before next query, ask user whether to enable debuginfod. */ -+ -+static void -+set_debuginfod_ask_command (const char *args, int from_tty) -+{ -+ debuginfod_enable = debuginfod_ask; -+} -+ -+/* Show whether debuginfod is enabled. */ -+ -+static void -+show_debuginfod_status_command (const char *args, int from_tty) -+{ -+ printf_unfiltered (_("Debuginfod functionality is currently set to " \ -+ "\"%s\".\n"), debuginfod_enable); -+} -+ -+/* Set the URLs that debuginfod will query. */ -+ -+static void -+set_debuginfod_urls_command (const char *new_value, int from_tty, -+ struct cmd_list_element *c) -+{ -+ if (setenv ("DEBUGINFOD_URLS", new_value, 1) != 0) -+ warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno)); -+} -+ -+/* Show the URLs that debuginfod will query. */ -+ -+static void -+show_debuginfod_urls_command (struct ui_file *file, int from_tty, -+ struct cmd_list_element *cmd, const char *value) -+{ -+ if (value == nullptr || value[0] == '\0') -+ fprintf_unfiltered (file, _("Debuginfod URLs have not been set.\n")); -+ else -+ fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"), -+ value); -+} -+ -+/* No-op setter used for compatibility when gdb is built without debuginfod. */ -+ -+static void -+set_debuginfod_verbose_command (const char *args, int from_tty, -+ struct cmd_list_element *c) -+{ -+ return; -+} -+ -+/* Show verbosity. */ -+ -+static void -+show_debuginfod_verbose_command (struct ui_file *file, int from_tty, -+ struct cmd_list_element *cmd, const char *value) -+{ -+ fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"), -+ value); -+} -+ - static int - progressfn (debuginfod_client *c, long cur, long total) - { -@@ -120,6 +272,42 @@ get_debuginfod_client () - return global_client.get (); - } - -+/* Check if debuginfod is enabled. If configured to do so, ask the user -+ whether to enable debuginfod. */ -+ -+static bool -+debuginfod_enabled () -+{ -+ const char *urls = getenv (DEBUGINFOD_URLS_ENV_VAR); -+ -+ if (urls == nullptr || urls[0] == '\0' -+ || debuginfod_enable == debuginfod_off) -+ return false; -+ -+ if (debuginfod_enable == debuginfod_ask) -+ { -+ int resp = nquery (_("\nThis GDB supports auto-downloading debuginfo " \ -+ "from the following URLs:\n%s\nEnable debuginfod " \ -+ "for this session? "), -+ urls); -+ if (!resp) -+ { -+ printf_filtered (_("Debuginfod has been disabled.\nTo make this " \ -+ "setting permanent, add \'set debuginfod off\' " \ -+ "to .gdbinit.\n")); -+ debuginfod_enable = debuginfod_off; -+ return false; -+ } -+ -+ printf_filtered (_("Debuginfod has been enabled.\nTo make this " \ -+ "setting permanent, add \'set debuginfod on\' " \ -+ "to .gdbinit.\n")); -+ debuginfod_enable = debuginfod_on; -+ } -+ -+ return true; -+} -+ - /* See debuginfod-support.h */ - - scoped_fd -@@ -128,8 +316,7 @@ debuginfod_source_query (const unsigned char *build_id, - const char *srcpath, - gdb::unique_xmalloc_ptr *destname) - { -- const char *urls_env_var = getenv (DEBUGINFOD_URLS_ENV_VAR); -- if (urls_env_var == NULL || urls_env_var[0] == '\0') -+ if (!debuginfod_enabled ()) - return scoped_fd (-ENOSYS); - - debuginfod_client *c = get_debuginfod_client (); -@@ -147,8 +334,7 @@ debuginfod_source_query (const unsigned char *build_id, - nullptr)); - debuginfod_set_user_data (c, nullptr); - -- /* TODO: Add 'set debug debuginfod' command to control when error messages are shown. */ -- if (fd.get () < 0 && fd.get () != -ENOENT) -+ if (debuginfod_verbose > 0 && 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)); -@@ -167,8 +353,7 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - const char *filename, - gdb::unique_xmalloc_ptr *destname) - { -- const char *urls_env_var = getenv (DEBUGINFOD_URLS_ENV_VAR); -- if (urls_env_var == NULL || urls_env_var[0] == '\0') -+ if (!debuginfod_enabled ()) - return scoped_fd (-ENOSYS); - - debuginfod_client *c = get_debuginfod_client (); -@@ -184,7 +369,7 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - &dname)); - debuginfod_set_user_data (c, nullptr); - -- if (fd.get () < 0 && fd.get () != -ENOENT) -+ if (debuginfod_verbose > 0 && 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)); -@@ -195,3 +380,64 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - return fd; - } - #endif -+ -+/* Register debuginfod commands. */ -+ -+void _initialize_debuginfod (); -+void -+_initialize_debuginfod () -+{ -+ /* set/show debuginfod */ -+ add_basic_prefix_cmd ("debuginfod", class_run, -+ _("Set debuginfod options"), -+ &set_debuginfod_prefix_list, 0, &setlist); -+ -+ add_show_prefix_cmd ("debuginfod", class_run, -+ _("Show debuginfod options"), -+ &show_debuginfod_prefix_list, 0, &showlist); -+ -+ /* set debuginfod on */ -+ add_cmd ("on", class_run, set_debuginfod_on_command, -+ _("Enable debuginfod."), &set_debuginfod_prefix_list); -+ -+ /* set debuginfod off */ -+ add_cmd ("off", class_run, set_debuginfod_off_command, -+ _("Disable debuginfod."), &set_debuginfod_prefix_list); -+ -+ /* set debuginfod ask */ -+ add_cmd ("ask", class_run, set_debuginfod_ask_command, _("\ -+Ask the user whether to enable debuginfod before performing the next query."), -+ &set_debuginfod_prefix_list); -+ -+ /* show debuginfod status */ -+ add_cmd ("status", class_run, show_debuginfod_status_command, -+ _("Show whether debuginfod is set to \"on\", \"off\" or \"ask\"."), -+ &show_debuginfod_prefix_list); -+ -+ /* set/show debuginfod urls */ -+ add_setshow_string_noescape_cmd ("urls", class_run, &debuginfod_urls, _("\ -+Set the list of debuginfod server URLs."), _("\ -+Show the list of debuginfod server URLs."), _("\ -+Manage the space-separated list of debuginfod server URLs that GDB will query \ -+when missing debuginfo, executables or source files.\nThe default value is \ -+copied from the DEBUGINFOD_URLS environment variable."), -+ set_debuginfod_urls_command, -+ show_debuginfod_urls_command, -+ &set_debuginfod_prefix_list, -+ &show_debuginfod_prefix_list); -+ if (getenv ("DEBUGINFOD_URLS") != nullptr) -+ debuginfod_urls = xstrdup (getenv ("DEBUGINFOD_URLS")); -+ -+ -+ /* set/show debuginfod verbose */ -+ add_setshow_zuinteger_cmd ("verbose", class_support, -+ &debuginfod_verbose, _("\ -+Set verbosity of debuginfod output."), _("\ -+Show debuginfod debugging."), _("\ -+When set to a non-zero value, display verbose output for each debuginfod \ -+query.\nTo disable, set to zero. Verbose output is displayed by default."), -+ set_debuginfod_verbose_command, -+ show_debuginfod_verbose_command, -+ &set_debuginfod_prefix_list, -+ &show_debuginfod_prefix_list); -+} -diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp ---- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp -+++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp -@@ -217,7 +217,8 @@ proc local_url { } { - setenv DEBUGINFOD_URLS http://127.0.0.1:$port - - # gdb should now find the symbol and source files -- clean_restart $binfile -+ clean_restart -+ gdb_test "file $binfile" "" "file [file tail $binfile]" "Enable debuginfod?.*" "y" - gdb_test_no_output "set substitute-path $outputdir /dev/null" \ - "set substitute-path" - gdb_test "br main" "Breakpoint 1 at.*file.*" -@@ -226,8 +227,26 @@ proc local_url { } { - # gdb should now find the debugaltlink file - clean_restart - gdb_test "file ${binfile}_alt.o" \ -- ".*Reading symbols from ${binfile}_alt.o\.\.\.*" \ -- "file [file tail ${binfile}_alt.o]" -+ ".*Downloading.*separate debug info.*" \ -+ "file [file tail ${binfile}_alt.o]" \ -+ ".*Enable debuginfod?.*" "y" -+ -+ # Configure debuginfod with commands -+ unsetenv DEBUGINFOD_URLS -+ clean_restart -+ gdb_test "file $binfile" ".*No debugging symbols.*" \ -+ "file [file tail $binfile] cmd" -+ gdb_test_no_output "set debuginfod off" -+ gdb_test_no_output "set debuginfod urls http://127.0.0.1:$port" -+ -+ # gdb shouldn't find the debuginfo since debuginfod has been disabled -+ gdb_test "file $binfile" ".*No debugging symbols.*" \ -+ "file [file tail $binfile] cmd off" -+ -+ # Enable debuginfod and fetch the debuginfo -+ gdb_test_no_output "set debuginfod on" -+ gdb_test "file $binfile" ".*Reading symbols from.*debuginfo.*" \ -+ "file [file tail $binfile] cmd on" - } - - set envlist \ diff --git a/gdb-rhbz2068280-debuginfod-unavailable-size.patch b/gdb-rhbz2068280-debuginfod-unavailable-size.patch deleted file mode 100644 index 57c6d5a..0000000 --- a/gdb-rhbz2068280-debuginfod-unavailable-size.patch +++ /dev/null @@ -1,94 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: Kevin Buettner -Date: Fri, 25 Mar 2022 17:52:35 -0700 -Subject: gdb-rhbz2068280-debuginfod-unavailable-size.patch - -;; Backport upstream patch from Aaron Merey which suppresses debuginfod -;; progress messages when size is zero. (RH BZ 2068280). - -Remove download size from debuginfod progress messages if unavailable - -Currently debuginfod progress update messages include the size of -each download: - - Downloading 7.5 MB separate debug info for /lib/libxyz.so.0 - -This value originates from the Content-Length HTTP header of the -transfer. However this header is not guaranteed to be present for -each download. This can happen when debuginfod servers compress files -on-the-fly at the time of transfer. In this case gdb wrongly prints -"-0.00 MB" as the size. - -This patch removes download sizes from progress messages when they are -not available. It also removes usage of the progress bar until -a more thorough reworking of progress updating is implemented. [1] - -[1] https://sourceware.org/pipermail/gdb-patches/2022-February/185798.html - -diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c ---- a/gdb/debuginfod-support.c -+++ b/gdb/debuginfod-support.c -@@ -81,12 +81,12 @@ debuginfod_debuginfo_query (const unsigned char *build_id, - struct user_data - { - user_data (const char *desc, const char *fname) -- : desc (desc), fname (fname) -+ : desc (desc), fname (fname), has_printed (false) - { } - - const char * const desc; - const char * const fname; -- gdb::optional meter; -+ bool has_printed; - }; - - /* Deleter for a debuginfod_client. */ -@@ -116,24 +116,32 @@ progressfn (debuginfod_client *c, long cur, long total) - return 1; - } - -- if (total == 0) -- return 0; -- -- if (!data->meter.has_value ()) -+ if (!data->has_printed) - { -- float size_in_mb = 1.0f * total / (1024 * 1024); -- string_file styled_filename (current_uiout->can_emit_style_escape ()); -- fprintf_styled (&styled_filename, -- file_name_style.style (), -- "%s", -- data->fname); -- std::string message -- = string_printf ("Downloading %.2f MB %s %s", size_in_mb, data->desc, -- styled_filename.c_str()); -- data->meter.emplace (current_uiout, message, 1); -- } -+ /* Include the transfer size, if available. */ -+ if (total > 0) -+ { -+ float size = 1.0f * total / 1024; -+ const char *unit = "KB"; -+ -+ /* If size is greater than 0.01 MB, set unit to MB. */ -+ if (size > 10.24) -+ { -+ size /= 1024; -+ unit = "MB"; -+ } -+ -+ printf_filtered ("Downloading %.2f %s %s %ps...\n", -+ size, unit, data->desc, -+ styled_string (file_name_style.style (), -+ data->fname)); -+ } -+ else -+ printf_filtered ("Downloading %s %ps...\n", data->desc, -+ styled_string (file_name_style.style (), data->fname)); - -- current_uiout->progress ((double)cur / (double)total); -+ data->has_printed = true; -+ } - - return 0; - } diff --git a/gdb-test-for-rhbz1976887.patch b/gdb-test-for-rhbz1976887.patch deleted file mode 100644 index 3cb7049..0000000 --- a/gdb-test-for-rhbz1976887.patch +++ /dev/null @@ -1,592 +0,0 @@ -From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= -Date: Wed, 29 Sep 2021 11:14:51 +0200 -Subject: gdb-test-for-rhbz1976887.patch - -;; Backport test for RHBZ 1976887 (Kevin Buettner). - -Test case reproducing PR28030 bug - -The original reproducer for PR28030 required use of a specific -compiler version - gcc-c++-11.1.1-3.fc34 is mentioned in the PR, -though it seems probable that other gcc versions might also be able to -reproduce the bug as well. This commit introduces a test case which, -using the DWARF assembler, provides a reproducer which is independent -of the compiler version. (Well, it'll work with whatever compilers -the DWARF assembler works with.) - -To the best of my knowledge, it's also the first test case which uses -the DWARF assembler to provide debug info for a shared object. That -being the case, I provided more than the usual commentary which should -allow this case to be used as a template when a combo shared -library / DWARF assembler test case is required in the future. - -I provide some details regarding the bug in a comment near the -beginning of locexpr-dml.exp. - -This problem was difficult to reproduce; I found myself constantly -referring to the backtrace while trying to figure out what (else) I -might be missing while trying to create a reproducer. Below is a -partial backtrace which I include for posterity. - - #0 internal_error ( - file=0xc50110 "/ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c", line=5575, - fmt=0xc520c0 "Unexpected type field location kind: %d") - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdbsupport/errors.cc:51 - #1 0x00000000006ef0c5 in copy_type_recursive (objfile=0x1635930, - type=0x274c260, copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c:5575 - #2 0x00000000006ef382 in copy_type_recursive (objfile=0x1635930, - type=0x274ca10, copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c:5602 - #3 0x0000000000a7409a in preserve_one_value (value=0x24269f0, - objfile=0x1635930, copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/value.c:2529 - #4 0x000000000072012a in gdbscm_preserve_values ( - extlang=0xc55720 , objfile=0x1635930, - copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/guile/scm-value.c:94 - #5 0x00000000006a3f82 in preserve_ext_lang_values (objfile=0x1635930, - copied_types=0x30bb290) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/extension.c:568 - #6 0x0000000000a7428d in preserve_values (objfile=0x1635930) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/value.c:2579 - #7 0x000000000082d514 in objfile::~objfile (this=0x1635930, - __in_chrg=) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:549 - #8 0x0000000000831cc8 in std::_Sp_counted_ptr::_M_dispose (this=0x1654580) - at /usr/include/c++/11/bits/shared_ptr_base.h:348 - #9 0x00000000004e6617 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x1654580) at /usr/include/c++/11/bits/shared_ptr_base.h:168 - #10 0x00000000004e1d2f in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x190bb88, __in_chrg=) - at /usr/include/c++/11/bits/shared_ptr_base.h:705 - #11 0x000000000082feee in std::__shared_ptr::~__shared_ptr (this=0x190bb80, __in_chrg=) - at /usr/include/c++/11/bits/shared_ptr_base.h:1154 - #12 0x000000000082ff0a in std::shared_ptr::~shared_ptr ( - this=0x190bb80, __in_chrg=) - at /usr/include/c++/11/bits/shared_ptr.h:122 - #13 0x000000000085ed7e in __gnu_cxx::new_allocator > >::destroy > (this=0x114bc00, - __p=0x190bb80) at /usr/include/c++/11/ext/new_allocator.h:168 - #14 0x000000000085e88d in std::allocator_traits > > >::destroy > (__a=..., - __p=0x190bb80) at /usr/include/c++/11/bits/alloc_traits.h:531 - #15 0x000000000085e50c in std::__cxx11::list, std::allocator > >::_M_erase (this=0x114bc00, __position= - std::shared_ptr (expired, weak count 1) = {get() = 0x1635930}) - at /usr/include/c++/11/bits/stl_list.h:1925 - #16 0x000000000085df0e in std::__cxx11::list, std::allocator > >::erase (this=0x114bc00, __position= - std::shared_ptr (expired, weak count 1) = {get() = 0x1635930}) - at /usr/include/c++/11/bits/list.tcc:158 - #17 0x000000000085c748 in program_space::remove_objfile (this=0x114bbc0, - objfile=0x1635930) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/progspace.c:210 - #18 0x000000000082d3ae in objfile::unlink (this=0x1635930) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:487 - #19 0x000000000082e68c in objfile_purge_solibs () - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:875 - #20 0x000000000092dd37 in no_shared_libraries (ignored=0x0, from_tty=1) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/solib.c:1236 - #21 0x00000000009a37fe in target_pre_inferior (from_tty=1) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/target.c:2496 - #22 0x00000000007454d6 in run_command_1 (args=0x0, from_tty=1, - run_how=RUN_NORMAL) - at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/infcmd.c:437 - -I'll note a few points regarding this backtrace: - -Frame #1 is where the internal error occurs. It's caused by an -unhandled case for FIELD_LOC_KIND_DWARF_BLOCK. The fix for this bug -adds support for this case. - -Frame #22 - it's a partial backtrace - shows that GDB is attempting to -(re)run the program. You can see the exact command sequence that was -used for reproducing this problem in the PR (at -https://sourceware.org/bugzilla/show_bug.cgi?id=28030), but in a -nutshell, after starting the program and advancing to the appropriate -source line, GDB was asked to step into libstdc++; a "finish" command -was issued, returning a value. The fact that a value was returned is -very important. GDB was then used to step back into libstdc++. A -breakpoint was set on a source line in the library after which a "run" -command was issued. - -Frame #19 shows a call to objfile_purge_solibs. It's aptly named. - -Frame #7 is a call to the destructor for one of the objfile solibs; it -turned out to be the one for libstdc++. - -Frames #6 thru #3 show various value preservation frames. If you look -at preserve_values() in gdb/value.c, the value history is preserved -first, followed by internal variables, followed by values for the -extension languages (python and guile). - -diff --git a/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location-lib.c b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location-lib.c -new file mode 100644 ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location-lib.c -@@ -0,0 +1,48 @@ -+/* Copyright (C) 2021 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 . */ -+ -+#include "locexpr-data-member-location.h" -+ -+struct A g_A = {3, 4}; -+struct B g_B = { {8, 9}, 10, 11 }; -+ -+B * -+foo () -+{ /* foo prologue */ -+ asm ("foo_label: .globl foo_label"); -+ return &g_B; /* foo return */ -+} /* foo end */ -+ -+B * -+bar (B *v) -+{ /* bar prologue */ -+ asm ("bar_label: .globl bar_label"); -+ return v; /* bar return */ -+} /* bar end */ -+ -+/* Some of the DWARF assembler procs (e.g. function_range) compile -+ this file, expecting it to be a complete program with a main() -+ function. When IS_SHAREDLIB is NOT defined, we have main() as -+ defined below. */ -+ -+#ifndef IS_SHAREDLIB -+int -+main () -+{ -+ B *b = foo (); -+} -+#endif -diff --git a/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location-main.c b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location-main.c -new file mode 100644 ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location-main.c -@@ -0,0 +1,27 @@ -+/* Copyright (C) 2021 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 . */ -+ -+#include "locexpr-data-member-location.h" -+ -+int -+main (void) -+{ -+ B *v1; -+ v1 = bar (foo ()); -+ -+ return 0; -+} -diff --git a/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp -new file mode 100644 ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.exp -@@ -0,0 +1,349 @@ -+# Copyright 2021 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 . -+ -+# This test case uses the DWARF assembler to reproduce the problem -+# described by PR28030. The bug turned out to be that -+# FIELD_LOC_KIND_DWARF_BLOCK was not handled when recursively copying -+# a value's type when preserving the value history during the freeing -+# up of objfiles associated with a shared object. (Yes, figuring out -+# how to make this happen in a concise test case turned out to be -+# challenging.) -+# -+# The following elements proved to be necessary for reproducing the -+# problem: -+# -+# 1) A location expression needed to be used with -+# DW_AT_data_member_location rather than a simple offset. -+# Moreover, this location expression needed to use opcodes -+# which GDB's DWARF reader could not convert to a simple -+# offset. (Note, however, that GDB could probably be improved -+# to handle the opcodes chosen for this test; if decode_locdesc() -+# in dwarf2/read.c is ever updated to handle both DW_OP_pick and -+# DW_OP_drop, then this test could end up passing even if -+# the bug it's intended to test has not been fixed.) -+# -+# 2) The debug info containing the above DWARF info needed -+# to be associated with a shared object since the problem -+# occurred while GDB was preserving values during the -+# purging of shared objects. -+# -+# 3) After performing some simple gdb commands, the program is -+# run again. In the course of running the objfile destructor -+# associated with the shared object, values are preserved -+# along with their types. As noted earlier, it was during -+# the recursive type copy that the bug was observed. -+# -+# Therefore, due to #2 above, this test case creates debug info -+# which is then used by a shared object. -+ -+# This test can't be run on targets lacking shared library support. -+if [skip_shlib_tests] { -+ return 0 -+} -+ -+load_lib dwarf.exp -+ -+# This test can only be run on targets which support DWARF-2 and use gas. -+if ![dwarf2_support] { -+ return 0 -+} -+ -+# gdb_test_file_name is the name of this file without the .exp -+# extension. Use it to form basenames for the main program -+# and shared object. -+set main_basename ${::gdb_test_file_name}-main -+set lib_basename ${::gdb_test_file_name}-lib -+ -+# We're generating DWARF assembly for the shared object; therefore, -+# the source file for the library / shared object must be listed first -+# (in the standard_testfile invocation) since ${srcfile} is used by -+# get_func_info (for determining the start, end, and length of a -+# function). -+# -+# The output of Dwarf::assemble will be placed in $lib_basename.S -+# which will be ${srcfile3} after the execution of standard_testfile. -+ -+standard_testfile $lib_basename.c $main_basename.c $lib_basename.S -+ -+set libsrc "${::srcdir}/${::subdir}/${::srcfile}" -+set lib_so [standard_output_file ${lib_basename}.so] -+set asm_file [standard_output_file ${::srcfile3}] -+ -+# We need to know the size of some types in order to write some of the -+# debugging info that we're about to generate. For that, we ask GDB -+# by debugging the shared object associated with this test case. -+ -+# Compile the shared library: -DIS_SHAREDLIB prevents main() from -+# being defined. Note that debugging symbols will be present for -+# this compilation. -+if {[gdb_compile_shlib $libsrc $lib_so \ -+ {additional_flags=-DIS_SHAREDLIB debug}] != ""} { -+ untested "failed to compile shared library" -+ return -+} -+ -+# Start a fresh GDB and load the shared library. -+clean_restart $lib_so -+ -+# Using our running GDB session, determine sizes of several types. -+set long_size [get_sizeof "long" -1] -+set addr_size [get_sizeof "void *" -1] -+set struct_A_size [get_sizeof "g_A" -1] -+set struct_B_size [get_sizeof "g_B" -1] -+ -+if { $long_size == -1 || $addr_size == -1 \ -+ || $struct_A_size == -1 || $struct_B_size == -1} { -+ perror "Can't determine type sizes" -+ return -+} -+ -+# Retrieve struct offset of MBR in struct TP -+proc get_offsetof { tp mbr } { -+ return [get_integer_valueof "&((${tp} *) 0)->${mbr}" -1] -+} -+ -+# Use running GDB session to get struct offsets -+set A_a [get_offsetof A a] -+set A_x [get_offsetof A x] -+set B_a [get_offsetof B a] -+set B_b [get_offsetof B b] -+set B_x2 [get_offsetof B x2] -+ -+# Create the DWARF. -+Dwarf::assemble ${asm_file} { -+ declare_labels L -+ -+ # Find start, end, and length of functions foo and bar. -+ # These calls to get_func_info will create and set variables -+ # foo_start, bar_start, foo_end, bar_end, foo_len, and -+ # bar_len. -+ # -+ # In order to get the right answers, get_func_info (and, -+ # underneath, function_range) should use the same compiler flags -+ # as those used to make a shared object. For any targets that get -+ # this far, -fpic is probably correct. -+ # -+ # Also, it should be noted that IS_SHAREDLIB is NOT defined as one -+ # of the additional flags. Not defining IS_SHAREDLIB will cause a -+ # main() to be defined for the compilation of the shared library -+ # source file which happens as a result of using get_func_info; -+ # this is currently required in order to this facility. -+ set flags {additional_flags=-fpic debug} -+ get_func_info foo $flags -+ get_func_info bar $flags -+ -+ cu {} { -+ DW_TAG_compile_unit { -+ {DW_AT_language @DW_LANG_C_plus_plus} -+ {name ${::srcfile}} -+ {stmt_list $L DW_FORM_sec_offset} -+ } { -+ declare_labels int_label class_A_label class_B_label \ -+ B_ptr_label -+ -+ int_label: DW_TAG_base_type { -+ {DW_AT_byte_size ${::long_size} DW_FORM_udata} -+ {DW_AT_encoding @DW_ATE_signed} -+ {DW_AT_name "int"} -+ } -+ -+ class_A_label: DW_TAG_class_type { -+ {DW_AT_name "A"} -+ {DW_AT_byte_size ${::struct_A_size} DW_FORM_sdata} -+ } { -+ DW_TAG_member { -+ {DW_AT_name "a"} -+ {DW_AT_type :$int_label} -+ {DW_AT_data_member_location ${::A_a} DW_FORM_udata} -+ } -+ DW_TAG_member { -+ {DW_AT_name "x"} -+ {DW_AT_type :$int_label} -+ {DW_AT_data_member_location ${::A_x} DW_FORM_udata} -+ } -+ } -+ -+ class_B_label: DW_TAG_class_type { -+ {DW_AT_name "B"} -+ {DW_AT_byte_size ${::struct_B_size} DW_FORM_sdata} -+ } { -+ # While there are easier / better ways to specify an -+ # offset used by DW_AT_data_member_location than that -+ # used below, we need a location expression here in -+ # order to reproduce the bug. Moreover, this location -+ # expression needs to use opcodes that aren't handled -+ # by decode_locdesc() in dwarf2/read.c; if we use -+ # opcodes that _are_ handled by that function, the -+ # location expression will be converted into a simple -+ # offset - which will then (again) not reproduce the -+ # bug. At the time that this test was written, -+ # neither DW_OP_pick nor DW_OP_drop were being handled -+ # by decode_locdesc(); this is why those opcodes were -+ # chosen. -+ DW_TAG_inheritance { -+ {DW_AT_type :$class_A_label} -+ {DW_AT_data_member_location { -+ DW_OP_constu ${::B_a} -+ DW_OP_plus -+ DW_OP_pick 0 -+ DW_OP_drop} SPECIAL_expr} -+ {DW_AT_accessibility 1 DW_FORM_data1} -+ } -+ DW_TAG_member { -+ {DW_AT_name "b"} -+ {DW_AT_type :$int_label} -+ {DW_AT_data_member_location ${::B_b} DW_FORM_udata} -+ } -+ DW_TAG_member { -+ {DW_AT_name "x2"} -+ {DW_AT_type :$int_label} -+ {DW_AT_data_member_location ${::B_x2} DW_FORM_udata} -+ } -+ } -+ -+ B_ptr_label: DW_TAG_pointer_type { -+ {DW_AT_type :$class_B_label} -+ {DW_AT_byte_size ${::addr_size} DW_FORM_sdata} -+ } -+ -+ DW_TAG_variable { -+ {DW_AT_name "g_A"} -+ {DW_AT_type :$class_A_label} -+ {DW_AT_external 1 flag} -+ {DW_AT_location {DW_OP_addr [gdb_target_symbol "g_A"]} \ -+ SPECIAL_expr} -+ } -+ -+ DW_TAG_variable { -+ {DW_AT_name "g_B"} -+ {DW_AT_type :$class_B_label} -+ {DW_AT_external 1 flag} -+ {DW_AT_location {DW_OP_addr [gdb_target_symbol "g_B"]} \ -+ SPECIAL_expr} -+ } -+ -+ # We can't use MACRO_AT for the definitions of foo and bar -+ # because it doesn't provide a way to pass the appropriate -+ # flags. Therefore, we list the name, low_pc, and high_pc -+ # explicitly. -+ DW_TAG_subprogram { -+ {DW_AT_name foo} -+ {DW_AT_low_pc $foo_start DW_FORM_addr} -+ {DW_AT_high_pc $foo_end DW_FORM_addr} -+ {DW_AT_type :${B_ptr_label}} -+ {DW_AT_external 1 flag} -+ } -+ -+ DW_TAG_subprogram { -+ {DW_AT_name bar} -+ {DW_AT_low_pc $bar_start DW_FORM_addr} -+ {DW_AT_high_pc $bar_end DW_FORM_addr} -+ {DW_AT_type :${B_ptr_label}} -+ {DW_AT_external 1 flag} -+ } { -+ DW_TAG_formal_parameter { -+ {DW_AT_name v} -+ {DW_AT_type :${B_ptr_label}} -+ } -+ } -+ } -+ } -+ -+ lines {version 2} L { -+ include_dir "${::srcdir}/${::subdir}" -+ file_name "${::srcfile}" 1 -+ -+ # Generate a line table program. -+ program { -+ {DW_LNE_set_address $foo_start} -+ {line [gdb_get_line_number "foo prologue"]} -+ {DW_LNS_copy} -+ {DW_LNE_set_address foo_label} -+ {line [gdb_get_line_number "foo return"]} -+ {DW_LNS_copy} -+ {line [gdb_get_line_number "foo end"]} -+ {DW_LNS_copy} -+ {DW_LNE_set_address $foo_end} -+ {DW_LNS_advance_line 1} -+ {DW_LNS_copy} -+ {DW_LNE_end_sequence} -+ -+ {DW_LNE_set_address $bar_start} -+ {line [gdb_get_line_number "bar prologue"]} -+ {DW_LNS_copy} -+ {DW_LNE_set_address bar_label} -+ {line [gdb_get_line_number "bar return"]} -+ {DW_LNS_copy} -+ {line [gdb_get_line_number "bar end"]} -+ {DW_LNS_copy} -+ {DW_LNE_set_address $bar_end} -+ {DW_LNS_advance_line 1} -+ {DW_LNS_copy} -+ {DW_LNE_end_sequence} -+ } -+ } -+} -+ -+# Compile the shared object again, but this time include / use the -+# DWARF info that we've created above. Note that (again) -+# -DIS_SHAREDLIB is used to prevent inclusion of main() in the shared -+# object. Also note the use of the "nodebug" option. Any debugging -+# information that we need will be provided by the DWARF info created -+# above. -+if {[gdb_compile_shlib [list $libsrc $asm_file] $lib_so \ -+ {additional_flags=-DIS_SHAREDLIB nodebug}] != ""} { -+ untested "failed to compile shared library" -+ return -+} -+ -+# Compile the main program for use with the shared object. -+if [prepare_for_testing "failed to prepare" ${testfile} \ -+ ${::srcfile2} [list debug shlib=$lib_so]] { -+ return -1 -+} -+ -+# Do whatever is necessary to make sure that the shared library is -+# loaded for remote targets. -+gdb_load_shlib ${lib_so} -+ -+if ![runto_main] then { -+ fail "can't run to main" -+ return -+} -+ -+# Step into foo so that we can finish out of it. -+gdb_test "step" "foo .. at .* foo end.*" "step into foo" -+ -+# Finishing out of foo will create a value that will later need to -+# be preserved when restarting the program. -+gdb_test "finish" "= \\(class B \\*\\) ${::hex} .*" "finish out of foo" -+ -+# Dereferencing and printing the return value isn't necessary -+# for reproducing the bug, but we should make sure that the -+# return value is what we expect it to be. -+gdb_test "p *$" { = { = {a = 8, x = 9}, b = 10, x2 = 11}} \ -+ "dereference return value" -+ -+# The original PR28030 reproducer stepped back into the shared object, -+# so we'll do the same here: -+gdb_test "step" "bar \\(.*" "step into bar" -+ -+# We don't want a clean restart here since that will be too clean. -+# The original reproducer for PR28030 set a breakpoint in the shared -+# library and then restarted via "run". The command below does roughly -+# the same thing. It's at this step that an internal error would -+# occur for PR28030. The "message" argument tells runto to turn on -+# the printing of PASSes while runto is doing its job. -+runto "bar" message -diff --git a/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.h b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.h -new file mode 100644 ---- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/locexpr-data-member-location.h -@@ -0,0 +1,30 @@ -+/* Copyright (C) 2021 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 . */ -+ -+typedef struct A { -+ long a; -+ long x; -+} A; -+ -+typedef struct B { -+ A a; -+ long b; -+ long x2; -+} B; -+ -+extern B *foo (); -+extern B *bar (B *v); diff --git a/gdb.spec b/gdb.spec index eb1426d..f6da6df 100644 --- a/gdb.spec +++ b/gdb.spec @@ -29,15 +29,15 @@ Name: %{?scl_prefix}gdb # Freeze it when GDB gets branched -%global snapsrc 20200208 +%global snapsrc 20220501 # See timestamp of source gnulib installed into gnulib/ . %global snapgnulib 20210105 %global tarname gdb-%{version} -Version: 11.2 +Version: 12.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: 2%{?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. @@ -326,7 +326,7 @@ BuildRequires: opencl-headers ocl-icd-devel%{bits_local} ocl-icd-devel%{bits_oth %endif %if 0%{!?rhel:1} # Fedora arm+ppc64le do not yet have fpc built. -%ifnarch %{arm} ppc64le +%ifnarch s390x BuildRequires: fpc %endif %endif @@ -928,7 +928,7 @@ touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb -name "*.py"` do # Files could be also patched getting the current time. - touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i + touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/version.in $i done %if 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1} @@ -974,7 +974,7 @@ cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/libstdcxx \ %endif # 0%{?rhel:1} && 0%{?rhel} <= 7 for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb -name "*.py"`; do # Files are installed by install(1) not preserving the timestamps. - touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i + touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/version.in $i done %endif # 0%{!?_without_python:1} @@ -1020,6 +1020,7 @@ ln -s gstack $RPM_BUILD_ROOT%{_bindir}/pstack # Documentation only for development. rm -f $RPM_BUILD_ROOT%{_infodir}/gdbint* rm -f $RPM_BUILD_ROOT%{_infodir}/stabs* +rm -f $RPM_BUILD_ROOT%{_infodir}/ctf-spec* # Delete this too because the dir file will be updated at rpm install time. # We don't want a gdb specific one overwriting the system wide one. @@ -1143,6 +1144,12 @@ fi %endif %changelog +* Wed May 4 2022 Kevin Buettner - 12.1-1 +- Rebase to FSF GDB 12.1. +- Update gdb-6.6-buildid-locate.patch. +- Update gdb-6.6-buildid-locate-rpm.patch. +- Dropped backported patches from GDB 11.1 and 11.2. + * Fri Mar 25 2022 Kevin Buettner - 11.2-2 - Backport upstream patch which removes sizes from debuginfod download messages when the size is not available (RHBZ 2068280, Aaron Merey). diff --git a/sources b/sources index 175a581..f493802 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz) = a8b1c54dd348cfeb37da73f968742896be3dd13a4215f8d8519870c2abea915f5176c3fa6989ddd10f20020a16f0fab20cbae68ee8d58a82234d8778023520f8 SHA512 (v2.0.4.tar.gz) = 596d2dac25fdbd3e5660d7e1feeb7e8d5d359d1d0e19b62ef593449037df236db1d4d98820f0031061b5573ed67797a85a77fb9991e215abaabc4bfe16ceaec8 -SHA512 (gdb-11.2.tar.xz) = 07e9026423438049b11f4f784d57401ece4e940570f613bd6958b3714fe7fbc2c048470bcce3e7d7d9f93331cdf3881d30dcc964cb113a071143a02b28e5b127 +SHA512 (gdb-12.1.tar.xz) = 425568d2e84672177d0fb87b1ad7daafdde097648d605e30cf0656970f66adc6a82ca2d83375ea4be583e9683a340e5bfdf5819668ddf66728200141ae50ff2d