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
On Sat, Aug 13, 2022 at 11:18 AM Xianting Tian <
xianting.tian(a)linux.alibaba.com> 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.tia...
> [ 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=r...
> ]
> 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.
crash> vtop ff6000000874d280
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
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