crash/SOURCES/0005-gdb-Disable-DT_DEBUG-lookup-by-GDB-inside-the-vmcore.patch

94 lines
3.9 KiB
Diff

From 2c69f93e59c6b2efac5bae9f7891dbe1e0094fdd Mon Sep 17 00:00:00 2001
From: Shivang Upadhyay <shivangu@linux.ibm.com>
Date: Mon, 21 Jul 2025 13:47:33 +0530
Subject: [PATCH 5/5] gdb: Disable DT_DEBUG lookup by GDB inside the vmcore
Crash with GDB 16.2, the following warnings are printed:
crash>
crash: page excluded: kernel virtual address: c0000000022d6098 type: "gdb_readmem_callback"
crash: page excluded: kernel virtual address: c0000000022d6098 type: "gdb_readmem_callback"
This occurs because the elf_locate_base function in GDB 16.2
attempts to read the address of the dynamic linker runtime
structure, which is present in the .dynamic section of the
executable. However, this section may be excluded from the
dump by makedumpfile.
The repeated calls to elf_locate_base were introduced by gdb
commit [1] aebb370 ("gdb, solib-svr4: support namespaces in
DSO iteration") via svr4_iterate_over_objfiles_in_search_order.
To check whether the kernel includes DT_DEBUG information,
prints were added inside crash::xfer_partial, which is
called through elf_locate_base when reading from vmcore.
Even when running crash on /proc/kcore, all output data was
zero. This confirms that DT_DEBUG information is never
present in the kernel image.
`mod -S` continues to function correctly after the following
patch:
...
crash> mod -S
Enable debuginfod for this session? (y or [n])
MODULE NAME TEXT_BASE SIZE OBJECT FILE
c0080000004a0300 dm_log c008000000480000 196608 XXX/lib/modules/5.14.0-592.el9.ppc64le/kernel/drivers/md/dm-log.ko
c0080000006d1100 sd_mod c008000000580000 196608 XXX/lib/modules/5.14.0-592.el9.ppc64le/kernel/drivers/scsi/sd_mod.ko
c0080000005c0080 dm_region_hash c0080000005a0000 196608 XXX/lib/modules/5.14.0-592.el9.ppc64le/kernel/drivers/md/dm-region-hash.ko
c008000000770700 sg c008000000620000 262144 XXX/lib/modules/5.14.0-592.el9.ppc64le/kernel/drivers/scsi/sg.ko
c008000000660500 dm_mirror c008000000640000 196608 XXX/lib/modules/5.14.0-592.el9.ppc64le/kernel/drivers/md/dm-mirror.ko
...
Commit e906eaca2b1a ("Fix the issue of "page excluded"
messages flooding") attempted fix this by suppressing these
warnings for regular users, but the warnings still appear
when crash is started in debug mode.
To fix this, remove the DT_DEBUG read call, from the
elf_locate_base function in GDB that tries to read the
.dynamic section, as this information is not useful for
debugging kernel images in either dump or live kernel
scenarios.
[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aebb370
Cc: Tao liu <ltao@redhat.com>
Cc: Lianbo Jiang <lijiang@redhat.com>
Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: shivang.upadhyay <shivangu@linux.ibm.com>
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
---
gdb-16.2.patch | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/gdb-16.2.patch b/gdb-16.2.patch
index 9d056580b2f7..6767bf7d7bf0 100644
--- a/gdb-16.2.patch
+++ b/gdb-16.2.patch
@@ -1982,3 +1982,21 @@ exit 0
req->tagname = (char *)TYPE_TAG_NAME(type);
if (!req->tagname) {
val = expr->evaluate_type();
+--- gdb-16.2/gdb/solib-svr4.c.orig
++++ gdb-16.2/gdb/solib-svr4.c
+@@ -741,13 +741,13 @@
+ return 0;
+ return extract_typed_address (pbuf, ptr_type);
+ }
+-
++#ifndef CRASH_MERGE
+ /* Find DT_DEBUG. */
+ if (gdb_bfd_scan_elf_dyntag (DT_DEBUG, current_program_space->exec_bfd (),
+ &dyn_ptr, NULL)
+ || scan_dyntag_auxv (DT_DEBUG, &dyn_ptr, NULL))
+ return dyn_ptr;
+-
++#endif
+ /* This may be a static executable. Look for the symbol
+ conventionally named _r_debug, as a last resort. */
+ bound_minimal_symbol msymbol
--
2.50.0