Hi, Alexey
Sorry for the late reply. And also thank you for the update.
At present, I'm looking at this patchset, but I have to say that this is a big one,
I will take some time to understand these changes and think more about this.
And I will provide feedback ASAP.
Thanks.
Lianbo
在 2020年12月29日 18:06, crash-utility-request(a)redhat.com 写道:
Date: Tue, 29 Dec 2020 02:06:08 -0800
From: Alexey Makhalov <amakhalov(a)vmware.com>
To: <crash-utility(a)redhat.com>, <k-hagio-ab(a)nec.com>
Subject: [Crash-utility] [PATCH v3 1/2] Update gdb to 10.1
Message-ID: <20201229100609.83147-2-amakhalov(a)vmware.com>
Content-Type: text/plain
Fully redone gdb-7.6.patch to gdb-10.1.patch to keep all
functionality. Changes which were dropped are saved in
dropped-gdb-7.6-to-10.1.patch
Main difference between gdb-7.6 and gdb-10.1 is the last
one was rewritten in C++.
I continue to keep crash code in C. Mark transition
functions as extern "C" to resolve linking issues.
Eliminated error_hook() and SJLJ while running in C++ code
(after gdb_command_funnel()) use try-catch mechanism instead.
request_types() was redone to do not call
GNU_GET_NEXT_DATATYPE multiple times but single usage of
GNU_ITERATE_DATATYPES with proper callback instead.
Complete iteration happens on C++ side now.
Removed "struct global_iterator" from request structure,
but added several fields (including callback pointer) to
be able to perform iteration on C++ side.
Type of "linux_banner" symbol is reported as 'D' by new
gdb as its section ".rodata" marked as writable in vmlinux.
BFD API has changed.
deprecated_command_loop_hook got deprecated. So, call crash
main_loop() directly from gdb captured_main().
Added symbol file (vmlinux) rebase in gdb by kaslr_offset.
by using new function: objfile_rebase().
As result, we do not need kernel symbol patching as well as
bait_and_switch hook anymore.
Added crash_target for gdb to provide target operations
such as xfer_partial to read and write crash dump memory.
Removed previously used hooks for that in target.c.
Keep crash_target.c as a file in crash folder instead of
in gdb-10.1.patch for easier development and history
tracking.
crash_target can be enhanced in future to provide access
to CPU registers, so backtrace and frame related commands
from gdb can be used.
Removed gdb-7.6-proc_service.h.patch is not required as
gdb-10.1 already has this change.
Extra: add VMware copyright to the version info.
TODO:
1) gdb-10.1-ppc64le-support.patch has to be updated with
following commits.
2) deprecate #if defined(GDB_X_Y) code as crash really
supports only the latest gdb (only one patch).
3) move gdb_funnel_command() and subfunctions to separate
file, similar to crash_target.c
4) remove legacy kernel patching and bait_and_switch hook.
Signed-off-by: Alexey Makhalov <amakhalov(a)vmware.com>
---
Makefile | 11 +-
configure.c | 20 +-
crash_target.c | 104 +
defs.h | 35 +-
dropped-gdb-7.6-to-10.1.patch | 303 +++
...support.patch => gdb-10.1-ppc64le-support.patch | 0
gdb-10.1.patch | 1577 ++++++++++++
gdb-7.6-proc_service.h.patch | 67 -
gdb-7.6.patch | 2503 --------------------
gdb_interface.c | 85 +-
help.c | 1 +
kernel.c | 2 +-
main.c | 1 -
symbols.c | 125 +-
x86_64.c | 14 +-
15 files changed, 2141 insertions(+), 2707 deletions(-)
create mode 100644 crash_target.c
create mode 100644 dropped-gdb-7.6-to-10.1.patch
rename gdb-7.6-ppc64le-support.patch => gdb-10.1-ppc64le-support.patch (100%)
create mode 100644 gdb-10.1.patch
delete mode 100644 gdb-7.6-proc_service.h.patch
delete mode 100644 gdb-7.6.patch