plan to add kdb support for ARM/XScale architecture support
Keith Owens
kaos at sgi.com
Tue Dec 3 13:50:20 PST 2002
On Wed, 4 Dec 2002 01:45:12 +0800 ,
"Dong, Edie" <edie.dong at intel.com> wrote:
> I am planning to add Xscale architecture support for KDB, I
>want to fully use the XScale HW debug unit to enable the instruction break
>point and data breakpoint as well as the trace buffer enabling. Of course I
>am going to make it have limited feature support for ARMV4 architecture
>system.
> Does any body have any suggestion or comments? Or is there
>anybody already devoted to this area?
The latest kdb patches for IA64 are the best starting point, the ix86
patch is more intrusive. ftp://oss.sgi.com/projects/kdb/download/v2.5/
kdb-v2.5-2.4.19-common-1 and kdb-v2.5-2.4.19-ia64-020821-1. You will
need a kdb-v2.5-2.4.19-arm-1 patch containing patches against these
areas.
include/asm-$(ARCH):
kdb.h
Define KDB_ENTER() and various _fmt strings.
kdbprivate.h
Replace everything. Long jump support is the hardest, you can
start with #undef KDB_HAVE_LONGJMP and add long jump later. It is
used for breaking out of long output and recovery from kdb internal
errors, such as accessing invalid addresses.
arch/$(ARCH):
kernel/traps.c
Hook into die_if_kernel(), debug handlers etc. Also NMI if supported.
kernel/smp.c
KDB uses IPI or the equivalent to interrupt other processors. If
the IPI can be sent unmaskable, do so.
config.in, Makefile
Add kdb options.
kdb/*.[ch]
All the arch dependent code needs to be reworked. Ignore
kdba_prologue() for now, IA64 did not fit the prologue framework
which is why the code has lots of FIXME comments.
kdba_bt decodes the calling sequence. Unwinding the calling frame
is tricky, especially when the kernel uses out of line sections for
locks. IA64 uses unwind data, ix86 has heuristics based on the way
that gcc generates code.
kdba_bp implements hardware and software breakpoints.
kdba_io has to do IO without using interrupts, kdb disables all
interrupts on all cpus.
kdba_id handles the high level disassembler work. Most of the work
is done by the code extracted from gdb.
A large chunk of arch/$(ARCH)/kdb is the dissassembler code lifted
from gdb and modified as little as possible to fit the kernel.
More information about the kdb
mailing list