mirror-linux/arch/arm64/include/asm
Sumit Garg a8897bffca arm64: kgdb: Set PSTATE.SS to 1 to re-enable single-step
[ Upstream commit af6c0bd59f ]

Currently only the first attempt to single-step has any effect. After
that all further stepping remains "stuck" at the same program counter
value.

Refer to the ARM Architecture Reference Manual (ARM DDI 0487E.a) D2.12,
PSTATE.SS=1 should be set at each step before transferring the PE to the
'Active-not-pending' state. The problem here is PSTATE.SS=1 is not set
since the second single-step.

After the first single-step, the PE transferes to the 'Inactive' state,
with PSTATE.SS=0 and MDSCR.SS=1, thus PSTATE.SS won't be set to 1 due to
kernel_active_single_step()=true. Then the PE transferes to the
'Active-pending' state when ERET and returns to the debugger by step
exception.

Before this patch:
==================
Entering kdb (current=0xffff3376039f0000, pid 1) on processor 0 due to Keyboard Entry
[0]kdb>

[0]kdb>
[0]kdb> bp write_sysrq_trigger
Instruction(i) BP #0 at 0xffffa45c13d09290 (write_sysrq_trigger)
    is enabled   addr at ffffa45c13d09290, hardtype=0 installed=0

[0]kdb> go
$ echo h > /proc/sysrq-trigger

Entering kdb (current=0xffff4f7e453f8000, pid 175) on processor 1 due to Breakpoint @ 0xffffad651a309290
[1]kdb> ss

Entering kdb (current=0xffff4f7e453f8000, pid 175) on processor 1 due to SS trap @ 0xffffad651a309294
[1]kdb> ss

Entering kdb (current=0xffff4f7e453f8000, pid 175) on processor 1 due to SS trap @ 0xffffad651a309294
[1]kdb>

After this patch:
=================
Entering kdb (current=0xffff6851c39f0000, pid 1) on processor 0 due to Keyboard Entry
[0]kdb> bp write_sysrq_trigger
Instruction(i) BP #0 at 0xffffc02d2dd09290 (write_sysrq_trigger)
    is enabled   addr at ffffc02d2dd09290, hardtype=0 installed=0

[0]kdb> go
$ echo h > /proc/sysrq-trigger

Entering kdb (current=0xffff6851c53c1840, pid 174) on processor 1 due to Breakpoint @ 0xffffc02d2dd09290
[1]kdb> ss

Entering kdb (current=0xffff6851c53c1840, pid 174) on processor 1 due to SS trap @ 0xffffc02d2dd09294
[1]kdb> ss

Entering kdb (current=0xffff6851c53c1840, pid 174) on processor 1 due to SS trap @ 0xffffc02d2dd09298
[1]kdb> ss

Entering kdb (current=0xffff6851c53c1840, pid 174) on processor 1 due to SS trap @ 0xffffc02d2dd0929c
[1]kdb>

Fixes: 44679a4f14 ("arm64: KGDB: Add step debugging support")
Co-developed-by: Wei Li <liwei391@huawei.com>
Signed-off-by: Wei Li <liwei391@huawei.com>
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Tested-by: Douglas Anderson <dianders@chromium.org>
Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
Tested-by: Daniel Thompson <daniel.thompson@linaro.org>
Link: https://lore.kernel.org/r/20230202073148.657746-3-sumit.garg@linaro.org
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-05-11 23:03:16 +09:00
..
stacktrace arm64: stacktrace: track hyp stacks in unwinder's address space 2022-09-09 12:30:08 +01:00
vdso arm64: vdso: use SYS_CNTVCTSS_EL0 for gettimeofday 2022-09-09 12:27:25 +01:00
xen arm/xen: Introduce xen_setup_dma_ops() 2022-06-06 08:54:33 +02:00
Kbuild arm64/sysreg: Enable automatic generation of system register definitions 2022-05-04 15:30:28 +01:00
acenv.h
acpi.h Revert "ACPI: Add memory semantics to acpi_os_map_memory()" 2021-09-23 20:39:36 +02:00
alternative-macros.h arm64: alternatives: Use vdso/bits.h instead of linux/bits.h 2022-10-05 10:44:44 +01:00
alternative.h
apple_m1_pmu.h drivers/perf: Add Apple icestorm/firestorm CPU PMU driver 2022-03-08 13:32:48 +00:00
arch_gicv3.h irqchip/gic-v3: Refactor ISB + EOIR at ack time 2022-05-15 16:38:25 +01:00
arch_timer.h arm64: Add CNT{P,V}CTSS_EL0 alternatives to cnt{p,v}ct_el0 2021-10-19 10:56:20 +01:00
archrandom.h random: handle archrandom with multiple longs 2022-07-25 13:26:14 +02:00
arm-cci.h
arm_dsu_pmu.h
asm-bug.h bug: Use normal relative pointers in 'struct bug_entry' 2022-05-19 23:46:10 +02:00
asm-extable.h arm64: extable: cleanup redundant extable type EX_TYPE_FIXUP 2022-06-28 12:11:47 +01:00
asm-offsets.h
asm-prototypes.h kasan: arm64: support specialized outlined tag mismatch checks 2021-05-26 23:31:26 +01:00
asm-uaccess.h arm64: extable: make uaaccess helper use extable type EX_TYPE_UACCESS_ERR_ZERO 2022-06-28 12:11:47 +01:00
asm_pointer_auth.h arm64/sysreg: Add _EL1 into ID_AA64ISAR2_EL1 definition names 2022-07-05 11:45:46 +01:00
assembler.h Merge branch 'for-next/alternatives' into for-next/core 2022-09-30 09:18:22 +01:00
atomic.h locking/atomic: make ARCH_ATOMIC a Kconfig symbol 2021-05-26 13:20:49 +02:00
atomic_ll_sc.h arm64: cmpxchg_double*: hazard against entire exchange variable 2023-01-18 11:58:11 +01:00
atomic_lse.h arm64: cmpxchg_double*: hazard against entire exchange variable 2023-01-18 11:58:11 +01:00
barrier.h arm64: kcsan: Support detecting more missing memory barriers 2022-06-23 18:34:59 +01:00
bitops.h include: move find.h from asm_generic to linux 2022-01-15 08:47:31 -08:00
bitrev.h
boot.h
brk-imm.h arm64: Add CFI error handling 2022-09-26 10:13:14 -07:00
bug.h
cache.h arm64: cache: Remove unused CTR_CACHE_MINLINE_MASK 2022-09-09 10:59:02 +01:00
cacheflush.h arm64: mm: Remove assembly DMA cache maintenance wrappers 2022-07-05 13:06:31 +01:00
checksum.h
clocksource.h
cmpxchg.h arm64: atomics: lse: Dereference matching size 2022-01-20 09:13:48 +00:00
compat.h asm-generic: compat: Cleanup duplicate definitions 2022-04-26 13:35:54 -07:00
compiler.h cfi: Use __builtin_function_start 2022-04-13 12:16:00 -07:00
cpu.h arm64/sme: Expose SMIDR through sysfs 2022-06-23 18:22:44 +01:00
cpu_ops.h arm64: cpuidle: remove generic cpuidle support 2022-06-23 14:19:33 +01:00
cpufeature.h Merge branch 'for-next/alternatives' into for-next/core 2022-09-30 09:18:22 +01:00
cpuidle.h arm64: cpuidle: remove generic cpuidle support 2022-06-23 14:19:33 +01:00
cputype.h arm64: Fix bit-shifting UB in the MIDR_CPU_MODEL() macro 2022-11-09 09:51:39 +00:00
current.h
daifflags.h arm64: entry: always set GIC_PRIO_PSR_I_SET during entry 2021-05-05 18:13:58 +01:00
dcc.h
debug-monitors.h arm64: kgdb: Set PSTATE.SS to 1 to re-enable single-step 2023-05-11 23:03:16 +09:00
device.h
dmi.h
efi.h arm64: efi: Make efi_rt_lock a raw_spinlock 2023-03-11 13:55:43 +01:00
el2_setup.h arm64/sysreg: Add _EL1 into ID_AA64DFR0_EL1 definition names 2022-09-16 12:38:57 +01:00
elf.h arm64: exec: Adjust affinity for compat tasks with mismatched 32-bit EL0 2021-08-20 12:33:06 +02:00
esr.h S390: 2022-05-26 14:20:14 -07:00
exception.h Merge branch 'for-next/misc' into for-next/core 2022-09-30 09:18:26 +01:00
exec.h
extable.h arm64/bpf: Remove 128MB limit for BPF JIT programs 2021-11-08 22:16:26 +01:00
fb.h
fixmap.h arm64: entry: simplify trampoline data page 2022-06-24 13:08:30 +01:00
fpsimd.h arm64/sme: Don't flush SVE register state when allocating SME storage 2022-08-23 11:29:11 +01:00
fpsimdmacros.h arm64/sme: Implement ZA context switching 2022-04-22 18:51:02 +01:00
ftrace.h treewide: Drop function_nocfi 2022-09-26 10:13:14 -07:00
futex.h arm64: extable: add a dedicated uaccess handler 2021-10-21 10:45:22 +01:00
gpr-num.h arm64: gpr-num: support W registers 2021-10-21 10:45:22 +01:00
hardirq.h
hugetlb.h mm: hugetlb: kill set_huge_swap_pte_at() 2022-07-03 18:08:50 -07:00
hw_breakpoint.h arm64/sysreg: Add _EL1 into ID_AA64DFR0_EL1 definition names 2022-09-16 12:38:57 +01:00
hwcap.h arm64/sysreg: Add hwcap for SVE EBF16 2022-09-06 18:53:52 +01:00
hyp_image.h
hyperv-tlfs.h PCI: hv: Add arm64 Hyper-V vPCI support 2022-01-12 08:24:29 -06:00
hypervisor.h arm/arm64: Probe for the presence of KVM hypervisor 2021-03-31 09:16:55 +01:00
image.h
insn-def.h arm64: move AARCH64_BREAK_FAULT into insn-def.h 2022-02-22 21:25:48 +00:00
insn.h arm64: Add LDR (literal) instruction 2022-07-11 21:04:58 +02:00
io.h asm-generic: updates for 6.0 2022-08-05 10:07:23 -07:00
irq.h arm64: irq: allow FIQs to be handled 2021-03-24 20:19:30 +00:00
irq_work.h arm64: smp: Add missing prototype for some smp.c functions 2021-03-29 10:41:42 +01:00
irqflags.h arm64: Always keep DAIF.[IF] in sync 2021-03-24 20:19:30 +00:00
jump_label.h
kasan.h
kernel-pgtable.h arm64: mm: Reserve enough pages for the initial ID map 2022-09-01 12:02:39 +01:00
kexec.h kexec: drop weak attribute from functions 2022-07-15 12:21:16 -04:00
kfence.h set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
kgdb.h
kprobes.h kprobes: treewide: Make it harder to refer kretprobe_trampoline directly 2021-09-30 21:24:06 -04:00
kvm_arm.h Merge branch kvm-arm64/aarch32-idreg-trap into kvmarm-master/next 2022-05-04 09:42:45 +01:00
kvm_asm.h KVM: arm64: Prepare non-protected nVHE hypervisor stacktrace 2022-07-26 10:49:27 +01:00
kvm_emulate.h KVM: arm64: Fix S1PTW handling on RO memslots 2023-01-18 11:58:10 +01:00
kvm_host.h KVM: arm64: Avoid lock inversion when setting the VM register width 2023-05-11 23:03:03 +09:00
kvm_hyp.h arm64: Add support of PAuth QARMA3 architected algorithm 2022-02-25 13:38:52 +00:00
kvm_mmu.h arm64: alternatives: have callbacks take a cap 2022-09-16 17:15:03 +01:00
kvm_mte.h KVM: arm64: Save/restore MTE registers 2021-06-22 14:08:05 +01:00
kvm_pgtable.h KVM: arm64: Work out supported block level at compile time 2022-10-09 02:33:49 +01:00
kvm_pkvm.h KVM: arm64: Move host EL1 code out of hyp/ directory 2021-12-06 08:37:03 +00:00
kvm_ptrauth.h
kvm_ras.h KVM: arm64: Treat ESR_EL2 as a 64-bit register 2022-04-29 19:26:27 +01:00
kvm_types.h
linkage.h arm64: Add types to indirect called assembly functions 2022-09-26 10:13:13 -07:00
lse.h arm64: alternatives: add alternative_has_feature_*() 2022-09-16 17:15:03 +01:00
memory.h - The usual batches of cleanups from Baoquan He, Muchun Song, Miaohe 2022-08-05 16:32:45 -07:00
mman.h arm64/mm: enable ARCH_HAS_VM_GET_PAGE_PROT 2022-04-28 23:16:13 -07:00
mmu.h arm64: Add missing include of asm/cpufeature.h to asm/mmu.h 2021-12-06 08:37:03 +00:00
mmu_context.h treewide: Drop function_nocfi 2022-09-26 10:13:14 -07:00
mmzone.h
module.h Merge branches 'for-next/doc', 'for-next/sve', 'for-next/sysreg', 'for-next/gettimeofday', 'for-next/stacktrace', 'for-next/atomics', 'for-next/el1-exceptions', 'for-next/a510-erratum-2658417', 'for-next/defconfig', 'for-next/tpidr2_el0' and 'for-next/ftrace', remote-tracking branch 'arm64/for-next/perf' into for-next/core 2022-09-30 09:17:57 +01:00
module.lds.h arm64: module: remove (NOLOAD) from linker script 2022-02-25 14:06:50 +00:00
mshyperv.h arm64: hyperv: Add Hyper-V hypercall and register access utilities 2021-08-04 16:54:36 +00:00
mte-def.h arm64: mte: Define the number of bytes for storing the tags in a page 2022-02-15 22:53:29 +00:00
mte-kasan.h printk: stop including cache.h from printk.h 2022-05-13 07:20:07 -07:00
mte.h arm64: mte: Fix/clarify the PG_mte_tagged semantics 2023-03-11 13:55:44 +01:00
neon-intrinsics.h
neon.h
numa.h
page-def.h
page.h arm64/mm: drop HAVE_ARCH_PFN_VALID 2021-10-01 14:54:45 +01:00
paravirt.h
paravirt_api_clock.h sched/headers: Add initial new headers as identity mappings 2022-02-23 10:58:28 +01:00
patching.h arm64: insn: decouple patching from insn code 2021-06-11 11:19:27 +01:00
pci.h asm-generic: Add new pci.h and use it 2022-07-22 17:34:57 -05:00
percpu.h printk: stop including cache.h from printk.h 2022-05-13 07:20:07 -07:00
perf_event.h arm64: perf: Consistently make all event numbers as 16-bits 2022-03-08 11:41:03 +00:00
pgalloc.h arm64: mm: Fix VM_BUG_ON(mm != &init_mm) for trans_pgd 2021-11-16 10:12:57 +00:00
pgtable-hwdef.h arm64/mm: use GENMASK_ULL for TTBR_BADDR_MASK_52 2022-07-19 19:29:04 +01:00
pgtable-prot.h arm64/mm: move protection_map[] inside the platform 2022-07-17 17:14:37 -07:00
pgtable-types.h
pgtable.h arm64: mte: Fix/clarify the PG_mte_tagged semantics 2023-03-11 13:55:44 +01:00
pointer_auth.h arm64: move preemption disablement to prctl handlers 2021-07-28 18:33:49 +01:00
preempt.h arm64: Support PREEMPT_DYNAMIC 2022-02-19 11:11:09 +01:00
probes.h
proc-fns.h
processor.h arm64: make is_ttbrX_addr() noinstr-safe 2022-12-31 13:32:56 +01:00
ptdump.h arm64: Add __init section marker to some functions 2021-04-08 17:45:10 +01:00
ptrace.h arm64: fix compat syscall return truncation 2021-08-03 10:35:03 +01:00
pvclock-abi.h
rwonce.h arm64: Do not include __READ_ONCE() block in assembly files 2022-03-09 21:56:50 +00:00
scs.h arm64: Always load shadow stack pointer directly from the task struct 2023-05-11 23:02:59 +09:00
sdei.h arm64: stacktrace: move SDEI stack helpers to stacktrace code 2022-09-09 12:30:07 +01:00
seccomp.h
sections.h arm64: entry: Allow the trampoline text to occupy multiple pages 2022-02-15 17:40:28 +00:00
set_memory.h set_memory: allow querying whether set_direct_map_*() is actually enabled 2021-07-08 11:48:20 -07:00
setup.h arm64: fix rodata=full 2022-08-23 11:02:02 +01:00
shmparam.h
signal.h
signal32.h
simd.h arm64: replace in_irq() with in_hardirq() 2021-08-20 19:49:38 +01:00
smp.h arm64: smp: remove stack from secondary_data 2021-05-26 22:45:46 +01:00
smp_plat.h arm64: Add missing header <asm/smp.h> in two files 2021-07-12 13:37:34 +01:00
sparsemem.h arm64: Force SPARSEMEM_VMEMMAP as the only memory management model 2021-04-23 14:18:21 +01:00
spectre.h Merge branch 'for-next/spectre-bhb' into for-next/core 2022-03-14 19:08:31 +00:00
spinlock.h
spinlock_types.h locking: Allow to include asm/spinlock_types.h from linux/spinlock_types_raw.h 2021-12-07 15:14:12 +01:00
stack_pointer.h
stackprotector.h
stacktrace.h arm64: efi: Account for the EFI runtime stack in stack unwinder 2023-02-01 08:34:35 +01:00
stage2_pgtable.h KVM: arm64: Limit stage2_apply_range() batch size to largest block 2022-10-09 02:33:49 +01:00
stat.h
string.h Revert "arm64: Mitigate MTE issues with str{n}cmp()" 2022-03-07 21:57:02 +00:00
suspend.h
sync_bitops.h
syscall.h arch: remove unused function syscall_set_arguments() 2021-09-14 16:06:20 +02:00
syscall_wrapper.h arm64/syscall: Include asm/ptrace.h in syscall_wrapper header. 2022-11-09 09:52:25 +00:00
sysreg.h Char/Misc and other driver changes for 6.1-rc1 2022-10-08 08:56:37 -07:00
system_misc.h arm64: die(): pass 'err' as long 2022-09-16 12:17:03 +01:00
thread_info.h arm64/sme: Implement SVCR context switching 2022-04-22 18:50:58 +01:00
timex.h
tlb.h arm64: tlb: fix the TTL value of tlb_get_level 2021-06-23 14:52:57 +01:00
tlbflush.h arm64: mm: Fix TLBI vs ASID rollover 2021-08-06 13:52:03 +01:00
topology.h arm64, topology: enable use of init_cpu_capacity_cppc() 2022-03-10 20:21:58 +01:00
trans_pgd.h arm64: trans_pgd: remove trans_pgd_map_page() 2021-10-01 13:31:01 +01:00
traps.h arm64: Treat ESR_ELx as a 64-bit register 2022-04-29 19:26:27 +01:00
uaccess.h arm64: uaccess: simplify uaccess_mask_ptr() 2022-09-23 14:39:20 +01:00
unistd.h fs: stat: compat: Add __ARCH_WANT_COMPAT_STAT 2022-04-26 13:35:45 -07:00
unistd32.h mm/mempolicy: wire up syscall set_mempolicy_home_node 2022-01-15 16:30:30 +02:00
uprobes.h
vdso.h arm64: alternative: patch alternatives in the vDSO 2022-09-09 12:27:25 +01:00
vectors.h arm64: fix clang warning about TRAMP_VALIAS 2022-03-18 13:48:28 +00:00
vermagic.h
virt.h arm64: Save state of HCR_EL2.E2H before switch to EL1 2022-07-01 15:22:51 +01:00
vmalloc.h kasan, vmalloc, arm64: mark vmalloc mappings as pgprot_tagged 2022-03-24 19:06:47 -07:00
vmap_stack.h kasan, arm64: reset pointer tags of vmapped stacks 2022-03-24 19:06:47 -07:00
word-at-a-time.h arm64: extable: add load_unaligned_zeropad() handler 2021-10-21 10:45:22 +01:00
xor.h lib/xor: make xor prototypes more friendly to compiler vectorization 2022-02-11 20:39:39 +11:00