From 15d2ec49a716e217a031786034596fd0f0face6c Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 25 Mar 2025 14:12:51 +0100 Subject: [PATCH 018/110] Update gdb-add-rpm-suggestion-script.patch for SUSE --- gdb/doc/gdb.texinfo | 126 +++++++++--------- gdb/python/lib/gdb/command/rpm-suggestions.py | 12 +- 2 files changed, 74 insertions(+), 64 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index e9202b85f90..d7d8c772c35 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -50355,15 +50355,19 @@ a hint before the next prompt is displayed: @smallexample (@value{GDBP}) file /bin/ls Reading symbols from /bin/ls... -Reading symbols from .gnu_debugdata for /usr/bin/ls... -(No debugging symbols found in .gnu_debugdata for /usr/bin/ls) -Missing rpms, try: dnf --enablerepo='*debug*' install coreutils-debuginfo-9.3-7.fc39.x86_64 +@c Reading symbols from .gnu_debugdata for /usr/bin/ls... +@c (No debugging symbols found in .gnu_debugdata for /usr/bin/ls) +@c Missing rpms, try: dnf --enablerepo='*debug*' install coreutils-debuginfo-9.3-7.fc39.x86_64 +(No debugging symbols found in /bin/ls) +Missing separate debuginfos, use: zypper install coreutils-debuginfo-8.32-150400.9.6.1.x86_64 (@value{GDBP}) @end smallexample -In this case, installing @file{coreutils-debuginfo-9.3-7.fc39.x86_64} -will provide the missing debug information for @file{/bin/ls}. It is -up to you to install the suggested package, if possible, and after +@c In this case, installing @file{coreutils-debuginfo-9.3-7.fc39.x86_64} +@c will provide the missing debug information for @file{/bin/ls}. +In this case, installing @file{coreutils-debuginfo-8.32-150400.9.6.1.x86_64} +will provide the missing debug information for @file{/bin/ls}. +It is up to you to install the suggested package, if possible, and after that reload the executable in @value{GDBN} so that the newly installed debug information can be found. @@ -50379,62 +50383,62 @@ When @samp{on} @value{GDBN} will make RPM suggestions where possible. When @samp{off} all RPM suggestion will be disabled. @end table -When opening a core file (@pxref{core-file command}), it may be the -case that not only is the debug information missing, but the -corresponding executable itself is missing. For example, if a core -file is copied from one machine to another in order to debug. +@c When opening a core file (@pxref{core-file command}), it may be the +@c case that not only is the debug information missing, but the +@c corresponding executable itself is missing. For example, if a core +@c file is copied from one machine to another in order to debug. + +@c In this case @value{GDBN} is able to suggest a command which will +@c install the missing executable based on the build-id of the +@c executable. For example: + +@c @smallexample +@c (@value{GDBP}) core-file /tmp/core.5489 +@c warning: Can't open file /usr/bin/sl during file-backed mapping note processing +@c [New LWP 5489] +@c Core was generated by `sl'. +@c Program terminated with signal SIGQUIT, Quit. +@c #0 0x00007f1b41ced1a7 in ?? () +@c Missing file(s), try: dnf --enablerepo='*debug*' install /usr/lib/.build-id/33/2f1a8e56693960e3beb2d7@c 0cd79ddfec451cc3 /usr/lib/debug/.build-id/33/2f1a8e56693960e3beb2d70cd79ddfec451cc3.debug +@c (@value{GDBP}) +@c @end smallexample + +@c The core file was generated from the @file{/usr/bin/sl} binary, which +@c is not present on the machine opening the core file. @value{GDBN} has +@c suggested a command, based on the build-id of the binary, which was +@c extracted from the core file, that would install both the missing +@c binary, and the corresponding debug information. + +@c Unfortunately, @value{GDBN} doesn't know if the suggested command will +@c actually find a matching RPM or not. Querying the RPM database to see +@c which packages, if any, will provide a file with the given build-id, +@c is rather slow. As @file{/usr/bin/sl} is available in an RPM, then +@c the above command will succeed. + +@c It is possible to have @value{GDBN} check to see if there is a package +@c available before making the suggestion, but this is significantly +@c slower. To enable this mode use the following command: -In this case @value{GDBN} is able to suggest a command which will -install the missing executable based on the build-id of the -executable. For example: - -@smallexample -(@value{GDBP}) core-file /tmp/core.5489 -warning: Can't open file /usr/bin/sl during file-backed mapping note processing -[New LWP 5489] -Core was generated by `sl'. -Program terminated with signal SIGQUIT, Quit. -#0 0x00007f1b41ced1a7 in ?? () -Missing file(s), try: dnf --enablerepo='*debug*' install /usr/lib/.build-id/33/2f1a8e56693960e3beb2d70cd79ddfec451cc3 /usr/lib/debug/.build-id/33/2f1a8e56693960e3beb2d70cd79ddfec451cc3.debug -(@value{GDBP}) -@end smallexample - -The core file was generated from the @file{/usr/bin/sl} binary, which -is not present on the machine opening the core file. @value{GDBN} has -suggested a command, based on the build-id of the binary, which was -extracted from the core file, that would install both the missing -binary, and the corresponding debug information. - -Unfortunately, @value{GDBN} doesn't know if the suggested command will -actually find a matching RPM or not. Querying the RPM database to see -which packages, if any, will provide a file with the given build-id, -is rather slow. As @file{/usr/bin/sl} is available in an RPM, then -the above command will succeed. - -It is possible to have @value{GDBN} check to see if there is a package -available before making the suggestion, but this is significantly -slower. To enable this mode use the following command: - -@table @code -@kindex set rpm-suggestion build-id-mode -@kindex show rpm-suggestion build-id-mode -@cindex rpm suggestions, build-id-mode -@item set rpm-suggestion build-id-mode @r{[}fast@r{|}slow@r{]} -@itemx show rpm-suggestion build-id-mode -When set to @samp{fast}, which is the default, @value{GDBN} will offer -suggestions based on the build-id of any missing executables or shared -libraries while opening a core file. This is fast, but @value{GDBN} -has not checked if there is a package available that can supply the -required file, so running the suggested command might not install any -packages. - -When set to @samp{slow}, each time @value{GDBN} encounters an -executable, or shared library, that is missing, @value{GDBN} will -check to see if there is an RPM available that will supply the missing -binary. If a suitable RPM is found then @value{GDBN} will offer a -command which will install the missing RPM. If no suitable RPM is -found then @value{GDBN} will make no suggestions. -@end table +@c @table @code +@c @kindex set rpm-suggestion build-id-mode +@c @kindex show rpm-suggestion build-id-mode +@c @cindex rpm suggestions, build-id-mode +@c @item set rpm-suggestion build-id-mode @r{[}fast@r{|}slow@r{]} +@c @itemx show rpm-suggestion build-id-mode +@c When set to @samp{fast}, which is the default, @value{GDBN} will offer +@c suggestions based on the build-id of any missing executables or shared +@c libraries while opening a core file. This is fast, but @value{GDBN} +@c has not checked if there is a package available that can supply the +@c required file, so running the suggested command might not install any +@c packages. + +@c When set to @samp{slow}, each time @value{GDBN} encounters an +@c executable, or shared library, that is missing, @value{GDBN} will +@c check to see if there is an RPM available that will supply the missing +@c binary. If a suitable RPM is found then @value{GDBN} will offer a +@c command which will install the missing RPM. If no suitable RPM is +@c found then @value{GDBN} will make no suggestions. +@c @end table It is possible to review all of the previous RPM suggestions that @value{GDBN} has made using the following command: diff --git a/gdb/python/lib/gdb/command/rpm-suggestions.py b/gdb/python/lib/gdb/command/rpm-suggestions.py index d72db9c8015..4e119bb759e 100644 --- a/gdb/python/lib/gdb/command/rpm-suggestions.py +++ b/gdb/python/lib/gdb/command/rpm-suggestions.py @@ -351,7 +351,7 @@ else: # Take a non-empty list of RPM names and print a command line a # user could run to install these RPMs. def print_rpm_suggestions(rpm_name_list): - print("Missing rpms, try: dnf --enablerepo='*debug*' install " + ' '.join(rpm_name_list)) + print("Missing separate debuginfos, use: zypper install " + ' '.join(rpm_name_list)) # Take a non-empty list of build-id strings and print a series of # lines that a user could run to instll the RPMs that provide @@ -416,7 +416,10 @@ else: # Register the missing debug and missing objfile handlers with GDB. gdb.missing_debug.register_handler(None, RPM_MissingDebugHandler()) - gdb.missing_objfile.register_handler(None, RPM_MissingObjfileHandler()) + + # Not enabled for SUSE/openSUSE. Zypper doesn't support finding packages + # based on build-id, unless the package's installed. + #gdb.missing_objfile.register_handler(None, RPM_MissingObjfileHandler()) # Implement the core of 'info rpm-suggestions'. Reprint all rpm # suggestions. @@ -518,7 +521,10 @@ class rpm_suggestion_info(gdb.Command): rpm_suggestion_set_prefix() rpm_suggestion_show_prefix() param_rpm_suggestion_enabled = rpm_suggestion_enabled() -param_rpm_suggestion_build_id_mode = rpm_suggestion_build_id_mode() + +# The rpm-suggestion build-id-mode is only relevant for +# RPM_MissingObjfileHandler, which is disabled for SUSE/openSUSE. +#param_rpm_suggestion_build_id_mode = rpm_suggestion_build_id_mode() # Create the 'info rpm-suggestions' commands. rpm_suggestion_info() -- 2.43.0