linux-yocto/scripts/gdb/linux
Deepak Gupta cd24f44050 scripts/gdb: add lx_current support for riscv
csr_sscratch CSR holds current task_struct address when hart is in user
space.  Trap handler on entry spills csr_sscratch into "tp" (x2) register
and zeroes out csr_sscratch CSR.  Trap handler on exit reloads "tp" with
expected user mode value and place current task_struct address again in
csr_sscratch CSR.

This patch assumes "tp" is pointing to task_struct. If value in
csr_sscratch is numerically greater than "tp" then it assumes csr_sscratch
is correct address of current task_struct. This logic holds when
   - hart is in user space, "tp" will be less than csr_sscratch.
   - hart is in kernel space but not in trap handler, "tp" will be more
     than csr_sscratch (csr_sscratch being equal to 0).
   - hart is executing trap handler
       - "tp" is still pointing to user mode but csr_sscratch contains
          ptr to task_struct. Thus numerically higher.
       - "tp" is  pointing to task_struct but csr_sscratch now contains
          either 0 or numerically smaller value (transiently holds
          user mode tp)

Link: https://lkml.kernel.org/r/20231026233837.612405-1-debug@rivosinc.com
Signed-off-by: Deepak Gupta <debug@rivosinc.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
Tested-by: Hsieh-Tseng Shen <woodrow.shen@sifive.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Glenn Washburn <development@efficientek.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Jeff Xie <xiehuan09@gmail.com>
Cc: Kieran Bingham <kbingham@kernel.org>
Cc: Palmer Dabbelt <palmer@rivosinc.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2023-11-01 12:46:59 -07:00
..
__init__.py
.gitignore
clk.py scripts/gdb: bail early if there are no clocks 2023-04-08 13:45:38 -07:00
config.py scripts/gdb: change kernel config dumping method 2022-06-11 18:31:53 +09:00
constants.py.in scripts/gdb/vmalloc: add vmallocinfo support 2023-08-21 13:46:23 -07:00
cpus.py scripts/gdb: add lx_current support for riscv 2023-11-01 12:46:59 -07:00
device.py
dmesg.py scripts/gdb: fix 'lx-dmesg' on 32 bits arch 2022-07-21 15:32:52 +02:00
genpd.py scripts/gdb: bail early if there are no generic PD 2023-04-08 13:45:38 -07:00
interrupts.py scripts/gdb: print interrupts 2023-04-18 16:39:33 -07:00
lists.py scripts/gdb: fix list_for_each 2021-02-26 09:41:05 -08:00
Makefile kbuild: use always-y instead of extra-y 2021-02-16 12:01:45 +09:00
mm.py scripts/gdb/aarch64: add aarch64 page operation helper commands and configs 2023-08-21 13:46:22 -07:00
modules.py scripts/gdb/modules: add get module text support 2023-08-21 13:46:22 -07:00
page_owner.py scripts/gdb/page_owner: add page owner support 2023-08-21 13:46:23 -07:00
pgtable.py scripts/gdb/aarch64: add aarch64 page operation helper commands and configs 2023-08-21 13:46:22 -07:00
proc.py scripts/gdb: create linux/vfs.py for VFS related GDB helpers 2023-04-18 16:39:34 -07:00
radixtree.py scripts/gdb: add a Radix Tree Parser 2023-04-18 16:39:33 -07:00
rbtree.py scripts/gdb: fix python 3.8 SyntaxWarning 2020-08-12 10:58:02 -07:00
slab.py scripts/gdb/slab: add slab support 2023-08-21 13:46:23 -07:00
stackdepot.py scripts/gdb/stackdepot: add stackdepot support 2023-08-21 13:46:22 -07:00
symbols.py revert "scripts/gdb/symbols: add specific ko module load command" 2023-09-19 13:21:33 -07:00
tasks.py scripts/gdb/tasks: add headers and improve spacing format 2020-10-16 11:11:22 -07:00
timerlist.py scripts/gdb: timerlist: convert int chunks to str 2023-04-18 16:39:34 -07:00
utils.py scripts/gdb/utils: add common type usage 2023-08-21 13:46:22 -07:00
vfs.py scripts/gdb: add GDB convenience functions $lx_dentry_name() and $lx_i_dentry() 2023-04-18 16:39:35 -07:00
vmalloc.py scripts/gdb/vmalloc: add vmallocinfo support 2023-08-21 13:46:23 -07:00