Changeset View
Changeset View
Standalone View
Standalone View
devel/gdb/files/kgdb/sparc64fbsd-kern.c
Show First 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | |||||
#include "kgdb.h" | #include "kgdb.h" | ||||
#ifdef __sparc64__ | #ifdef __sparc64__ | ||||
static void | static void | ||||
sparc64fbsd_supply_pcb(struct regcache *regcache, CORE_ADDR pcb_addr) | sparc64fbsd_supply_pcb(struct regcache *regcache, CORE_ADDR pcb_addr) | ||||
{ | { | ||||
struct pcb pcb; | struct pcb pcb; | ||||
if (target_read_memory(pcb_addr, (gdb_byte *)&pcb, sizeof(pcb)) != 0) | if (target_read_memory(pcb_addr, &pcb, sizeof(pcb)) != 0) | ||||
memset(&pcb, 0, sizeof(pcb)); | memset(&pcb, 0, sizeof(pcb)); | ||||
regcache_raw_supply(regcache, SPARC_SP_REGNUM, (char *)&pcb.pcb_sp); | regcache_raw_supply(regcache, SPARC_SP_REGNUM, (char *)&pcb.pcb_sp); | ||||
sparc_supply_rwindow(regcache, pcb.pcb_sp, -1); | sparc_supply_rwindow(regcache, pcb.pcb_sp, -1); | ||||
regcache_raw_supply(regcache, SPARC64_PC_REGNUM, (char *)&pcb.pcb_pc); | regcache_raw_supply(regcache, SPARC64_PC_REGNUM, (char *)&pcb.pcb_pc); | ||||
pcb.pcb_pc += 4; | pcb.pcb_pc += 4; | ||||
regcache_raw_supply(regcache, SPARC64_NPC_REGNUM, (char *)&pcb.pcb_pc); | regcache_raw_supply(regcache, SPARC64_NPC_REGNUM, (char *)&pcb.pcb_pc); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 180 Lines • ▼ Show 20 Lines | case SPARC_O7_REGNUM: | ||||
ofs = offsetof(struct trapframe, tf_out) + | ofs = offsetof(struct trapframe, tf_out) + | ||||
(regnum - SPARC_O0_REGNUM) * 8; | (regnum - SPARC_O0_REGNUM) * 8; | ||||
break; | break; | ||||
default: | default: | ||||
if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) { | if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) { | ||||
ofs = (regnum - SPARC_L0_REGNUM) * 8; | ofs = (regnum - SPARC_L0_REGNUM) * 8; | ||||
*addrp = cache->sp + BIAS + ofs; | *addrp = cache->sp + BIAS + ofs; | ||||
*lvalp = lval_memory; | *lvalp = lval_memory; | ||||
target_read_memory(*addrp, (gdb_byte *)valuep, regsz); | target_read_memory(*addrp, valuep, regsz); | ||||
} | } | ||||
return; | return; | ||||
} | } | ||||
*addrp = cache->fp + ofs; | *addrp = cache->fp + ofs; | ||||
*lvalp = lval_memory; | *lvalp = lval_memory; | ||||
target_read_memory(*addrp, (gdb_byte *)valuep, regsz); | target_read_memory(*addrp, valuep, regsz); | ||||
} | } | ||||
static const struct frame_unwind kgdb_trgt_trapframe_unwind = { | static const struct frame_unwind kgdb_trgt_trapframe_unwind = { | ||||
UNKNOWN_FRAME, | UNKNOWN_FRAME, | ||||
&kgdb_trgt_trapframe_this_id, | &kgdb_trgt_trapframe_this_id, | ||||
&kgdb_trgt_trapframe_prev_register | &kgdb_trgt_trapframe_prev_register | ||||
}; | }; | ||||
Show All 38 Lines | |||||
void | void | ||||
_initialize_sparc64_kgdb_tdep(void) | _initialize_sparc64_kgdb_tdep(void) | ||||
{ | { | ||||
gdbarch_register_osabi_sniffer(bfd_arch_sparc, | gdbarch_register_osabi_sniffer(bfd_arch_sparc, | ||||
bfd_target_elf_flavour, | bfd_target_elf_flavour, | ||||
fbsd_kernel_osabi_sniffer); | fbsd_kernel_osabi_sniffer); | ||||
gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9, | gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9, | ||||
GDB_OSABI_FREEBSD_ELF_KERNEL, sparc64fbsd_kernel_init_abi); | GDB_OSABI_FREEBSD_KERNEL, sparc64fbsd_kernel_init_abi); | ||||
} | } | ||||