Hi, Xianting
Sorry for the late reply.I have no such machine, so I only tested it on the latest qemu, and most crash commands work well, but there are still some flaws as below:
[root@fedora-riscv crash]# ./crash
crash 8.0.1++
Copyright (C) 2002-2022 Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation
Copyright (C) 1999-2006 Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited
Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011, 2020-2022 NEC Corporation
Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
Copyright (C) 2015, 2021 VMware, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. Enter "help copying" to see the conditions.
This program has absolutely no warranty. Enter "help warranty" for details.
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "riscv64-unknown-linux-gnu".
Type "show configuration" for configuration details.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
KERNEL: /lib/modules/5.19.0-rc1+/build/vmlinux
DUMPFILE: /proc/kcore
CPUS: 1
DATE: Wed Sep 7 04:23:27 EDT 2022
UPTIME: 00:12:13
LOAD AVERAGE: 2.02, 1.81, 1.18
TASKS: 116
NODENAME: fedora-riscv
RELEASE: 5.19.0-rc1+
VERSION: #2 SMP Tue Sep 6 21:39:16 EDT 2022
MACHINE: riscv64 (unknown Mhz)
MEMORY: 2 GB
PID: 660
COMMAND: "crash"
TASK: ff6000000874d280 [THREAD_INFO: ff6000000874d280]
CPU: 0
STATE: TASK_RUNNING (ACTIVE)
crash>
crash 8.0.1++
Copyright (C) 2002-2022 Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation
Copyright (C) 1999-2006 Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited
Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011, 2020-2022 NEC Corporation
Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
Copyright (C) 2015, 2021 VMware, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. Enter "help copying" to see the conditions.
This program has absolutely no warranty. Enter "help warranty" for details.
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "riscv64-unknown-linux-gnu".
Type "show configuration" for configuration details.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
lseek: Invalid argument
KERNEL: /lib/modules/5.19.0-rc1+/build/vmlinux
DUMPFILE: /proc/kcore
CPUS: 1
DATE: Wed Sep 7 04:23:27 EDT 2022
UPTIME: 00:12:13
LOAD AVERAGE: 2.02, 1.81, 1.18
TASKS: 116
NODENAME: fedora-riscv
RELEASE: 5.19.0-rc1+
VERSION: #2 SMP Tue Sep 6 21:39:16 EDT 2022
MACHINE: riscv64 (unknown Mhz)
MEMORY: 2 GB
PID: 660
COMMAND: "crash"
TASK: ff6000000874d280 [THREAD_INFO: ff6000000874d280]
CPU: 0
STATE: TASK_RUNNING (ACTIVE)
crash>
On Sat, Aug 13, 2022 at 11:18 AM Xianting Tian <xianting.tian@xxxxxxxxxxxxxxxxx> wrote:
This series of patches are for Crash-utility tool, it make crash tool support
RISCV64 arch and the common commands(*, bt, p, rd, mod, log, set, struct, task,
dis, help -r, help -m, and so on).
To make the crash tool work normally for RISCV64 arch, we need a Linux kernel
patch, which exports the kernel virtual memory layout, va_bits, phys_ram_base
to vmcoreinfo, it can simplify the development of crash tool.
The Linux kernel patch set:
https://lore.kernel.org/linux-riscv/20220811074150.3020189-1-xianting.tian@xxxxxxxxxxxxxxxxx/
[ Patch 1 ~ 4 already merged to Linux for-next branch, targeted for 5.20;
Patch 5, 6 already merged to Palmer's riscv-crash branch:
https://git.kernel.org/pub/scm/linux/kernel/git/palmer/linux.git/log/?h=riscv-crash ]
This series of patches are tested on QEMU RISCV64 env and SoC platform of
T-head Xuantie 910 RISCV64 CPU.
====================================
Some test examples list as below
====================================
... ...
KERNEL: vmlinux
DUMPFILE: vmcore
CPUS: 1
DATE: Fri Jul 15 10:24:25 CST 2022
UPTIME: 00:00:33
LOAD AVERAGE: 0.05, 0.01, 0.00
TASKS: 41
NODENAME: buildroot
RELEASE: 5.18.9
VERSION: #30 SMP Fri Jul 15 09:47:03 CST 2022
MACHINE: riscv64 (unknown Mhz)
MEMORY: 1 GB
PANIC: "Kernel panic - not syncing: sysrq triggered crash"
PID: 113
COMMAND: "sh"
TASK: ff60000002269600 [THREAD_INFO: ff60000002269600]
CPU: 0
STATE: TASK_RUNNING (PANIC)
carsh>
crash> p mem_map
mem_map = $1 = (struct page *) 0xff6000003effbf00
crash> p /x *(struct page *) 0xff6000003effbf00
$5 = {
flags = 0x1000,
{
{
{
lru = {
next = 0xff6000003effbf08,
prev = 0xff6000003effbf08
},
{
__filler = 0xff6000003effbf08,
mlock_count = 0x3effbf08
}
},
mapping = 0x0,
index = 0x0,
private = 0x0
},
... ...
crash> mod
MODULE NAME BASE SIZE OBJECT FILE
ffffffff0113e740 nvme_core ffffffff01133000 98304 (not loaded) [CONFIG_KALLSYMS]
ffffffff011542c0 nvme ffffffff0114c000 61440 (not loaded) [CONFIG_KALLSYMS]
crash> rd ffffffff0113e740 8
ffffffff0113e740: 0000000000000000 ffffffff810874f8 .........t......
ffffffff0113e750: ffffffff011542c8 726f635f656d766e .B......nvme_cor
ffffffff0113e760: 0000000000000065 0000000000000000 e...............
ffffffff0113e770: 0000000000000000 0000000000000000 ................
crash> vtop ffffffff0113e740
VIRTUAL PHYSICAL
ffffffff0113e740 8254d740
PGD: ffffffff810e9ff8 => 2ffff001
P4D: 0000000000000000 => 000000002fffec01
PUD: 00005605c2957470 => 0000000020949801
PMD: 00007fff7f1750c0 => 0000000020947401
PTE: 0 => 209534e7
PAGE: 000000008254d000
PTE PHYSICAL FLAGS
209534e7 8254d000 (PRESENT|READ|WRITE|GLOBAL|ACCESSED|DIRTY)
PAGE PHYSICAL MAPPING INDEX CNT FLAGS
ff6000003f0777d8 8254d000 0 0 1 0
In addition, I got different results with yours, and I'm not sure if they are specific issues on qemu.
VIRTUAL PHYSICAL
ff6000000874d280 8894d280
PGD: ffffffff81ccfb00 => 3ffffc01
P4D: 00000000fffff000 => 000000003ffff801
PUD: 00000000ffffe000 => 000000003ffff401
PMD: 00000000ffffd000 => 00000000222000e7
PTE: 88800000 => 0
invalid
crash> ptov 8894d280
VIRTUAL PHYSICAL
ff6000000874d280 8894d280
crash> vtop ff60000003231b80
VIRTUAL PHYSICAL
ff60000003231b80 83431b80
PGD: ffffffff81cd0b00 => 3ffffc01
P4D: 00000000fffff000 => 000000003ffff801
PUD: 00000000ffffe000 => 000000003ffff401
PMD: 00000000ffffd000 => 0000000020d000e7
PTE: 83400000 => 4b0af71c8825e2a4
!_PAGE_PRESENT
PTE
VIRTUAL PHYSICAL
ff60000003231b80 83431b80
PGD: ffffffff81cd0b00 => 3ffffc01
P4D: 00000000fffff000 => 000000003ffff801
PUD: 00000000ffffe000 => 000000003ffff401
PMD: 00000000ffffd000 => 0000000020d000e7
PTE: 83400000 => 4b0af71c8825e2a4
!_PAGE_PRESENT
PTE
But anyway, these issues can be improved with later patches, so for the v3: ACK.
Lianbo
crash> bt
PID: 113 TASK: ff6000000226c200 CPU: 0 COMMAND: "sh"
#0 [ff20000010333b90] riscv_crash_save_regs at ffffffff800078f8
#1 [ff20000010333cf0] panic at ffffffff806578c6
#2 [ff20000010333d50] sysrq_reset_seq_param_set at ffffffff8038c03c
#3 [ff20000010333da0] __handle_sysrq at ffffffff8038c604
#4 [ff20000010333e00] write_sysrq_trigger at ffffffff8038cae4
#5 [ff20000010333e20] proc_reg_write at ffffffff801b7ee8
#6 [ff20000010333e40] vfs_write at ffffffff80152bb2
#7 [ff20000010333e80] ksys_write at ffffffff80152eda
#8 [ff20000010333ed0] sys_write at ffffffff80152f52
-------
Changes V1 -> V2:
1, Do the below fixes based on HAGIO KAZUHITO's comments:
Fix build warnings,
Use MACRO for Linux version,
Add description of x86_64 binary for riscv64 in README,
Fix build error for the "sticky" target for build on x86_64,
Fix the mixed indent.
2, Add 'help -m/M' support patch to this patch set.
3, Support native compiling approach, which means the host OS distro
is also a riscv64 (lp64d) Linux, based on Yixun Lan's comments.
4, Use __riscv and __riscv_xlen instead of __riscv64__ based on Yixun Lan's comments.
Changes V2 -> V3:
1, Fix coding style, avoid including the header twice, move free() to right place,
introduce VM_FLAGS and so on based on Li Jiang's comments.
2, Adjust the implementation of riscv64_verify_symbol(refer to the logic of x86_64_verify_symbol)
as KSYMS_START isn't set when verify symbol in some case.
Xianting Tian (9):
Add RISCV64 framework code support
RISCV64: Make crash tool enter command line and support some commands
RISCV64: Add 'dis' command support
RISCV64: Add 'irq' command support
RISCV64: Add 'bt' command support
RISCV64: Add 'help -r' command support
RISCV64: Add 'help -m/M' command support
RISCV64: Add 'mach' command support
RISCV64: Add the implementation of symbol verify
Makefile | 7 +-
README | 4 +-
configure.c | 43 +-
defs.h | 252 +++++++-
diskdump.c | 21 +-
help.c | 2 +-
lkcd_vmdump_v1.h | 8 +-
lkcd_vmdump_v2_v3.h | 8 +-
netdump.c | 22 +-
ramdump.c | 2 +
riscv64.c | 1491 +++++++++++++++++++++++++++++++++++++++++++
symbols.c | 10 +
12 files changed, 1848 insertions(+), 22 deletions(-)
create mode 100644 riscv64.c
--
2.17.1
-- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility Contribution Guidelines: https://github.com/crash-utility/crash/wiki