Release 1.6.4-2
Resolves: RHEL-73069 Signed-off-by: Tao Liu <ltao@redhat.com>
This commit is contained in:
parent
b4a0382349
commit
8b31c045ac
@ -0,0 +1,47 @@
|
|||||||
|
From 62b8d5005eaa9014467db85cfe268e65c6679f4c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tao Liu <ltao@redhat.com>
|
||||||
|
Date: Mon, 4 Nov 2024 17:11:19 +1300
|
||||||
|
Subject: [PATCH 1/2] gcore: update set_context with upstream counterpart
|
||||||
|
|
||||||
|
With the introduction of upstream commit "Preparing for gdb stack unwind
|
||||||
|
support" [1], the function set_context() is added by a 3rd parameter. Without
|
||||||
|
this patch, the compiliation of gcore will fail.
|
||||||
|
|
||||||
|
The 3rd parameter of set_context() is used to sync the context of crash and
|
||||||
|
gdb, so gdb can hold the the value of registers of current crash's task
|
||||||
|
context, and gdb can output the stack unwinding for current task.
|
||||||
|
|
||||||
|
This have nothing to do with gcore, so simply set the 3rd parameter as FALSE.
|
||||||
|
|
||||||
|
[1]: https://github.com/lian-bo/crash/commit/d75d15d31b92f8882ccb15c960665e2c8a8d1c28
|
||||||
|
|
||||||
|
Signed-off-by: Tao Liu <ltao@redhat.com>
|
||||||
|
---
|
||||||
|
src/gcore.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/gcore.c b/src/gcore.c
|
||||||
|
index 47a9c0d..a79f69b 100644
|
||||||
|
--- a/src/gcore.c
|
||||||
|
+++ b/src/gcore.c
|
||||||
|
@@ -306,7 +306,7 @@ static void do_gcore(char *arg)
|
||||||
|
|
||||||
|
if (tc != CURRENT_CONTEXT()) {
|
||||||
|
gcore->orig_task = CURRENT_TASK();
|
||||||
|
- (void) set_context(tc->task, NO_PID);
|
||||||
|
+ (void) set_context(tc->task, NO_PID, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(gcore->corename, CORENAME_MAX_SIZE + 1, "core.%lu.%s",
|
||||||
|
@@ -340,7 +340,7 @@ static void do_gcore(char *arg)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gcore->orig_task)
|
||||||
|
- (void)set_context(gcore->orig_task, NO_PID);
|
||||||
|
+ (void)set_context(gcore->orig_task, NO_PID, FALSE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
@ -0,0 +1,85 @@
|
|||||||
|
From e03ff7341a9a624a46cea4e60ee097606b1687a8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: HATAYAMA Daisuke <d.hatayama@fujitsu.com>
|
||||||
|
Date: Sat, 23 Nov 2024 17:30:41 +0900
|
||||||
|
Subject: [PATCH 2/2] x86: fix the issue that core files for 64-bit tasks are
|
||||||
|
generated in the 32-bit format
|
||||||
|
|
||||||
|
Core files for 64-bit tasks are falsely generated in the 32-bit
|
||||||
|
formats.
|
||||||
|
|
||||||
|
The root cause of this issue is that location of saving register
|
||||||
|
values on kernel stacks is changed by the kernel commit
|
||||||
|
65c9cc9e2c14602d98f1ca61c51ac954e9529303 (x86/fred: Reserve space for
|
||||||
|
the FRED stack frame) in Linux kernel 6.9-rc1 to add some reserved
|
||||||
|
area for FRED feature and gcore doesn't take this into
|
||||||
|
consideration. Hence, the value of CS register retrieved from kernel
|
||||||
|
stacks based on the existing logic is wrong and thus checking
|
||||||
|
execution mode of a given task based on the value also works wrong.
|
||||||
|
|
||||||
|
To fix this issue, let's take the FRED feature into account. If FRED
|
||||||
|
data structure is defined, retrieve register values from the address
|
||||||
|
next to the reserved for the FRED feature.
|
||||||
|
|
||||||
|
This logic is borrowed from the commit
|
||||||
|
48764a14bc5856f0b0bb30685336c68b832154fc (x86_64: fix for adding
|
||||||
|
top_of_kernel_stack_padding for kernel stack) and the commit
|
||||||
|
196c4b79c13d1c0e6d7b21c8321eca07d3838d6a (X86 64: fix a regression
|
||||||
|
issue about kernel stack padding) of crash utility.
|
||||||
|
---
|
||||||
|
src/libgcore/gcore_x86.c | 9 ++++++---
|
||||||
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libgcore/gcore_x86.c b/src/libgcore/gcore_x86.c
|
||||||
|
index 3ddf510..4f43956 100644
|
||||||
|
--- a/src/libgcore/gcore_x86.c
|
||||||
|
+++ b/src/libgcore/gcore_x86.c
|
||||||
|
@@ -514,10 +514,11 @@ convert_from_fxsr(struct user_i387_ia32_struct *env, struct task_context *target
|
||||||
|
char *pt_regs_buf;
|
||||||
|
uint16_t ds;
|
||||||
|
struct machine_specific *ms = machdep->machspec;
|
||||||
|
+ ulong padding_size = VALID_SIZE(fred_frame) > 0 ? (2 * 8) : 0;
|
||||||
|
|
||||||
|
pt_regs_buf = GETBUF(SIZE(pt_regs));
|
||||||
|
|
||||||
|
- readmem(machdep->get_stacktop(target->task) - SIZE(pt_regs),
|
||||||
|
+ readmem(machdep->get_stacktop(target->task) - padding_size - SIZE(pt_regs),
|
||||||
|
KVADDR, pt_regs_buf, SIZE(pt_regs),
|
||||||
|
"convert_from_fxsr: regs",
|
||||||
|
gcore_verbose_error_handle());
|
||||||
|
@@ -1837,6 +1838,7 @@ static int genregs_get(struct task_context *target,
|
||||||
|
struct user_regs_struct active_regs;
|
||||||
|
const int active = is_task_active(target->task);
|
||||||
|
struct machine_specific *ms = machdep->machspec;
|
||||||
|
+ ulong padding_size = VALID_SIZE(fred_frame) > 0 ? (2 * 8) : 0;
|
||||||
|
|
||||||
|
BZERO(regs, sizeof(*regs));
|
||||||
|
|
||||||
|
@@ -1854,7 +1856,7 @@ static int genregs_get(struct task_context *target,
|
||||||
|
*/
|
||||||
|
pt_regs_buf = GETBUF(SIZE(pt_regs));
|
||||||
|
|
||||||
|
- readmem(machdep->get_stacktop(target->task) - SIZE(pt_regs), KVADDR,
|
||||||
|
+ readmem(machdep->get_stacktop(target->task) - padding_size - SIZE(pt_regs), KVADDR,
|
||||||
|
pt_regs_buf, SIZE(pt_regs), "genregs_get: pt_regs",
|
||||||
|
gcore_verbose_error_handle());
|
||||||
|
|
||||||
|
@@ -2188,6 +2190,7 @@ static int genregs_get32(struct task_context *target,
|
||||||
|
struct user_regs_struct *regs = (struct user_regs_struct *)buf;
|
||||||
|
char *pt_regs_buf;
|
||||||
|
ulonglong pt_regs_addr;
|
||||||
|
+ ulong padding_size = VALID_SIZE(fred_frame) > 0 ? (2 * 8) : 0;
|
||||||
|
|
||||||
|
if (is_task_active(target->task) && KVMDUMP_DUMPFILE()) {
|
||||||
|
get_regs_from_kvmdump_notes(target, regs);
|
||||||
|
@@ -2198,7 +2201,7 @@ static int genregs_get32(struct task_context *target,
|
||||||
|
|
||||||
|
pt_regs_buf = GETBUF(SIZE(pt_regs));
|
||||||
|
|
||||||
|
- pt_regs_addr = machdep->get_stacktop(target->task) - SIZE(pt_regs);
|
||||||
|
+ pt_regs_addr = machdep->get_stacktop(target->task) - padding_size - SIZE(pt_regs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The commit 07b047fc2466249aff7cdb23fa0b0955a7a00d48
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
@ -3,7 +3,7 @@
|
|||||||
Summary: Gcore extension module for the crash utility
|
Summary: Gcore extension module for the crash utility
|
||||||
Name: crash-gcore-command
|
Name: crash-gcore-command
|
||||||
Version: 1.6.4
|
Version: 1.6.4
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Source0: https://github.com/fujitsu/crash-gcore/archive/v%{version}/%{name}-%{version}.tar.gz
|
Source0: https://github.com/fujitsu/crash-gcore/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||||
URL: https://github.com/fujitsu/crash-gcore
|
URL: https://github.com/fujitsu/crash-gcore
|
||||||
@ -15,6 +15,8 @@ Requires: crash >= 5.1.5
|
|||||||
|
|
||||||
Patch0: 0001-coredump-fix-building-failure-due-to-undefined-macro.patch
|
Patch0: 0001-coredump-fix-building-failure-due-to-undefined-macro.patch
|
||||||
Patch1: 0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch
|
Patch1: 0002-x86-fix-extend-gcore.so-taking-much-time-like-more-t.patch
|
||||||
|
Patch2: 0001-gcore-update-set_context-with-upstream-counterpart.patch
|
||||||
|
Patch3: 0002-x86-fix-the-issue-that-core-files-for-64-bit-tasks-a.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Command for creating a core dump file of a user-space task that was
|
Command for creating a core dump file of a user-space task that was
|
||||||
@ -37,6 +39,9 @@ install -m 0755 -t %{buildroot}%{_libdir}/crash/extensions %{_builddir}/%{repona
|
|||||||
%license COPYING
|
%license COPYING
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon May 05 2025 Lianbo Jiang <lijiang@redhat.com> - 1.6.4-2
|
||||||
|
- Rebase to latest upstream e03ff7341a9a
|
||||||
|
|
||||||
* Fri Jul 05 2024 Lianbo Jiang <lijiang@redhat.com> - 1.6.4-1
|
* Fri Jul 05 2024 Lianbo Jiang <lijiang@redhat.com> - 1.6.4-1
|
||||||
- Rebase to upstream 1.6.4
|
- Rebase to upstream 1.6.4
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user