Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gdb for openSUSE:Factory checked in at 2024-04-25 20:47:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gdb (Old) and /work/SRC/openSUSE:Factory/.gdb.new.1880 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gdb" Thu Apr 25 20:47:33 2024 rev:178 rq:1170040 version:13.2 Changes: -------- --- /work/SRC/openSUSE:Factory/gdb/gdb.changes 2024-04-18 22:08:04.375485759 +0200 +++ /work/SRC/openSUSE:Factory/.gdb.new.1880/gdb.changes 2024-04-25 20:47:36.974629836 +0200 @@ -1,0 +2,67 @@ +Wed Apr 24 13:07:21 UTC 2024 - Tom de Vries <tdevr...@suse.com> + +- Maintenance script qa.sh: + * Add PR31671 unresolved. + * Add unresolved for yama ptrace_scope == 1. + * Limit PR31648 unresolved to SLE-11. + +------------------------------------------------------------------- +Thu Apr 18 14:00:01 UTC 2024 - Tom de Vries <tdevr...@suse.com> + +- Patch added (swo#31524, bsc#1222188): + * make-pascal_language-print_type-handle-varstring-nul.patch +- Renable gcc-fortran for SLE-11. +- Use system compiler (gcc 4.3.4) for testing all languages on + SLE-11. +- Maintenance script qa.sh: + * Ignore all fails for SLE-11. +- Maintenance script import-fedora.sh: + * Use %patch -P N instead of deprecated %patchN. + * Drop patch skips: + * gdb-6.5-readline-long-line-crash-test.patch + * gdb-6.7-charsign-test.patch + * gdb-test-ivy-bridge.patch + * gdb-ppc-power7-test.patch + * gdb-6.3-bz140532-ppc-unwinding-test.patch +- Patches added (import from fedora rawhide @ a27201b): + * gdb-bz2196395-debuginfod-legacy-openssl-crash.patch + * gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch + * gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch + * gdb-rhbz-2232086-generate-gdb-index-consistently.patch + * gdb-rhbz-2232086-reduce-size-of-gdb-index.patch + * gdb-rhbz2232086-refactor-selftest-support.patch +- Patches updated (import from fedora rawhide @ a27201b): + * gdb-6.6-buildid-locate-rpm.patch + * gdb-6.6-buildid-locate.patch + * gdb-fedora-libncursesw.patch + * gdb-rhbz2233961-CVE-2022-4806.patch + * gdb-rhbz2233965-memory-leak.patch +- Patches updated: + * gdb-6.6-buildid-locate-rpm-suse.patch +- Patches deleted (import from fedora rawhide @ a27201b): + * gdb-rhbz1553104-s390x-arch12-test.patch + * gdb-lineno-makeup-test.patch + * gdb-6.3-bz202689-exec-from-pthread-test.patch + * gdb-6.5-bz109921-DW_AT_decl_file-test.patch + * gdb-6.5-ia64-libunwind-leak-test.patch + * gdb-6.5-last-address-space-byte-test.patch + * gdb-6.5-missed-trap-on-step-test.patch + * gdb-6.5-sharedlibrary-path.patch + * gdb-6.7-testsuite-stable-results.patch + * gdb-6.8-bz442765-threaded-exec-test.patch + * gdb-ccache-workaround.patch + * gdb-opcodes-clflushopt-test.patch + * gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch + * gdb-rhbz1350436-type-printers-error.patch + * gdb-rhbz2196395-debuginfod-legacy-openssl-crash.patch + * gdb-rhel5.9-testcase-xlf-var-inside-mod.patch + * gdb-test-pid0-core.patch +- Patches deleted: + * fixup-gdb-rhbz1553104-s390x-arch12-test.patch + * fixup-2-gdb-rhbz1553104-s390x-arch12-test.patch + * fixup-gdb-lineno-makeup-test.patch + * fixup-gdb-6.6-buildid-locate-rpm.patch +- Remove commented out mention of dropped patch + gdb-fix-selftest-fails-with-gdb-build-with-O2-flto.patch. + +------------------------------------------------------------------- Old: ---- fixup-2-gdb-rhbz1553104-s390x-arch12-test.patch fixup-gdb-6.6-buildid-locate-rpm.patch fixup-gdb-lineno-makeup-test.patch fixup-gdb-rhbz1553104-s390x-arch12-test.patch gdb-6.3-bz202689-exec-from-pthread-test.patch gdb-6.5-bz109921-DW_AT_decl_file-test.patch gdb-6.5-ia64-libunwind-leak-test.patch gdb-6.5-last-address-space-byte-test.patch gdb-6.5-missed-trap-on-step-test.patch gdb-6.5-sharedlibrary-path.patch gdb-6.7-testsuite-stable-results.patch gdb-6.8-bz442765-threaded-exec-test.patch gdb-ccache-workaround.patch gdb-lineno-makeup-test.patch gdb-opcodes-clflushopt-test.patch gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch gdb-rhbz1350436-type-printers-error.patch gdb-rhbz1553104-s390x-arch12-test.patch gdb-rhbz2196395-debuginfod-legacy-openssl-crash.patch gdb-rhel5.9-testcase-xlf-var-inside-mod.patch gdb-test-pid0-core.patch New: ---- gdb-bz2196395-debuginfod-legacy-openssl-crash.patch gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch gdb-rhbz-2232086-generate-gdb-index-consistently.patch gdb-rhbz-2232086-reduce-size-of-gdb-index.patch gdb-rhbz2232086-refactor-selftest-support.patch make-pascal_language-print_type-handle-varstring-nul.patch BETA DEBUG BEGIN: Old: * fixup-gdb-rhbz1553104-s390x-arch12-test.patch * fixup-2-gdb-rhbz1553104-s390x-arch12-test.patch * fixup-gdb-lineno-makeup-test.patch Old: * fixup-gdb-lineno-makeup-test.patch * fixup-gdb-6.6-buildid-locate-rpm.patch - Remove commented out mention of dropped patch Old: * fixup-2-gdb-rhbz1553104-s390x-arch12-test.patch * fixup-gdb-lineno-makeup-test.patch * fixup-gdb-6.6-buildid-locate-rpm.patch Old:- Patches deleted: * fixup-gdb-rhbz1553104-s390x-arch12-test.patch * fixup-2-gdb-rhbz1553104-s390x-arch12-test.patch Old: * gdb-lineno-makeup-test.patch * gdb-6.3-bz202689-exec-from-pthread-test.patch * gdb-6.5-bz109921-DW_AT_decl_file-test.patch Old: * gdb-6.3-bz202689-exec-from-pthread-test.patch * gdb-6.5-bz109921-DW_AT_decl_file-test.patch * gdb-6.5-ia64-libunwind-leak-test.patch Old: * gdb-6.5-bz109921-DW_AT_decl_file-test.patch * gdb-6.5-ia64-libunwind-leak-test.patch * gdb-6.5-last-address-space-byte-test.patch Old: * gdb-6.5-ia64-libunwind-leak-test.patch * gdb-6.5-last-address-space-byte-test.patch * gdb-6.5-missed-trap-on-step-test.patch Old: * gdb-6.5-last-address-space-byte-test.patch * gdb-6.5-missed-trap-on-step-test.patch * gdb-6.5-sharedlibrary-path.patch Old: * gdb-6.5-missed-trap-on-step-test.patch * gdb-6.5-sharedlibrary-path.patch * gdb-6.7-testsuite-stable-results.patch Old: * gdb-6.5-sharedlibrary-path.patch * gdb-6.7-testsuite-stable-results.patch * gdb-6.8-bz442765-threaded-exec-test.patch Old: * gdb-6.7-testsuite-stable-results.patch * gdb-6.8-bz442765-threaded-exec-test.patch * gdb-ccache-workaround.patch Old: * gdb-6.8-bz442765-threaded-exec-test.patch * gdb-ccache-workaround.patch * gdb-opcodes-clflushopt-test.patch Old: * gdb-rhbz1553104-s390x-arch12-test.patch * gdb-lineno-makeup-test.patch * gdb-6.3-bz202689-exec-from-pthread-test.patch Old: * gdb-ccache-workaround.patch * gdb-opcodes-clflushopt-test.patch * gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch Old: * gdb-opcodes-clflushopt-test.patch * gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch * gdb-rhbz1350436-type-printers-error.patch Old: * gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch * gdb-rhbz1350436-type-printers-error.patch * gdb-rhbz2196395-debuginfod-legacy-openssl-crash.patch Old:- Patches deleted (import from fedora rawhide @ a27201b): * gdb-rhbz1553104-s390x-arch12-test.patch * gdb-lineno-makeup-test.patch Old: * gdb-rhbz1350436-type-printers-error.patch * gdb-rhbz2196395-debuginfod-legacy-openssl-crash.patch * gdb-rhel5.9-testcase-xlf-var-inside-mod.patch Old: * gdb-rhbz2196395-debuginfod-legacy-openssl-crash.patch * gdb-rhel5.9-testcase-xlf-var-inside-mod.patch * gdb-test-pid0-core.patch Old: * gdb-rhel5.9-testcase-xlf-var-inside-mod.patch * gdb-test-pid0-core.patch - Patches deleted: BETA DEBUG END: BETA DEBUG BEGIN: New:- Patches added (import from fedora rawhide @ a27201b): * gdb-bz2196395-debuginfod-legacy-openssl-crash.patch * gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch New: * gdb-bz2196395-debuginfod-legacy-openssl-crash.patch * gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch * gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch New: * gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch * gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch * gdb-rhbz-2232086-generate-gdb-index-consistently.patch New: * gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch * gdb-rhbz-2232086-generate-gdb-index-consistently.patch * gdb-rhbz-2232086-reduce-size-of-gdb-index.patch New: * gdb-rhbz-2232086-generate-gdb-index-consistently.patch * gdb-rhbz-2232086-reduce-size-of-gdb-index.patch * gdb-rhbz2232086-refactor-selftest-support.patch New: * gdb-rhbz-2232086-reduce-size-of-gdb-index.patch * gdb-rhbz2232086-refactor-selftest-support.patch - Patches updated (import from fedora rawhide @ a27201b): New:- Patch added (swo#31524, bsc#1222188): * make-pascal_language-print_type-handle-varstring-nul.patch - Renable gcc-fortran for SLE-11. BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gdb.spec ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:41.694803156 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:41.698803303 +0200 @@ -172,59 +172,48 @@ #Fedora Packages begin Patch2: gdb-6.3-gstack-20050411.patch Patch3: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch -Patch4: gdb-6.5-sharedlibrary-path.patch -Patch6: gdb-6.5-last-address-space-byte-test.patch -Patch8: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch -Patch9: gdb-6.5-bz109921-DW_AT_decl_file-test.patch -Patch11: gdb-6.3-bz202689-exec-from-pthread-test.patch -Patch12: gdb-6.6-bz229517-gcore-without-terminal.patch -Patch13: gdb-6.6-testsuite-timeouts.patch -Patch14: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch -Patch15: gdb-6.3-attach-see-vdso-test.patch -Patch16: gdb-6.5-bz243845-stale-testing-zombie-test.patch -Patch17: gdb-6.6-buildid-locate.patch -Patch18: gdb-6.6-buildid-locate-solib-missing-ids.patch -Patch19: gdb-6.6-buildid-locate-rpm.patch -Patch22: gdb-6.7-testsuite-stable-results.patch -Patch23: gdb-6.5-ia64-libunwind-leak-test.patch -Patch24: gdb-6.5-missed-trap-on-step-test.patch -Patch25: gdb-6.5-gcore-buffer-limit-test.patch -Patch26: gdb-6.3-mapping-zero-inode-test.patch -Patch27: gdb-6.8-bz442765-threaded-exec-test.patch -Patch28: gdb-6.5-section-num-fixup-test.patch -Patch30: gdb-simultaneous-step-resume-breakpoint-test.patch -Patch31: gdb-core-open-vdso-warning.patch -Patch32: gdb-ccache-workaround.patch -Patch33: gdb-lineno-makeup-test.patch -Patch35: gdb-archer-next-over-throw-cxx-exec.patch -Patch36: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch -Patch37: gdb-test-bt-cfi-without-die.patch -Patch38: gdb-bz634108-solib_address.patch -Patch39: gdb-test-pid0-core.patch -Patch40: gdb-test-dw2-aranges.patch -Patch42: gdb-glibc-strstr-workaround.patch -Patch43: gdb-rhel5.9-testcase-xlf-var-inside-mod.patch -Patch44: gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch -Patch45: gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch -Patch46: gdb-rhbz1007614-memleak-infpy_read_memory-test.patch -Patch49: gdb-rhbz1149205-catch-syscall-after-fork-test.patch -Patch50: gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch -Patch51: gdb-rhbz1350436-type-printers-error.patch -Patch52: gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch -Patch53: gdb-fedora-libncursesw.patch -Patch54: gdb-opcodes-clflushopt-test.patch -Patch55: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch -Patch57: gdb-linux_perf-bundle.patch -Patch59: gdb-rhbz1553104-s390x-arch12-test.patch -Patch60: gdb-binutils29988-read_indexed_address.patch -Patch61: gdb-rhbz2192105-ftbs-dangling-pointer -Patch62: gdb-rhbz2160211-excessive-core-file-warnings.patch -Patch63: gdb-rhbz2196395-debuginfod-legacy-openssl-crash.patch -Patch64: gdb-bz2237515-debuginfod-double-free.patch -Patch65: gdb-bz2237392-dwarf-obstack-allocation.patch -Patch66: gdb-rhbz2233961-CVE-2022-4806.patch -Patch67: gdb-rhbz2233965-memory-leak.patch -Patch68: gdb-rhbz1773651-gdb-index-internal-error.patch +Patch5: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch +Patch6: gdb-6.6-bz229517-gcore-without-terminal.patch +Patch7: gdb-6.6-testsuite-timeouts.patch +Patch8: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch +Patch9: gdb-6.3-attach-see-vdso-test.patch +Patch10: gdb-6.5-bz243845-stale-testing-zombie-test.patch +Patch11: gdb-6.6-buildid-locate.patch +Patch12: gdb-6.6-buildid-locate-solib-missing-ids.patch +Patch13: gdb-6.6-buildid-locate-rpm.patch +Patch15: gdb-6.5-gcore-buffer-limit-test.patch +Patch16: gdb-6.3-mapping-zero-inode-test.patch +Patch17: gdb-6.5-section-num-fixup-test.patch +Patch19: gdb-simultaneous-step-resume-breakpoint-test.patch +Patch20: gdb-core-open-vdso-warning.patch +Patch21: gdb-archer-next-over-throw-cxx-exec.patch +Patch22: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch +Patch23: gdb-test-bt-cfi-without-die.patch +Patch24: gdb-bz634108-solib_address.patch +Patch25: gdb-test-dw2-aranges.patch +Patch26: gdb-glibc-strstr-workaround.patch +Patch27: gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch +Patch28: gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch +Patch29: gdb-rhbz1007614-memleak-infpy_read_memory-test.patch +Patch32: gdb-rhbz1149205-catch-syscall-after-fork-test.patch +Patch33: gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch +Patch34: gdb-fedora-libncursesw.patch +Patch35: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch +Patch37: gdb-linux_perf-bundle.patch +Patch39: gdb-binutils29988-read_indexed_address.patch +Patch40: gdb-rhbz2192105-ftbs-dangling-pointer +Patch41: gdb-rhbz2160211-excessive-core-file-warnings.patch +Patch42: gdb-bz2196395-debuginfod-legacy-openssl-crash.patch +Patch43: gdb-bz2237515-debuginfod-double-free.patch +Patch44: gdb-bz2237392-dwarf-obstack-allocation.patch +Patch45: gdb-rhbz2233961-CVE-2022-4806.patch +Patch46: gdb-rhbz2233965-memory-leak.patch +Patch47: gdb-rhbz1773651-gdb-index-internal-error.patch +Patch48: gdb-rhbz2232086-refactor-selftest-support.patch +Patch49: gdb-rhbz-2232086-reduce-size-of-gdb-index.patch +Patch50: gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch +Patch51: gdb-rhbz-2232086-generate-gdb-index-consistently.patch +Patch52: gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch #Fedora Packages end # Fedora patches fixup @@ -232,18 +221,14 @@ # them when upgrading. Patch1000: fixup-gdb-linux_perf-bundle.patch -Patch1002: fixup-gdb-rhbz1553104-s390x-arch12-test.patch Patch1003: fixup-gdb-glibc-strstr-workaround.patch Patch1004: fixup-gdb-6.5-bz243845-stale-testing-zombie-test.patch Patch1005: fixup-gdb-test-bt-cfi-without-die.patch -Patch1006: fixup-2-gdb-rhbz1553104-s390x-arch12-test.patch Patch1007: fixup-gdb-test-dw2-aranges.patch Patch1008: fixup-gdb-bz634108-solib_address.patch Patch1009: fixup-gdb-6.3-gstack-20050411.patch Patch1010: fixup-gdb-6.3-attach-see-vdso-test.patch -Patch1011: fixup-gdb-lineno-makeup-test.patch Patch1012: fixup-gdb-rhbz1261564-aarch64-hw-watchpoint-test.pat.patch -Patch1013: fixup-gdb-6.6-buildid-locate-rpm.patch # openSUSE specific @@ -256,9 +241,6 @@ # Silences ada pie compilation FAILs. Todo: Fix ada pie compilation. Patch1200: gdb-testsuite-ada-pie.patch -# Strictly speaking, not a testsuite patch, but purpose is to enable gdb.gdb -# testcases. -##Patch1201: gdb-fix-selftest-fails-with-gdb-build-with-O2-flto.patch # The test-case expects init or systemd as process, but we run into a case # where it's bash instead. This doesn't look harmful, so allow it. # It would be nice to upstream this, but in order to do that I'd like to have @@ -289,7 +271,7 @@ # -# Backports from master, available in next release. +# Backports from master, available in next release (GDB 14). Patch2000: remove-some-unnecessary-includes-from-exp.y.patch Patch2001: gdb-testsuite-fix-gdb.gdb-python-helper.exp-with-o2-.patch @@ -343,7 +325,7 @@ # Part of upstream commit deb1ba4e38b ("[gdb/tui] Fix TUI resizing for TERM=ansi"). Patch2049: gdb-testsuite-add-wait_for_msg-arg-to-term-resize-fi.patch -# Backports from master, not yet available in next release. +# Backports from master, not yet available in next release (GDB 15). Patch2070: gdb-symtab-work-around-pr-gas-29517.patch Patch2071: gdb-symtab-add-producer_is_gas.patch @@ -352,6 +334,7 @@ Patch2074: gdb-tui-fix-wmaybe-uninitialized-in-tui_find_disasse.patch Patch2075: gdb-testsuite-add-missing-no-prompt-anchor-in-gdb.ba.patch Patch2076: gdb-testsuite-remove-spurious-in-save_vars.patch +Patch2077: make-pascal_language-print_type-handle-varstring-nul.patch # Backport from gdb-patches @@ -522,14 +505,7 @@ BuildRequires: sharutils # gcc-objc++ is not covered by the GDB testsuite. -%if 0%{?suse_version} >= 1200 -# Skip for SLE-11 due to: -# unresolvable: conflict for providers of libquadmath0 -# needed by libgfortran3 -# (provider libquadmath0-gcc5 is in conflict with libquadmath0) BuildRequires: gcc-fortran -%endif - BuildRequires: gcc-objc %ifarch %ada_arch BuildRequires: gcc-ada @@ -548,6 +524,9 @@ %if 0%{suse_version} > 1110 BuildRequires: gcc-c++-32bit +%else +# Use system g++ for testing for SLE-11. +BuildRequires: gcc-c++ %endif %if 0%{suse_version} >= 1210 && 0%{suse_version} != 1315 @@ -694,19 +673,21 @@ #Fedora patching start %patch -P 2 -p1 %patch -P 3 -p1 -%patch -P 4 -p1 +%patch -P 5 -p1 %patch -P 6 -p1 +%patch -P 7 -p1 %patch -P 8 -p1 %patch -P 9 -p1 +%patch -P 10 -p1 %patch -P 11 -p1 %patch -P 12 -p1 %patch -P 13 -p1 -%patch -P 14 -p1 %patch -P 15 -p1 %patch -P 16 -p1 %patch -P 17 -p1 -%patch -P 18 -p1 %patch -P 19 -p1 +%patch -P 20 -p1 +%patch -P 21 -p1 %patch -P 22 -p1 %patch -P 23 -p1 %patch -P 24 -p1 @@ -714,60 +695,42 @@ %patch -P 26 -p1 %patch -P 27 -p1 %patch -P 28 -p1 -%patch -P 30 -p1 -%patch -P 31 -p1 +%patch -P 29 -p1 %patch -P 32 -p1 %patch -P 33 -p1 +%patch -P 34 -p1 %patch -P 35 -p1 -%patch -P 36 -p1 %patch -P 37 -p1 -%patch -P 38 -p1 %patch -P 39 -p1 %patch -P 40 -p1 +%patch -P 41 -p1 %patch -P 42 -p1 %patch -P 43 -p1 %patch -P 44 -p1 %patch -P 45 -p1 %patch -P 46 -p1 +%patch -P 47 -p1 +%patch -P 48 -p1 %patch -P 49 -p1 %patch -P 50 -p1 %patch -P 51 -p1 %patch -P 52 -p1 -%patch -P 53 -p1 -%patch -P 54 -p1 -%patch -P 55 -p1 -%patch -P 57 -p1 -%patch -P 59 -p1 -%patch -P 60 -p1 -%patch -P 61 -p1 -%patch -P 62 -p1 -%patch -P 63 -p1 -%patch -P 64 -p1 -%patch -P 65 -p1 -%patch -P 66 -p1 -%patch -P 67 -p1 -%patch -P 68 -p1 #Fedora patching end %patch -P 1000 -p1 -%patch -P 1002 -p1 %patch -P 1003 -p1 %patch -P 1004 -p1 %patch -P 1005 -p1 -%patch -P 1006 -p1 %patch -P 1007 -p1 %patch -P 1008 -p1 %patch -P 1009 -p1 %patch -P 1010 -p1 -%patch -P 1011 -p1 %patch -P 1012 -p1 -%patch -P 1013 -p1 %patch -P 1100 -p1 %patch -P 1101 -p1 %patch -P 1200 -p1 -#%patch -P 1201 -p1 %patch -P 1202 -p1 %patch -P 1203 -p1 %patch -P 1204 -p1 @@ -836,6 +799,7 @@ %patch -P 2074 -p1 %patch -P 2075 -p1 %patch -P 2076 -p1 +%patch -P 2077 -p1 %patch -P 2100 -p1 %patch -P 2101 -p1 @@ -1128,18 +1092,8 @@ %else echo ====================TESTING========================= cd gdb -%if 0%{suse_version} > 1110 CC=gcc CXX=g++ -%else -CC=gcc-4.8 -CXX=g++-4.8 -mkdir progs -for i in gcc g++ gcj gfortran gnat gnatbind gnatmake; do - test -f /usr/bin/${i}-4.8 && ln -sf /usr/bin/${i}-4.8 progs/$i -done -PATH="`pwd`"/progs:${PATH} -%endif export CC export CXX $CC -o ./orphanripper %{SOURCE2} -Wall -lutil -ggdb2 ++++++ gdb-6.6-buildid-locate-rpm-suse.patch ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:41.898810647 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:41.902810794 +0200 @@ -1,14 +1,5 @@ -From 444f438fe775a9480b93dc7d63418e0e169b4fbd Mon Sep 17 00:00:00 2001 -From: Tom de Vries <tdevr...@suse.de> -Date: Fri, 21 Apr 2023 09:08:03 +0200 -Subject: [PATCH 1/5] gdb-6.6-buildid-locate-rpm-suse.patch - ---- - gdb/build-id.c | 71 +++++++++----------------------------------------- - 1 file changed, 13 insertions(+), 58 deletions(-) - diff --git a/gdb/build-id.c b/gdb/build-id.c -index 86dfc8409b5..29aa10d8225 100644 +index 059a72fc050..58d73e70bad 100644 --- a/gdb/build-id.c +++ b/gdb/build-id.c @@ -863,10 +863,8 @@ missing_rpm_enlist_1 (const char *filename, int verify_vendor) @@ -109,29 +100,25 @@ for (const char *el : array) { gdb_printf (" %s", el); -@@ -1295,13 +1251,12 @@ debug_print_missing (const char *binary, const char *debug) - gdb_printf (gdb_stdlog, - _("Missing separate debuginfo for %s\n"), binary); - if (debug != NULL) -- gdb_printf (gdb_stdlog, _("Try: %s %s\n"), +@@ -1296,14 +1252,15 @@ debug_print_missing (const char *binary, const char *debug) + _("Missing separate debuginfo for %s.\n"), binary); + if (debug != NULL) + { ++#ifdef HAVE_LIBRPM + if (access (debug, F_OK) == 0) { +- gdb_printf (gdb_stdlog, _("Try: %s %s\n"), -#ifdef DNF_DEBUGINFO_INSTALL -- "dnf" --#else -- "yum" --#endif -- " --enablerepo='*debug*' install", debug); -+ { +- "dnf" + #else +- "yum" ++ if (1) { + #endif +- " --enablerepo='*debug*' install", debug); + const char *p = strrchr (debug, '/'); + gdb_printf (gdb_stdlog, _("Try: %s%.2s%.38s\"\n"), + "zypper install -C \"debuginfo(build-id)=", + p - 2, p + 1); -+ } - } - } - - -base-commit: 91ac179279557e27e6a149cbb78e4052a348f109 --- -2.35.3 - + } else + gdb_printf (gdb_stdlog, _("The debuginfo package for this file is probably broken.\n")); + } ++++++ gdb-6.6-buildid-locate-rpm.patch ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:41.918811381 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:41.922811528 +0200 @@ -339,7 +339,7 @@ YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. -@@ -17848,6 +17860,494 @@ _ACEOF +@@ -17848,6 +17860,495 @@ _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5 $as_echo "$with_auto_load_safe_path" >&6; } @@ -403,6 +403,7 @@ +#include <rpm/rpmlib.h> +#include <dlfcn.h> +#include <errno.h> ++#include <string.h> + +int +main () @@ -837,7 +838,7 @@ diff --git a/gdb/configure.ac b/gdb/configure.ac --- a/gdb/configure.ac +++ b/gdb/configure.ac -@@ -160,6 +160,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir, +@@ -160,6 +160,200 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir, [Directories safe to hold auto-loaded files.]) AC_MSG_RESULT([$with_auto_load_safe_path]) @@ -887,6 +888,7 @@ +#include <rpm/rpmlib.h> +#include <dlfcn.h> +#include <errno.h> ++#include <string.h> + ]], [[ + void *h; + const char *const *rpmverp; ++++++ gdb-6.6-buildid-locate.patch ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:41.942812263 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:41.946812410 +0200 @@ -561,7 +561,8 @@ - if (separate_debug_file_debug) - gdb_printf (gdb_stdlog, _(" no, unable to open.\n")); + struct stat statbuf_trash; -+ + +- return {}; + /* `access' automatically dereferences LINK. */ + if (lstat (link.c_str (), &statbuf_trash) != 0) + { @@ -596,8 +597,7 @@ + { + if (separate_debug_file_debug) + gdb_printf (gdb_stdlog, _(" no, unable to open.\n")); - -- return {}; ++ + continue; + } + @@ -628,13 +628,13 @@ + /* If none of the real files is found report as missing file + always the non-.%u-suffixed file. */ + std::string link0 = orig_link; - -- return {}; ++ + /* If the symlink has target request to install the target. + BASE-debuginfo.rpm contains the symlink but BASE.rpm may be missing. + https://bugzilla.redhat.com/show_bug.cgi?id=981154 */ + std::string link0_resolved (link_resolve (link0.c_str (), 0)); -+ + +- return {}; + if (link_all.empty ()) + link_all = link0_resolved; + else @@ -703,7 +703,7 @@ if (debug_bfd != NULL) return debug_bfd; } -@@ -183,30 +687,655 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id, +@@ -183,30 +687,660 @@ build_id_to_bfd_suffix (size_t build_id_len, const bfd_byte *build_id, return {}; } @@ -1313,15 +1313,20 @@ + already requires its own separate lines. */ + + gdb_printf (gdb_stdlog, -+ _("Missing separate debuginfo for %s\n"), binary); -+ if (debug != NULL) -+ gdb_printf (gdb_stdlog, _("Try: %s %s\n"), ++ _("Missing separate debuginfo for %s.\n"), binary); ++ if (debug != NULL) ++ { ++ if (access (debug, F_OK) == 0) { ++ gdb_printf (gdb_stdlog, _("Try: %s %s\n"), +#ifdef DNF_DEBUGINFO_INSTALL -+ "dnf" ++ "dnf" +#else -+ "yum" ++ "yum" +#endif -+ " --enablerepo='*debug*' install", debug); ++ " --enablerepo='*debug*' install", debug); ++ } else ++ gdb_printf (gdb_stdlog, _("The debuginfo package for this file is probably broken.\n")); ++ } + } +} + @@ -1365,7 +1370,7 @@ if (build_id != NULL) { if (separate_debug_file_debug) -@@ -214,8 +1343,21 @@ find_separate_debug_file_by_buildid (struct objfile *objfile) +@@ -214,8 +1348,21 @@ find_separate_debug_file_by_buildid (struct objfile *objfile) _("\nLooking for separate debug info (build-id) for " "%s\n"), objfile_name (objfile)); @@ -1388,7 +1393,7 @@ /* Prevent looping on a stripped .debug file. */ if (abfd != NULL && filename_cmp (bfd_get_filename (abfd.get ()), -@@ -228,3 +1370,22 @@ find_separate_debug_file_by_buildid (struct objfile *objfile) +@@ -228,3 +1375,22 @@ find_separate_debug_file_by_buildid (struct objfile *objfile) return std::string (); } ++++++ gdb-bz2196395-debuginfod-legacy-openssl-crash.patch ++++++ >From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: Andrew Burgess <aburg...@redhat.com> Date: Tue, 20 Jun 2023 09:46:35 +0100 Subject: gdb-bz2196395-debuginfod-legacy-openssl-crash.patch ;; Backport upstream commit f3eee5861743d635 to fix a crash triggered ;; when debuginfod makes use of particular openssl settings. gdb/debuginfod: cleanup debuginfod earlier A GDB crash was discovered on Fedora GDB that was tracked back to an issue with the way that debuginfod is cleaned up. The bug was reported on Fedora 37, 38, and 39. Here are the steps to reproduce: 1. The file /etc/ssl/openssl.cnf contains the following lines: [provider_sect] default = default_sect ##legacy = legacy_sect ## [default_sect] activate = 1 ##[legacy_sect] ##activate = 1 The bug will occur when the '##' characters are removed so that the lines in question look like this: [provider_sect] default = default_sect legacy = legacy_sect [default_sect] activate = 1 [legacy_sect] activate = 1 2. Clean up any existing debuginfod cache data: > rm -rf $HOME/.cache/debuginfod_client 3. Run GDB: > gdb -nx -q -iex 'set trace-commands on' \ -iex 'set debuginfod enabled on' \ -iex 'set confirm off' \ -ex 'start' -ex 'quit' /bin/ls +set debuginfod enabled on +set confirm off Reading symbols from /bin/ls... Downloading separate debug info for /usr/bin/ls ... snip ... Temporary breakpoint 1, main (argc=1, argv=0x7fffffffde38) at ../src/ls.c:1646 1646 { +quit Fatal signal: Segmentation fault ----- Backtrace ----- ... snip ... So GDB ends up crashing during exit. What's happening is that when debuginfod is initialised debuginfod_begin is called (this is in the debuginfod library), this in turn sets up libcurl, which makes use of openssl. Somewhere during this setup process an at_exit function is registered to cleanup some state. Back in GDB the debuginfod_client object is managed using this code: /* Deleter for a debuginfod_client. */ struct debuginfod_client_deleter { void operator() (debuginfod_client *c) { debuginfod_end (c); } }; using debuginfod_client_up = std::unique_ptr<debuginfod_client, debuginfod_client_deleter>; And then a global debuginfod_client_up is created to hold a pointer to the debuginfod_client object. As a global this will be cleaned up using the standard C++ global object destructor mechanism, which is run after the at_exit handlers. However, it is expected that when debuginfod_end is called the debuginfod_client object will still be in a usable state, that is, we don't expect the at_exit handlers to have run and started cleaning up the library state. To fix this issue we need to ensure that debuginfod_end is called before the at_exit handlers have a chance to run. This commit removes the debuginfod_client_up type, and instead has GDB hold a raw pointer to the debuginfod_client object. We then make use of GDB's make_final_cleanup to register a function that will call debuginfod_end. As GDB's final cleanups are called before exit is called, this means that debuginfod_end will be called before the at_exit handlers are called, and the crash identified above is resolved. It's not obvious how this issue can easily be tested for. The bug does not appear to manifest when using a local debuginfod server, so we'd need to setup something more involved. For now I'm proposing this patch without any associated tests. diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c --- a/gdb/debuginfod-support.c +++ b/gdb/debuginfod-support.c @@ -96,20 +96,6 @@ struct user_data ui_out::progress_update progress; }; -/* Deleter for a debuginfod_client. */ - -struct debuginfod_client_deleter -{ - void operator() (debuginfod_client *c) - { - debuginfod_end (c); - } -}; - -using debuginfod_client_up - = std::unique_ptr<debuginfod_client, debuginfod_client_deleter>; - - /* Convert SIZE into a unit suitable for use with progress updates. SIZE should in given in bytes and will be converted into KB, MB, GB or remain unchanged. UNIT will be set to "B", "KB", "MB" or "GB" @@ -180,20 +166,45 @@ progressfn (debuginfod_client *c, long cur, long total) return 0; } +/* Cleanup ARG, which is a debuginfod_client pointer. */ + +static void +cleanup_debuginfod_client (void *arg) +{ + debuginfod_client *client = static_cast<debuginfod_client *> (arg); + debuginfod_end (client); +} + +/* Return a pointer to the single global debuginfod_client, initialising it + first if needed. */ + static debuginfod_client * get_debuginfod_client () { - static debuginfod_client_up global_client; + static debuginfod_client *global_client = nullptr; if (global_client == nullptr) { - global_client.reset (debuginfod_begin ()); + global_client = debuginfod_begin (); if (global_client != nullptr) - debuginfod_set_progressfn (global_client.get (), progressfn); + { + /* It is important that we cleanup the debuginfod_client object + before calling exit. Some of the libraries used by debuginfod + make use of at_exit handlers to perform cleanup. + + If we wrapped the debuginfod_client in a unique_ptr and relied + on its destructor to cleanup then this would be run as part of + the global C++ object destructors, which is after the at_exit + handlers, which is too late. + + So instead, we make use of GDB's final cleanup mechanism. */ + make_final_cleanup (cleanup_debuginfod_client, global_client); + debuginfod_set_progressfn (global_client, progressfn); + } } - return global_client.get (); + return global_client; } /* Check if debuginfod is enabled. If configured to do so, ask the user ++++++ gdb-fedora-libncursesw.patch ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:42.030815494 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:42.034815641 +0200 @@ -12,7 +12,7 @@ diff --git a/gdb/configure b/gdb/configure --- a/gdb/configure +++ b/gdb/configure -@@ -20915,6 +20915,7 @@ if test x"$prefer_curses" = xyes; then +@@ -20916,6 +20916,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 @@ { $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 : -@@ -20939,7 +20940,7 @@ return waddstr (); +@@ -20940,7 +20941,7 @@ return waddstr (); return 0; } _ACEOF @@ -29,7 +29,7 @@ if test -z "$ac_lib"; then ac_res="none required" else -@@ -21013,6 +21014,7 @@ case $host_os in +@@ -21014,6 +21015,7 @@ case $host_os in esac # These are the libraries checked by Readline. @@ -37,7 +37,7 @@ { $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 : -@@ -21037,7 +21039,7 @@ return tgetent (); +@@ -21038,7 +21040,7 @@ return tgetent (); return 0; } _ACEOF @@ -49,7 +49,7 @@ diff --git a/gdb/configure.ac b/gdb/configure.ac --- a/gdb/configure.ac +++ b/gdb/configure.ac -@@ -704,7 +704,8 @@ if test x"$prefer_curses" = xyes; then +@@ -705,7 +705,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 @@ if test "$ac_cv_search_waddstr" != no; then curses_found=yes -@@ -746,7 +747,8 @@ case $host_os in +@@ -747,7 +748,8 @@ case $host_os in esac # These are the libraries checked by Readline. ++++++ gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch ++++++ >From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: Andrew Burgess <aburg...@redhat.com> Date: Sat, 25 Nov 2023 10:35:37 +0000 Subject: gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch ;; Back-port upstream commit acc117b57f7 as part of a fix for ;; non-deterministic gdb-index generation (RH BZ 2232086). gdb: C++-ify mapped_symtab from dwarf2/index-write.c Make static the functions add_index_entry, find_slot, and hash_expand, member functions of the mapped_symtab class. Fold an additional snippet of code from write_gdbindex into mapped_symtab::minimize, this code relates to minimisation, so this seems like a good home for it. Make the n_elements, data, and m_string_obstack member variables of mapped_symtab private. Provide a new obstack() member function to provide access to the obstack when needed, and also add member functions begin(), end(), cbegin(), and cend() so that the mapped_symtab class can be treated like a contained and iterated over. I've also taken this opportunity to split out the logic for whether the hash table (m_data) needs expanding, this is the new function hash_needs_expanding. This will be useful in a later commit. There should be no user visible changes after this commit. Approved-By: Tom Tromey <t...@tromey.com> diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -187,86 +187,135 @@ struct mapped_symtab { mapped_symtab () { - data.resize (1024); + m_data.resize (1024); } - /* Minimize each entry in the symbol table, removing duplicates. */ + /* If there are no elements in the symbol table, then reduce the table + size to zero. Otherwise call symtab_index_entry::minimize each entry + in the symbol table. */ + void minimize () { - for (symtab_index_entry &item : data) + if (m_element_count == 0) + m_data.resize (0); + + for (symtab_index_entry &item : m_data) item.minimize (); } - offset_type n_elements = 0; - std::vector<symtab_index_entry> data; + /* Add an entry to SYMTAB. NAME is the name of the symbol. CU_INDEX is + the index of the CU in which the symbol appears. IS_STATIC is one if + the symbol is static, otherwise zero (global). */ + + void add_index_entry (const char *name, int is_static, + gdb_index_symbol_kind kind, offset_type cu_index); + + /* Access the obstack. */ + struct obstack *obstack () + { return &m_string_obstack; } + +private: + + /* Find a slot in SYMTAB for the symbol NAME. Returns a reference to + the slot. + + Function is used only during write_hash_table so no index format + backward compatibility is needed. */ + + symtab_index_entry &find_slot (const char *name); + + /* Expand SYMTAB's hash table. */ + + void hash_expand (); + + /* Return true if the hash table in data needs to grow. */ + + bool hash_needs_expanding () const + { return 4 * m_element_count / 3 >= m_data.size (); } + + /* A vector that is used as a hash table. */ + std::vector<symtab_index_entry> m_data; + + /* The number of elements stored in the m_data hash. */ + offset_type m_element_count = 0; /* Temporary storage for names. */ auto_obstack m_string_obstack; -}; -/* Find a slot in SYMTAB for the symbol NAME. Returns a reference to - the slot. +public: + using iterator = decltype (m_data)::iterator; + using const_iterator = decltype (m_data)::const_iterator; - Function is used only during write_hash_table so no index format backward - compatibility is needed. */ + iterator begin () + { return m_data.begin (); } -static symtab_index_entry & -find_slot (struct mapped_symtab *symtab, const char *name) + iterator end () + { return m_data.end (); } + + const_iterator cbegin () + { return m_data.cbegin (); } + + const_iterator cend () + { return m_data.cend (); } +}; + +/* See class definition. */ + +symtab_index_entry & +mapped_symtab::find_slot (const char *name) { offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name); - index = hash & (symtab->data.size () - 1); - step = ((hash * 17) & (symtab->data.size () - 1)) | 1; + index = hash & (m_data.size () - 1); + step = ((hash * 17) & (m_data.size () - 1)) | 1; for (;;) { - if (symtab->data[index].name == NULL - || strcmp (name, symtab->data[index].name) == 0) - return symtab->data[index]; - index = (index + step) & (symtab->data.size () - 1); + if (m_data[index].name == NULL + || strcmp (name, m_data[index].name) == 0) + return m_data[index]; + index = (index + step) & (m_data.size () - 1); } } -/* Expand SYMTAB's hash table. */ +/* See class definition. */ -static void -hash_expand (struct mapped_symtab *symtab) +void +mapped_symtab::hash_expand () { - auto old_entries = std::move (symtab->data); + auto old_entries = std::move (m_data); - symtab->data.clear (); - symtab->data.resize (old_entries.size () * 2); + gdb_assert (m_data.size () == 0); + m_data.resize (old_entries.size () * 2); for (auto &it : old_entries) if (it.name != NULL) { - auto &ref = find_slot (symtab, it.name); + auto &ref = this->find_slot (it.name); ref = std::move (it); } } -/* Add an entry to SYMTAB. NAME is the name of the symbol. - CU_INDEX is the index of the CU in which the symbol appears. - IS_STATIC is one if the symbol is static, otherwise zero (global). */ +/* See class definition. */ -static void -add_index_entry (struct mapped_symtab *symtab, const char *name, - int is_static, gdb_index_symbol_kind kind, - offset_type cu_index) +void +mapped_symtab::add_index_entry (const char *name, int is_static, + gdb_index_symbol_kind kind, + offset_type cu_index) { - symtab_index_entry *slot = &find_slot (symtab, name); + symtab_index_entry *slot = &this->find_slot (name); if (slot->name == NULL) { /* This is a new element in the hash table. */ - ++symtab->n_elements; + ++this->m_element_count; /* We might need to grow the hash table. */ - if (4 * symtab->n_elements / 3 >= symtab->data.size ()) + if (this->hash_needs_expanding ()) { - hash_expand (symtab); + this->hash_expand (); /* This element will have a different slot in the new table. */ - slot = &find_slot (symtab, name); + slot = &this->find_slot (name); /* But it should still be a new element in the hash table. */ gdb_assert (slot->name == nullptr); @@ -388,7 +437,7 @@ write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool) /* We add all the index vectors to the constant pool first, to ensure alignment is ok. */ - for (symtab_index_entry &entry : symtab->data) + for (symtab_index_entry &entry : *symtab) { if (entry.name == NULL) continue; @@ -417,7 +466,7 @@ write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool) /* Now write out the hash table. */ std::unordered_map<c_str_view, offset_type, c_str_view_hasher> str_table; - for (const auto &entry : symtab->data) + for (const auto &entry : *symtab) { offset_type str_off, vec_off; @@ -1149,7 +1198,7 @@ write_cooked_index (cooked_index_vector *table, const auto it = cu_index_htab.find (entry->per_cu); gdb_assert (it != cu_index_htab.cend ()); - const char *name = entry->full_name (&symtab->m_string_obstack); + const char *name = entry->full_name (symtab->obstack ()); if (entry->per_cu->lang () == language_ada) { @@ -1169,7 +1218,7 @@ write_cooked_index (cooked_index_vector *table, gdb, it has to use the encoded name, with any suffixes stripped. */ std::string encoded = ada_encode (name, false); - name = obstack_strdup (&symtab->m_string_obstack, + name = obstack_strdup (symtab->obstack (), encoded.c_str ()); } } @@ -1202,8 +1251,8 @@ write_cooked_index (cooked_index_vector *table, else kind = GDB_INDEX_SYMBOL_KIND_TYPE; - add_index_entry (symtab, name, (entry->flags & IS_STATIC) != 0, - kind, it->second); + symtab->add_index_entry (name, (entry->flags & IS_STATIC) != 0, + kind, it->second); } } @@ -1281,8 +1330,6 @@ write_gdbindex (dwarf2_per_objfile *per_objfile, symtab.minimize (); data_buf symtab_vec, constant_pool; - if (symtab.n_elements == 0) - symtab.data.resize (0); write_hash_table (&symtab, symtab_vec, constant_pool); ++++++ gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch ++++++ >From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: Andrew Burgess <aburg...@redhat.com> Date: Mon, 27 Nov 2023 13:19:39 +0000 Subject: gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch ;; Back-port upstream commit 3644f41dc80 as part of a fix for ;; non-deterministic gdb-index generation (RH BZ 2232086). gdb: generate dwarf-5 index identically as worker-thread count changes Similar to the previous commit, this commit ensures that the dwarf-5 index files are generated identically as the number of worker-threads changes. Building the dwarf-5 index makes use of a closed hash table, the bucket_hash local within debug_names::build(). Entries are added to bucket_hash from m_name_to_value_set, which, in turn, is populated by calls to debug_names::insert() in write_debug_names. The insert calls are ordered based on the entries within the cooked_index, and the ordering within cooked_index depends on the number of worker threads that GDB is using. My proposal is to sort each chain within the bucket_hash closed hash table prior to using this to build the dwarf-5 index. The buckets within bucket_hash will always have the same ordering (for a given GDB build with a given executable), and by sorting the chains within each bucket, we can be sure that GDB will see each entry in a deterministic order. I've extended the index creation test to cover this case. Approved-By: Tom Tromey <t...@tromey.com> diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -453,6 +453,11 @@ class c_str_view return strcmp (m_cstr, other.m_cstr) == 0; } + bool operator< (const c_str_view &other) const + { + return strcmp (m_cstr, other.m_cstr) < 0; + } + /* Return the underlying C string. Note, the returned string is only a reference with lifetime of this object. */ const char *c_str () const @@ -770,10 +775,18 @@ class debug_names } for (size_t bucket_ix = 0; bucket_ix < bucket_hash.size (); ++bucket_ix) { - const std::forward_list<hash_it_pair> &hashitlist - = bucket_hash[bucket_ix]; + std::forward_list<hash_it_pair> &hashitlist = bucket_hash[bucket_ix]; if (hashitlist.empty ()) continue; + + /* Sort the items within each bucket. This ensures that the + generated index files will be the same no matter the order in + which symbols were added into the index. */ + hashitlist.sort ([] (const hash_it_pair &a, const hash_it_pair &b) + { + return a.it->first < b.it->first; + }); + uint32_t &bucket_slot = m_bucket_table[bucket_ix]; /* The hashes array is indexed starting at 1. */ store_unsigned_integer (reinterpret_cast<gdb_byte *> (&bucket_slot), diff --git a/gdb/testsuite/gdb.gdb/index-file.exp b/gdb/testsuite/gdb.gdb/index-file.exp --- a/gdb/testsuite/gdb.gdb/index-file.exp +++ b/gdb/testsuite/gdb.gdb/index-file.exp @@ -47,6 +47,9 @@ remote_exec host "mkdir -p ${dir1}" with_timeout_factor $timeout_factor { gdb_test_no_output "save gdb-index $dir1" \ "create gdb-index file" + + gdb_test_no_output "save gdb-index -dwarf-5 $dir1" \ + "create dwarf-index files" } # Close GDB. @@ -143,13 +146,16 @@ if { $worker_threads > 1 } { with_timeout_factor $timeout_factor { gdb_test_no_output "save gdb-index $dir2" \ "create second gdb-index file" + + gdb_test_no_output "save gdb-index -dwarf-5 $dir2" \ + "create second dwarf-index files" } # Close GDB. gdb_exit # Now check that the index files are identical. - foreach suffix { gdb-index } { + foreach suffix { gdb-index debug_names debug_str } { set result \ [remote_exec host \ "cmp -s \"$dir1/${index_filename_base}.${suffix}\" \"$dir2/${index_filename_base}.${suffix}\""] ++++++ gdb-rhbz-2232086-generate-gdb-index-consistently.patch ++++++ >From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: Andrew Burgess <aburg...@redhat.com> Date: Fri, 24 Nov 2023 12:04:36 +0000 Subject: gdb-rhbz-2232086-generate-gdb-index-consistently.patch ;; Back-port upstream commit aff250145af as part of a fix for ;; non-deterministic gdb-index generation (RH BZ 2232086). gdb: generate gdb-index identically regardless of work thread count It was observed that changing the number of worker threads that GDB uses (maintenance set worker-threads NUM) would have an impact on the layout of the generated gdb-index. The cause seems to be how the CU are distributed between threads, and then symbols that appear in multiple CU can be encountered earlier or later depending on whether a particular CU moves between threads. I certainly found this behaviour was reproducible when generating an index for GDB itself, like: gdb -q -nx -nh -batch \ -eiex 'maint set worker-threads NUM' \ -ex 'save gdb-index /tmp/' And then setting different values for NUM will change the generated index. Now, the question is: does this matter? I would like to suggest that yes, this does matter. At Red Hat we generate a gdb-index as part of the build process, and we would ideally like to have reproducible builds: for the same source, compiled with the same tool-chain, we should get the exact same output binary. And we do .... except for the index. Now we could simply force GDB to only use a single worker thread when we build the index, but, I don't think the idea of reproducible builds is that strange, so I think we should ensure that our generated indexes are always reproducible. To achieve this, I propose that we add an extra step when building the gdb-index file. After constructing the initial symbol hash table contents, we will pull all the symbols out of the hash, sort them, then re-insert them in sorted order. This will ensure that the structure of the generated hash will remain consistent (given the same set of symbols). I've extended the existing index-file test to check that the generated index doesn't change if we adjust the number of worker threads used. Given that this test is already rather slow, I've only made one change to the worker-thread count. Maybe this test should be changed to use a smaller binary, which is quicker to load, and for which we could then try many different worker thread counts. Approved-By: Tom Tromey <t...@tromey.com> diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -210,6 +210,13 @@ struct mapped_symtab void add_index_entry (const char *name, int is_static, gdb_index_symbol_kind kind, offset_type cu_index); + /* When entries are originally added into the data hash the order will + vary based on the number of worker threads GDB is configured to use. + This function will rebuild the hash such that the final layout will be + deterministic regardless of the number of worker threads used. */ + + void sort (); + /* Access the obstack. */ struct obstack *obstack () { return &m_string_obstack; } @@ -296,6 +303,65 @@ mapped_symtab::hash_expand () } } +/* See mapped_symtab class declaration. */ + +void mapped_symtab::sort () +{ + /* Move contents out of this->data vector. */ + std::vector<symtab_index_entry> original_data = std::move (m_data); + + /* Restore the size of m_data, this will avoid having to expand the hash + table (and rehash all elements) when we reinsert after sorting. + However, we do reset the element count, this allows for some sanity + checking asserts during the reinsert phase. */ + gdb_assert (m_data.size () == 0); + m_data.resize (original_data.size ()); + m_element_count = 0; + + /* Remove empty entries from ORIGINAL_DATA, this makes sorting quicker. */ + auto it = std::remove_if (original_data.begin (), original_data.end (), + [] (const symtab_index_entry &entry) -> bool + { + return entry.name == nullptr; + }); + original_data.erase (it, original_data.end ()); + + /* Sort the existing contents. */ + std::sort (original_data.begin (), original_data.end (), + [] (const symtab_index_entry &a, + const symtab_index_entry &b) -> bool + { + /* Return true if A is before B. */ + gdb_assert (a.name != nullptr); + gdb_assert (b.name != nullptr); + + return strcmp (a.name, b.name) < 0; + }); + + /* Re-insert each item from the sorted list. */ + for (auto &entry : original_data) + { + /* We know that ORIGINAL_DATA contains no duplicates, this data was + taken from a hash table that de-duplicated entries for us, so + count this as a new item. + + As we retained the original size of m_data (see above) then we + should never need to grow m_data_ during this re-insertion phase, + assert that now. */ + ++m_element_count; + gdb_assert (!this->hash_needs_expanding ()); + + /* Lookup a slot. */ + symtab_index_entry &slot = this->find_slot (entry.name); + + /* As discussed above, we should not find duplicates. */ + gdb_assert (slot.name == nullptr); + + /* Move this item into the slot we found. */ + slot = std::move (entry); + } +} + /* See class definition. */ void @@ -1325,6 +1391,9 @@ write_gdbindex (dwarf2_per_objfile *per_objfile, for (auto map : table->get_addrmaps ()) write_address_map (map, addr_vec, cu_index_htab); + /* Ensure symbol hash is built domestically. */ + symtab.sort (); + /* Now that we've processed all symbols we can shrink their cu_indices lists. */ symtab.minimize (); diff --git a/gdb/testsuite/gdb.gdb/index-file.exp b/gdb/testsuite/gdb.gdb/index-file.exp --- a/gdb/testsuite/gdb.gdb/index-file.exp +++ b/gdb/testsuite/gdb.gdb/index-file.exp @@ -38,6 +38,9 @@ with_timeout_factor $timeout_factor { clean_restart $filename } +# Record how many worker threads GDB is using. +set worker_threads [gdb_get_worker_threads] + # Generate an index file. set dir1 [standard_output_file "index_1"] remote_exec host "mkdir -p ${dir1}" @@ -116,3 +119,41 @@ proc check_symbol_table_usage { filename } { set index_filename_base [file tail $filename] check_symbol_table_usage "$dir1/${index_filename_base}.gdb-index" + +# If GDB is using more than 1 worker thread then reduce the number of +# worker threads, regenerate the index, and check that we get the same +# index file back. At one point the layout of the index would vary +# based on the number of worker threads used. +if { $worker_threads > 1 } { + # Start GDB, but don't load a file yet. + clean_restart + + # Adjust the number of threads to use. + set reduced_threads [expr $worker_threads / 2] + gdb_test_no_output "maint set worker-threads $reduced_threads" + + with_timeout_factor $timeout_factor { + # Now load the test binary. + gdb_file_cmd $filename + } + + # Generate an index file. + set dir2 [standard_output_file "index_2"] + remote_exec host "mkdir -p ${dir2}" + with_timeout_factor $timeout_factor { + gdb_test_no_output "save gdb-index $dir2" \ + "create second gdb-index file" + } + + # Close GDB. + gdb_exit + + # Now check that the index files are identical. + foreach suffix { gdb-index } { + set result \ + [remote_exec host \ + "cmp -s \"$dir1/${index_filename_base}.${suffix}\" \"$dir2/${index_filename_base}.${suffix}\""] + gdb_assert { [lindex $result 0] == 0 } \ + "$suffix files are identical" + } +} 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 @@ -9274,6 +9274,21 @@ proc gdb_step_until { regexp {test_name ""} {max_steps 10} } { } } +# Return the number of worker threads that GDB is currently using. + +proc gdb_get_worker_threads { {testname ""} } { + set worker_threads "UNKNOWN" + gdb_test_multiple "maintenance show worker-threads" $testname { + -wrap -re "The number of worker threads GDB can use is unlimited \\(currently ($::decimal)\\)\\." { + set worker_threads $expect_out(1,string) + } + -wrap -re "The number of worker threads GDB can use is ($::decimal)\\." { + set worker_threads $expect_out(1,string) + } + } + return $worker_threads +} + # Check if the compiler emits epilogue information associated # with the closing brace or with the last statement line. # ++++++ gdb-rhbz-2232086-reduce-size-of-gdb-index.patch ++++++ >From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: Andrew Burgess <aburg...@redhat.com> Date: Fri, 24 Nov 2023 11:50:35 +0000 Subject: gdb-rhbz-2232086-reduce-size-of-gdb-index.patch ;; Back-port upstream commit aa19bc1d259 as part of a fix for ;; non-deterministic gdb-index generation (RH BZ 2232086). gdb: reduce size of generated gdb-index file I noticed in passing that out algorithm for generating the gdb-index file is incorrect. When building the hash table in add_index_entry we count every incoming entry rehash when the number of entries gets too large. However, some of the incoming entries will be duplicates, which don't actually result in new items being added to the hash table. As a result, we grow the gdb-index hash table far too often. With an unmodified GDB, generating a gdb-index for GDB, I see a file size of 90M, with a hash usage (in the generated index file) of just 2.6%. With a patched GDB, generating a gdb-index for the _same_ GDB binary, I now see a gdb-index file size of 30M, with a hash usage of 41.9%. This is a 67% reduction in gdb-index file size. Obviously, not every gdb-index file is going to see such big savings, however, the larger a program, and the more symbols that are duplicated between compilation units, the more GDB would over count, and so, over-grow the index. The gdb-index hash table we create has a minimum size of 1024, and then we grow the hash when it is 75% full, doubling the hash table at that time. Given this, then we expect that either: a. The hash table is size 1024, and less than 75% full, or b. The hash table is between 37.5% and 75% full. I've include a test that checks some of these constraints -- I've not bothered to check the upper limit, and over full hash table isn't really a problem here, but if the fill percentage is less than 37.5% then this indicates that we've done something wrong (obviously, I also check for the 1024 minimum size). Approved-By: Tom Tromey <t...@tromey.com> diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -254,20 +254,29 @@ add_index_entry (struct mapped_symtab *symtab, const char *name, int is_static, gdb_index_symbol_kind kind, offset_type cu_index) { - offset_type cu_index_and_attrs; + symtab_index_entry *slot = &find_slot (symtab, name); + if (slot->name == NULL) + { + /* This is a new element in the hash table. */ + ++symtab->n_elements; - ++symtab->n_elements; - if (4 * symtab->n_elements / 3 >= symtab->data.size ()) - hash_expand (symtab); + /* We might need to grow the hash table. */ + if (4 * symtab->n_elements / 3 >= symtab->data.size ()) + { + hash_expand (symtab); - symtab_index_entry &slot = find_slot (symtab, name); - if (slot.name == NULL) - { - slot.name = name; + /* This element will have a different slot in the new table. */ + slot = &find_slot (symtab, name); + + /* But it should still be a new element in the hash table. */ + gdb_assert (slot->name == nullptr); + } + + slot->name = name; /* index_offset is set later. */ } - cu_index_and_attrs = 0; + offset_type cu_index_and_attrs = 0; DW2_GDB_INDEX_CU_SET_VALUE (cu_index_and_attrs, cu_index); DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE (cu_index_and_attrs, is_static); DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE (cu_index_and_attrs, kind); @@ -279,7 +288,7 @@ add_index_entry (struct mapped_symtab *symtab, const char *name, the last entry pushed), but a symbol could have multiple kinds in one CU. To keep things simple we don't worry about the duplication here and sort and uniquify the list after we've processed all symbols. */ - slot.cu_indices.push_back (cu_index_and_attrs); + slot->cu_indices.push_back (cu_index_and_attrs); } /* See symtab_index_entry. */ diff --git a/gdb/testsuite/gdb.gdb/index-file.exp b/gdb/testsuite/gdb.gdb/index-file.exp new file mode 100644 --- /dev/null +++ b/gdb/testsuite/gdb.gdb/index-file.exp @@ -0,0 +1,118 @@ +# Copyright 2023 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Load the GDB executable, and then 'save gdb-index', and make some +# checks of the generated index file. + +load_lib selftest-support.exp + +# Can't save an index with readnow. +if {[readnow]} { + untested "cannot create an index when readnow is in use" + return -1 +} + +# A multiplier used to ensure slow tasks are less likely to timeout. +set timeout_factor 20 + +set filename [selftest_prepare] +if { $filename eq "" } { + unsupported "${gdb_test_file_name}.exp" + return -1 +} + +with_timeout_factor $timeout_factor { + # Start GDB, load FILENAME. + clean_restart $filename +} + +# Generate an index file. +set dir1 [standard_output_file "index_1"] +remote_exec host "mkdir -p ${dir1}" +with_timeout_factor $timeout_factor { + gdb_test_no_output "save gdb-index $dir1" \ + "create gdb-index file" +} + +# Close GDB. +gdb_exit + +# Validate that the index-file FILENAME has made efficient use of its +# symbol hash table. Calculate the number of symbols in the hash +# table and the total hash table size. The hash table starts with +# 1024 entries, and then doubles each time it is filled to 75%. At +# 75% filled, doubling the size takes it to 37.5% filled. +# +# Thus, the hash table is correctly filled if: +# 1. Its size is 1024 (i.e. it has not yet had its first doubling), or +# 2. Its filled percentage is over 37% +# +# We could check that it is not over filled, but I don't as that's not +# really an issue. But we did once have a bug where the table was +# doubled incorrectly, in which case we'd see a filled percentage of +# around 2% in some cases, which is a huge waste of disk space. +proc check_symbol_table_usage { filename } { + # Open the file in binary mode and read-only mode. + set fp [open $filename rb] + + # Configure the channel to use binary translation. + fconfigure $fp -translation binary + + # Read the first 8 bytes of the file, which contain the header of + # the index section. + set header [read $fp [expr 7 * 4]] + + # Scan the header to get the version, the CU list offset, and the + # types CU list offset. + binary scan $header iiiiii version \ + _ _ _ symbol_table_offset shortcut_offset + + # The length of the symbol hash table (in entries). + set len [expr ($shortcut_offset - $symbol_table_offset) / 8] + + # Now walk the hash table and count how many entries are in use. + set offset $symbol_table_offset + set count 0 + while { $offset < $shortcut_offset } { + seek $fp $offset + set entry [read $fp 8] + binary scan $entry ii name_ptr flags + if { $name_ptr != 0 } { + incr count + } + + incr offset 8 + } + + # Close the file. + close $fp + + # Calculate how full the cache is. + set pct [expr (100 * double($count)) / $len] + + # Write our results out to the gdb.log. + verbose -log "Hash table size: $len" + verbose -log "Hash table entries: $count" + verbose -log "Percentage usage: $pct%" + + # The minimum fill percentage is actually 37.5%, but we give TCL a + # little flexibility in case the FP maths give a result a little + # off. + gdb_assert { $len == 1024 || $pct > 37 } \ + "symbol hash table usage" +} + +set index_filename_base [file tail $filename] +check_symbol_table_usage "$dir1/${index_filename_base}.gdb-index" ++++++ gdb-rhbz2232086-refactor-selftest-support.patch ++++++ >From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: Andrew Burgess <aburg...@redhat.com> Date: Fri, 24 Nov 2023 11:10:08 +0000 Subject: gdb-rhbz2232086-refactor-selftest-support.patch ;; Back-port upstream commit 1f0fab7ff86 as part of a fix for ;; non-deterministic gdb-index generation (RH BZ 2232086). gdb/testsuite: small refactor in selftest-support.exp Split out the code that makes a copy of the GDB executable ready for self testing into a new proc. A later commit in this series wants to load the GDB executable into GDB (for creating an on-disk debug index), but doesn't need to make use of the full do_self_tests proc. There should be no changes in what is tested after this commit. Approved-By: Tom Tromey <t...@tromey.com> diff --git a/gdb/testsuite/lib/selftest-support.exp b/gdb/testsuite/lib/selftest-support.exp --- a/gdb/testsuite/lib/selftest-support.exp +++ b/gdb/testsuite/lib/selftest-support.exp @@ -92,11 +92,13 @@ proc selftest_setup { executable function } { return 0 } -# A simple way to run some self-tests. - -proc do_self_tests {function body} { - global GDB tool - +# Prepare for running a self-test by moving the GDB executable to a +# location where we can use it as the inferior. Return the filename +# of the new location. +# +# If the current testing setup is not suitable for running a +# self-test, then return an empty string. +proc selftest_prepare {} { # Are we testing with a remote board? In that case, the target # won't have access to the GDB's auxilliary data files # (data-directory, etc.). It's simpler to just skip. @@ -120,19 +122,31 @@ proc do_self_tests {function body} { # Run the test with self. Copy the file executable file in case # this OS doesn't like to edit its own text space. - set GDB_FULLPATH [find_gdb $GDB] + set gdb_fullpath [find_gdb $::GDB] if {[is_remote host]} { - set xgdb x$tool + set xgdb x$::tool } else { - set xgdb [standard_output_file x$tool] + set xgdb [standard_output_file x$::tool] } # Remove any old copy lying around. remote_file host delete $xgdb + set filename [remote_download host $gdb_fullpath $xgdb] + + return $filename +} + +# A simple way to run some self-tests. + +proc do_self_tests {function body} { + set file [selftest_prepare] + if { $file eq "" } { + return + } + gdb_start - set file [remote_download host $GDB_FULLPATH $xgdb] # When debugging GDB with GDB, some operations can take a relatively long # time, especially if the build is non-optimized. Bump the timeout for the ++++++ gdb-rhbz2233961-CVE-2022-4806.patch ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:42.170820635 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:42.174820782 +0200 @@ -1,6 +1,6 @@ From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= <ahajk...@redhat.com> -Date: Thu, 21 Sep 2023 18:52:49 +0200 +Date: Sun, 17 Sep 2023 13:36:13 +0200 Subject: gdb-rhbz2233961-CVE-2022-4806.patch ;; Backport PR29922, SHT_NOBITS section @@ -8,9 +8,9 @@ PR29922, SHT_NOBITS section avoids section size sanity check -PR 29922 -* dwarf2.c (find_debug_info): Ignore sections without -SEC_HAS_CONTENTS. + PR 29922 + * dwarf2.c (find_debug_info): Ignore sections without + SEC_HAS_CONTENTS. diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c --- a/bfd/dwarf2.c ++++++ gdb-rhbz2233965-memory-leak.patch ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:42.186821223 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:42.190821369 +0200 @@ -1,6 +1,6 @@ From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= <ahajk...@redhat.com> -Date: Sat, 14 Oct 2023 12:37:50 +0200 +Date: Sun, 1 Oct 2023 10:36:06 +0200 Subject: gdb-rhbz2233965-memory-leak.patch ;; Backport PR29925, Memory leak in find_abstract_instance ++++++ import-fedora.sh ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:42.474831798 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:42.478831945 +0200 @@ -13,20 +13,11 @@ # Broken. # Over-specific test-case in a shell script. gdb-6.5-BEA-testsuite.patch - # Hangs for horizontal-scroll-mode on, times out after 10 minutes. - gdb-6.5-readline-long-line-crash-test.patch # Fragile test-case, requires glibc to fail in a certain way. gdb-rhbz1156192-recursive-dlopen-test.patch - # Obsolete (dropped by fedora). - gdb-6.7-charsign-test.patch - gdb-test-ivy-bridge.patch - gdb-ppc-power7-test.patch - gdb-6.3-bz140532-ppc-unwinding-test.patch - # Obsolete. - gdb-6.7-charsign-test.patch gdb-6.7-ppc-clobbered-registers-O2-test.patch ) @@ -109,7 +100,7 @@ >> $f1 echo \ - "%patch$n -p1" \ + "%patch -P $n -p1" \ >> $f2 n=$((n + 1)) ++++++ make-pascal_language-print_type-handle-varstring-nul.patch ++++++ >From f27cc602d85c46b46f5b02d6f584a1d872e098e3 Mon Sep 17 00:00:00 2001 From: Tom Tromey <t...@tromey.com> Date: Wed, 27 Mar 2024 10:34:46 -0600 Subject: [PATCH] Make pascal_language::print_type handle varstring==nullptr PR gdb/31524 points out a crash when pascal_language::print_type is called with varstring==nullptr. This crash is a regression arising from the printf/pager rewrite -- that indirectly removed a NULL check from gdb's "puts". This patch instead fixes the problem by adding a check to print_type. Passing nullptr here seems to be expected in other places (e.g., there is a call to type_print like this in expprint.c), and other implementations of this method (or related helpers) explicitly check for NULL. I didn't write a test case for this because it seemed like overkill for a Pascal bug that only occurs with -i=mi. However, if you want one, let me know and I will do it. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31524 Approved-By: John Baldwin <j...@freebsd.org> --- gdb/p-typeprint.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c index e8542d6845a..68a94a65f64 100644 --- a/gdb/p-typeprint.c +++ b/gdb/p-typeprint.c @@ -55,7 +55,8 @@ pascal_language::print_type (struct type *type, const char *varstring, type_print_varspec_prefix (type, stream, show, 0, flags); } /* first the name */ - gdb_puts (varstring, stream); + if (varstring != nullptr) + gdb_puts (varstring, stream); if ((varstring != NULL && *varstring != '\0') && !(code == TYPE_CODE_FUNC -- 2.35.3 ++++++ qa.sh ++++++ --- /var/tmp/diff_new_pack.tkTKTn/_old 2024-04-25 20:47:42.558834882 +0200 +++ /var/tmp/diff_new_pack.tkTKTn/_new 2024-04-25 20:47:42.562835029 +0200 @@ -395,49 +395,10 @@ kfail_sle11=( - "${kfail_sle12[@]}" - - # For SLE-11, libipt is not enabled, so on intel we can run into - # https://sourceware.org/bugzilla/show_bug.cgi?id=30073 affecting - # many test-cases. - "FAIL: gdb.btrace/" - "FAIL: gdb.python/py-record-btrace" - - # https://sourceware.org/bugzilla/show_bug.cgi?id=26956 - "FAIL: gdb.base/command-line-input.exp: print 1" - - # Due to using old python, 2.6. - # For instance, "ValueError: zero length field name in format". - "FAIL: gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event.exp: print test" - "FAIL: gdb.python/py-breakpoint.exp: test_bkpt_address: python gdb.Breakpoint\(" *{}".format\(str\(main_addr\)\)\)" - "FAIL: gdb.python/py-framefilter.exp: info frame filter after disable frame filter" - "FAIL: gdb.python/py-framefilter.exp: info frame filter after reenabling frame filter" - "FAIL: gdb.python/py-framefilter.exp: info frame filter after setting priority" - "FAIL: gdb.python/py-framefilter.exp: info frame filter before disable frame filter" - "FAIL: gdb.python/py-framefilter.exp: info frame filter before setting priority" - "FAIL: gdb.python/py-mi.exp: check tsrvw expression value \(unexpected output\)" - "FAIL: gdb.python/py-mi.exp: check tsrvw varobj value \(unexpected output\)" - "FAIL: gdb.python/py-mi.exp: create tsrvw varobj \(unexpected output\)" - "FAIL: gdb.python/py-prettyprint.exp: c\+\+: print tsrvw" - "FAIL: gdb.python/py-prettyprint.exp: c: print tsrvw" - "FAIL: gdb.python/py-value.exp: attempt to construct large value with small buffer" - "FAIL: gdb.python/py-value.exp: construct array value from buffer" - "FAIL: gdb.python/py-value.exp: construct value from buffer" - "FAIL: gdb.python/py-value.exp: print array value" - "FAIL: gdb.python/py-value.exp: print first array element" - "FAIL: gdb.python/py-value.exp: print out of bounds array element" - "FAIL: gdb.python/py-value.exp: print second array element" - "FAIL: gdb.python/py-value.exp: print third array element" - - # To be investigated. - "FAIL: gdb.base/compare-sections.exp: after run to main: compare-sections -r" - "FAIL: gdb.python/py-framefilter-thread.exp: bt no-filters" - - # Gdb runs out of virtual memory, we can expect an internal error. - "FAIL: gdb.base/gcore-excessive-memory.exp: attach \(GDB internal error\)" - - # https://sourceware.org/bugzilla/show_bug.cgi?id=30154 - "FAIL: gdb.multi/multi-target-no-resumed.exp: inf_A=.: inf_B=.: send_gdb control C \(timeout\)" + # FAILs for SLE-11 are not very interesting. This is with on old compiler: + # 4.3.4, and tests are likely to be broken. We're really only interested in + # segmentation faults and internal errors. + "FAIL: " ) @@ -756,7 +717,7 @@ "UNRESOLVED: gdb.threads/async.exp: thread 1: current thread is 1" # https://sourceware.org/bugzilla/show_bug.cgi?id=31648 - "UNRESOLVED: gdb.ada/tick_length_array_enum_idx.exp: print vars'length" + "SLE-11.*UNRESOLVED: gdb.ada/tick_length_array_enum_idx.exp: print vars'length" # yama ptrace_scope == 1 # https://sourceware.org/pipermail/gdb-patches/2024-April/208251.html @@ -766,6 +727,10 @@ "Factory.*UNRESOLVED: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: inf2: flush inferior output" "Factory.*UNRESOLVED: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=run: continue" "Factory.*UNRESOLVED: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=run: continue" + "Factory.*UNRESOLVED: gdb.multi/multi-term-settings.exp: inf1_how=run: inf2_how=attach: continue" + + # https://sourceware.org/bugzilla/show_bug.cgi?id=31671 + "SLE-11.*UNRESOLVED: gdb.objc/basicclass.exp: call an Objective-C method with no arguments" ) kfail_re=$(join "|" "${kfail[@]}")