mirror of https://github.com/torvalds/linux.git
ARCompact TRAP_S insn used for breakpoints, commits before exception is taken (updating architectural PC). So ptregs->ret contains next-PC and not the breakpoint PC itself. This is different from other restartable exceptions such as TLB Miss where ptregs->ret has exact faulting PC. gdb needs to know exact-PC hence ARC ptrace GETREGSET provides for @stop_pc which returns ptregs->ret vs. EFA depending on the situation. However, writing stop_pc (SETREGSET request), which updates ptregs->ret doesn't makes sense stop_pc doesn't always correspond to that reg as described above. This was not an issue so far since user_regs->ret / user_regs->stop_pc had same value and both writing to ptregs->ret was OK, needless, but NOT broken, hence not observed. With gdb "jump", they diverge, and user_regs->ret updating ptregs is overwritten immediately with stop_pc, which this patch fixes. Reported-by: Anton Kolesov <akolesov@synopsys.com> Signed-off-by: Vineet Gupta <vgupta@synopsys.com> |
||
|---|---|---|
| .. | ||
| .gitignore | ||
| Makefile | ||
| arc_hostlink.c | ||
| arcksyms.c | ||
| asm-offsets.c | ||
| clk.c | ||
| ctx_sw.c | ||
| ctx_sw_asm.S | ||
| devtree.c | ||
| disasm.c | ||
| entry.S | ||
| fpu.c | ||
| head.S | ||
| irq.c | ||
| kgdb.c | ||
| kprobes.c | ||
| module.c | ||
| process.c | ||
| ptrace.c | ||
| reset.c | ||
| setup.c | ||
| signal.c | ||
| smp.c | ||
| stacktrace.c | ||
| sys.c | ||
| time.c | ||
| traps.c | ||
| troubleshoot.c | ||
| unaligned.c | ||
| unwind.c | ||
| vmlinux.lds.S | ||