mirror of
https://github.com/torvalds/linux.git
synced 2026-06-09 23:23:53 +02:00
[Based on mainline commit 502a0c775c7f0a: "ARC: pt_regs update #5"] gdbserver needs @stop_pc, served by ptrace, but fetched from pt_regs differently, based on in_brkpt_traps(), which in turn relies on additional machine state in pt_regs->event bitfield. unsigned long orig_r8:16, event:16; For big endian config, this macro was returning false, despite being in breakpoint Trap exception, causing wrong @stop_pc to be returned to gdb. Issue #1: In BE, @event above is at offset 2 in word, while a STW insn at offset 0 was used to update it. Resort to using ST insn which updates the half-word at right location. Issue #2: The union involving bitfields causes all the members to be laid out at offset 0. So with fix #1 above, ASM was now updating at offset 2, "C" code was still referencing at offset 0. Fixed by wrapping bitfield in a struct. Reported-by: Noam Camus <noamc@ezchip.com> Tested-by: Anton Kolesov <akolesov@synopsys.com> Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
||
|---|---|---|
| .. | ||
| arc_hostlink.c | ||
| arcksyms.c | ||
| asm-offsets.c | ||
| clk.c | ||
| ctx_sw_asm.S | ||
| ctx_sw.c | ||
| devtree.c | ||
| disasm.c | ||
| entry.S | ||
| fpu.c | ||
| head.S | ||
| irq.c | ||
| kgdb.c | ||
| kprobes.c | ||
| Makefile | ||
| 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 | ||