Release: crash-8.0.2-2
Resolves: rhbz#2158299 Resolves: rhbz#2155184 Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
This commit is contained in:
parent
ecc52def80
commit
780e41a30d
@ -0,0 +1,75 @@
|
||||
From d941266da5fb9c386128a180f39281ec9d4aa242 Mon Sep 17 00:00:00 2001
|
||||
From: Lianbo Jiang <lijiang@redhat.com>
|
||||
Date: Mon, 20 Feb 2023 15:57:04 +0800
|
||||
Subject: [PATCH] gdb: Fix an assertion failure in the gdb's copy_type()
|
||||
|
||||
This is a backported patch from gdb. Without the patch, the following
|
||||
crash command may abort due to an assertion failure in the gdb's
|
||||
copy_type():
|
||||
|
||||
crash> px __per_cpu_start:0
|
||||
gdbtypes.c:5505: internal-error: type* copy_type(const type*): Assertion `TYPE_OBJFILE_OWNED (type)' failed.
|
||||
A problem internal to GDB has been detected,
|
||||
further debugging may prove unreliable.
|
||||
Quit this debugging session? (y or n)
|
||||
|
||||
The gdb commit 8e2da1651879 ("Fix assertion failure in copy_type")
|
||||
solved the current issue.
|
||||
|
||||
Reported-by: Buland Kumar Singh <bsingh@redhat.com>
|
||||
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
|
||||
---
|
||||
gdb-10.2.patch | 40 ++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 40 insertions(+)
|
||||
|
||||
diff --git a/gdb-10.2.patch b/gdb-10.2.patch
|
||||
index 91edfb338445..8c3b5a7fdf77 100644
|
||||
--- a/gdb-10.2.patch
|
||||
+++ b/gdb-10.2.patch
|
||||
@@ -1737,3 +1737,43 @@ exit 0
|
||||
struct field *nextfield;
|
||||
short nfields;
|
||||
struct type *typedef_type, *target_type;
|
||||
+--- gdb-10.2/gdb/gdbtypes.c.orig
|
||||
++++ gdb-10.2/gdb/gdbtypes.c
|
||||
+@@ -5492,27 +5492,25 @@ copy_type_recursive (struct objfile *objfile,
|
||||
+ }
|
||||
+
|
||||
+ /* Make a copy of the given TYPE, except that the pointer & reference
|
||||
+- types are not preserved.
|
||||
+-
|
||||
+- This function assumes that the given type has an associated objfile.
|
||||
+- This objfile is used to allocate the new type. */
|
||||
++ types are not preserved. */
|
||||
+
|
||||
+ struct type *
|
||||
+ copy_type (const struct type *type)
|
||||
+ {
|
||||
+- struct type *new_type;
|
||||
+-
|
||||
+- gdb_assert (TYPE_OBJFILE_OWNED (type));
|
||||
++ struct type *new_type = alloc_type_copy (type);
|
||||
+
|
||||
+- new_type = alloc_type_copy (type);
|
||||
+ TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type);
|
||||
+ TYPE_LENGTH (new_type) = TYPE_LENGTH (type);
|
||||
+ memcpy (TYPE_MAIN_TYPE (new_type), TYPE_MAIN_TYPE (type),
|
||||
+ sizeof (struct main_type));
|
||||
+ if (type->main_type->dyn_prop_list != NULL)
|
||||
+- new_type->main_type->dyn_prop_list
|
||||
+- = copy_dynamic_prop_list (&TYPE_OBJFILE (type) -> objfile_obstack,
|
||||
+- type->main_type->dyn_prop_list);
|
||||
++ {
|
||||
++ struct obstack *storage = (TYPE_OBJFILE_OWNED (type)
|
||||
++ ? &TYPE_OBJFILE (type)->objfile_obstack
|
||||
++ : gdbarch_obstack (TYPE_OWNER (type).gdbarch));
|
||||
++ new_type->main_type->dyn_prop_list
|
||||
++ = copy_dynamic_prop_list (storage, type->main_type->dyn_prop_list);
|
||||
++ }
|
||||
+
|
||||
+ return new_type;
|
||||
+ }
|
||||
+
|
||||
--
|
||||
2.37.1
|
||||
|
@ -0,0 +1,79 @@
|
||||
From 92de7c34b1f910abff4d77522f74454ea0263a90 Mon Sep 17 00:00:00 2001
|
||||
From: Lianbo Jiang <lijiang@redhat.com>
|
||||
Date: Mon, 13 Feb 2023 11:12:12 +0800
|
||||
Subject: [PATCH] Fix for "bt" command printing "bogus exception frame" warning
|
||||
|
||||
Currently, the "bt" command may print a bogus exception frame
|
||||
and the remaining frame will be truncated on x86_64 when using the
|
||||
"virsh send-key <kvm guest> KEY_LEFTALT KEY_SYSRQ KEY_C" command
|
||||
to trigger a panic from the KVM host. For example:
|
||||
|
||||
crash> bt
|
||||
PID: 0 TASK: ffff9e7a47e32f00 CPU: 3 COMMAND: "swapper/3"
|
||||
#0 [ffffba7900118bb8] machine_kexec at ffffffff87e5c2c7
|
||||
#1 [ffffba7900118c08] __crash_kexec at ffffffff87f9500d
|
||||
#2 [ffffba7900118cd0] panic at ffffffff87edfff9
|
||||
#3 [ffffba7900118d50] sysrq_handle_crash at ffffffff883ce2c1
|
||||
...
|
||||
#16 [ffffba7900118fd8] handle_edge_irq at ffffffff87f559f2
|
||||
#17 [ffffba7900118ff0] asm_call_on_stack at ffffffff88800fa2
|
||||
--- <IRQ stack> ---
|
||||
#18 [ffffba790008bda0] asm_call_on_stack at ffffffff88800fa2
|
||||
RIP: ffffffffffffffff RSP: 0000000000000124 RFLAGS: 00000003
|
||||
RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000
|
||||
RDX: ffffffff88800c1e RSI: 0000000000000000 RDI: 0000000000000000
|
||||
RBP: 0000000000000001 R8: 0000000000000000 R9: 0000000000000000
|
||||
R10: 0000000000000000 R11: ffffffff88760555 R12: ffffba790008be08
|
||||
R13: ffffffff87f18002 R14: ffff9e7a47e32f00 R15: ffff9e7bb6198e00
|
||||
ORIG_RAX: 0000000000000000 CS: 0003 SS: 0000
|
||||
bt: WARNING: possibly bogus exception frame
|
||||
crash>
|
||||
|
||||
The following related kernel commits cause the current issue, crash
|
||||
needs to adjust the value of irq_eframe_link.
|
||||
|
||||
Related kernel commits:
|
||||
[1] v5.8: 931b94145981 ("x86/entry: Provide helpers for executing on the irqstack")
|
||||
[2] v5.8: fa5e5c409213 ("x86/entry: Use idtentry for interrupts")
|
||||
[3] v5.12: 52d743f3b712 ("x86/softirq: Remove indirection in do_softirq_own_stack()")
|
||||
|
||||
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
|
||||
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||
---
|
||||
x86_64.c | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
diff --git a/x86_64.c b/x86_64.c
|
||||
index 7a5d6f050c89..5b671bd97775 100644
|
||||
--- a/x86_64.c
|
||||
+++ b/x86_64.c
|
||||
@@ -3938,6 +3938,11 @@ in_exception_stack:
|
||||
if (irq_eframe) {
|
||||
bt->flags |= BT_EXCEPTION_FRAME;
|
||||
i = (irq_eframe - bt->stackbase)/sizeof(ulong);
|
||||
+ if (symbol_exists("asm_common_interrupt")) {
|
||||
+ i -= 1;
|
||||
+ up = (ulong *)(&bt->stackbuf[i*sizeof(ulong)]);
|
||||
+ bt->instptr = *up;
|
||||
+ }
|
||||
x86_64_print_stack_entry(bt, ofp, level, i, bt->instptr);
|
||||
bt->flags &= ~(ulonglong)BT_EXCEPTION_FRAME;
|
||||
cs = x86_64_exception_frame(EFRAME_PRINT|EFRAME_CS, 0,
|
||||
@@ -6521,6 +6526,14 @@ x86_64_irq_eframe_link_init(void)
|
||||
else
|
||||
return;
|
||||
|
||||
+ if (symbol_exists("asm_common_interrupt")) {
|
||||
+ if (symbol_exists("asm_call_on_stack"))
|
||||
+ machdep->machspec->irq_eframe_link = -64;
|
||||
+ else
|
||||
+ machdep->machspec->irq_eframe_link = -32;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (THIS_KERNEL_VERSION < LINUX(2,6,9))
|
||||
return;
|
||||
|
||||
--
|
||||
2.37.1
|
||||
|
@ -0,0 +1,78 @@
|
||||
From e0e6e4a7ee03b3d00b50a9e4db2f2ea6f7da0da3 Mon Sep 17 00:00:00 2001
|
||||
From: Lianbo Jiang <lijiang@redhat.com>
|
||||
Date: Wed, 15 Feb 2023 16:24:57 +0800
|
||||
Subject: [PATCH] Fix for "bt" command unnecessarily printing an exception
|
||||
frame
|
||||
|
||||
Kernel commit 7d65f4a65532 ("irq: Consolidate do_softirq() arch overriden
|
||||
implementations") renamed the call_softirq to do_softirq_own_stack, and
|
||||
there is no exception frame also when coming from do_softirq_own_stack.
|
||||
Without the patch, crash may unnecessarily output an exception frame with
|
||||
a warning as below:
|
||||
|
||||
crash> foreach bt
|
||||
...
|
||||
PID: 0 TASK: ffff914f820a8000 CPU: 25 COMMAND: "swapper/25"
|
||||
#0 [fffffe0000504e48] crash_nmi_callback at ffffffffa665d763
|
||||
#1 [fffffe0000504e50] nmi_handle at ffffffffa662a423
|
||||
#2 [fffffe0000504ea8] default_do_nmi at ffffffffa6fe7dc9
|
||||
#3 [fffffe0000504ec8] do_nmi at ffffffffa662a97f
|
||||
#4 [fffffe0000504ef0] end_repeat_nmi at ffffffffa70015e8
|
||||
[exception RIP: clone_endio+172]
|
||||
RIP: ffffffffc005c1ec RSP: ffffa1d403d08e98 RFLAGS: 00000246
|
||||
RAX: 0000000000000000 RBX: ffff915326fba230 RCX: 0000000000000018
|
||||
RDX: ffffffffc0075400 RSI: 0000000000000000 RDI: ffff915326fba230
|
||||
RBP: ffff915326fba1c0 R8: 0000000000001000 R9: ffff915308d6d2a0
|
||||
R10: 000000a97dfe5e10 R11: ffffa1d40038fe98 R12: ffff915302babc40
|
||||
R13: ffff914f94360000 R14: 0000000000000000 R15: 0000000000000000
|
||||
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
|
||||
--- <NMI exception stack> ---
|
||||
#5 [ffffa1d403d08e98] clone_endio at ffffffffc005c1ec [dm_mod]
|
||||
#6 [ffffa1d403d08ed0] blk_update_request at ffffffffa6a96954
|
||||
#7 [ffffa1d403d08f10] scsi_end_request at ffffffffa6c9b968
|
||||
#8 [ffffa1d403d08f48] scsi_io_completion at ffffffffa6c9bb3e
|
||||
#9 [ffffa1d403d08f90] blk_complete_reqs at ffffffffa6aa0e95
|
||||
#10 [ffffa1d403d08fa0] __softirqentry_text_start at ffffffffa72000dc
|
||||
#11 [ffffa1d403d08ff0] do_softirq_own_stack at ffffffffa7000f9a
|
||||
--- <IRQ stack> ---
|
||||
#12 [ffffa1d40038fe70] do_softirq_own_stack at ffffffffa7000f9a
|
||||
[exception RIP: unknown or invalid address]
|
||||
RIP: 0000000000000000 RSP: 0000000000000000 RFLAGS: 00000000
|
||||
RAX: ffffffffa672eae5 RBX: ffffffffa83b34e0 RCX: ffffffffa672eb12
|
||||
RDX: 0000000000000010 RSI: 8b7d6c8869010c00 RDI: 0000000000000085
|
||||
RBP: 0000000000000286 R8: ffff914f820a8000 R9: ffffffffa67a94e0
|
||||
R10: 0000000000000286 R11: ffffffffa66fb4c5 R12: ffffffffa67a898b
|
||||
R13: 0000000000000000 R14: fffffffffffffff8 R15: ffffffffa67a1e68
|
||||
ORIG_RAX: 0000000000000000 CS: 0000 SS: ffffffffa672edff
|
||||
bt: WARNING: possibly bogus exception frame
|
||||
#13 [ffffa1d40038ff30] start_secondary at ffffffffa665fa2c
|
||||
#14 [ffffa1d40038ff50] secondary_startup_64_no_verify at ffffffffa6600116
|
||||
...
|
||||
|
||||
Reported-by: Marco Patalano <mpatalan@redhat.com>
|
||||
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
|
||||
---
|
||||
x86_64.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/x86_64.c b/x86_64.c
|
||||
index 5b671bd97775..6cac3936b33d 100644
|
||||
--- a/x86_64.c
|
||||
+++ b/x86_64.c
|
||||
@@ -3825,10 +3825,11 @@ in_exception_stack:
|
||||
up -= 1;
|
||||
bt->instptr = *up;
|
||||
/*
|
||||
- * No exception frame when coming from call_softirq.
|
||||
+ * No exception frame when coming from do_softirq_own_stack
|
||||
+ * or call_softirq.
|
||||
*/
|
||||
if ((sp = value_search(bt->instptr, &offset)) &&
|
||||
- STREQ(sp->name, "call_softirq"))
|
||||
+ (STREQ(sp->name, "do_softirq_own_stack") || STREQ(sp->name, "call_softirq")))
|
||||
irq_eframe = 0;
|
||||
bt->frameptr = 0;
|
||||
done = FALSE;
|
||||
--
|
||||
2.37.1
|
||||
|
13
crash.spec
13
crash.spec
@ -4,7 +4,7 @@
|
||||
Summary: Kernel analysis utility for live systems, netdump, diskdump, kdump, LKCD or mcore dumpfiles
|
||||
Name: crash
|
||||
Version: 8.0.2
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
License: GPLv3
|
||||
Source0: https://github.com/crash-utility/crash/archive/crash-%{version}.tar.gz
|
||||
Source1: http://ftp.gnu.org/gnu/gdb/gdb-10.2.tar.gz
|
||||
@ -19,6 +19,9 @@ Provides: bundled(libiberty)
|
||||
Provides: bundled(gdb) = 10.2
|
||||
Patch0: lzo_snappy_zstd.patch
|
||||
Patch1: crash-8.0.2_build.patch
|
||||
Patch2: 0001-gdb-Fix-an-assertion-failure-in-the-gdb-s-copy_type.patch
|
||||
Patch3: 0002-Fix-for-bt-command-printing-bogus-exception-frame-wa.patch
|
||||
Patch4: 0003-Fix-for-bt-command-unnecessarily-printing-an-excepti.patch
|
||||
|
||||
%description
|
||||
The core analysis suite is a self-contained tool that can be used to
|
||||
@ -40,6 +43,10 @@ offered by Mission Critical Linux, or the LKCD kernel patch.
|
||||
%setup -n %{name}-%{version} -q
|
||||
%patch0 -p1 -b lzo_snappy_zstd.patch
|
||||
%patch1 -p1 -b crash-8.0.2_build.patch
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
|
||||
|
||||
%build
|
||||
|
||||
@ -65,6 +72,10 @@ cp -p defs.h %{buildroot}%{_includedir}/crash
|
||||
%{_includedir}/*
|
||||
|
||||
%changelog
|
||||
* Mon Feb 20 2023 Lianbo Jiang <lijiang@redhat.com> - 8.0.2-2
|
||||
- Fix an assertion failure in the gdb's copy_type()
|
||||
- Fix for "bt" command printing "bogus exception frame" warning
|
||||
|
||||
* Thu Nov 17 2022 Lianbo Jiang <lijiang@redhat.com> - 8.0.2-1
|
||||
- Rebase to upstream crash 8.0.2
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user