From f0b6832824d1c1ac4151e3c57ae7f7e6c7cd1518 Mon Sep 17 00:00:00 2001 From: obrien Date: Sun, 30 Jun 2002 04:47:43 +0000 Subject: Dike out bits specific to i386. This pretty much means no kgdb for non-i386 platforms. I would however like to see a shared file here. If a function or two cannot be shared we should create ${TARGET_ARCH}/kvm-fbsd-${TARGET_ARCH}.c. --- gnu/usr.bin/binutils/gdb/kvm-fbsd.c | 44 ++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'gnu') diff --git a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c index 3e7f121..e9250ed 100644 --- a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c +++ b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c @@ -52,11 +52,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #endif #include -#if __FreeBSD_version >= 500032 && defined(i386) #define _KERNEL #include #undef _KERNEL +#include + static void kcore_files_info PARAMS ((struct target_ops *)); static void kcore_close PARAMS ((int)); @@ -113,8 +114,8 @@ static struct kinfo_proc * kvm_getprocs PARAMS ((int cfd, int op, extern struct target_ops kcore_ops; /* Forward decl */ /* Non-zero means we are debugging a kernel core file */ -int kernel_debugging = 0; -int kernel_writablecore = 0; +int kernel_debugging; +int kernel_writablecore; static char *core_file; static int core_kd = -1; @@ -176,7 +177,7 @@ struct frame_info *fr; switch (frametype) { case tf_normal: return (this_saved_pc); - +#ifdef __i386__ #define oEIP offsetof(struct trapframe, tf_eip) case tf_trap: @@ -188,6 +189,7 @@ struct frame_info *fr; case tf_syscall: return (read_memory_integer (fr->frame + 8 + oEIP, 4)); #undef oEIP +#endif } } @@ -897,16 +899,28 @@ kvtophys (fd, addr) current_ptd = PTD; } else +#ifdef __i386__ current_ptd = pcb.pcb_cr3; +#else + assert(0); +#endif /* * Read the first-level page table (ptd). */ +#ifdef __i386__ v = current_ptd + ( (unsigned)addr >> PDRSHIFT) * sizeof pte; +#else + v = current_ptd + ( (unsigned)addr ) * sizeof pte; +#endif if (physrd (fd, v, (char *)&pte, sizeof pte) < 0 || (pte&PG_V) == 0) return (~0); +#ifdef __i386__ if (pte & PG_PS) +#else + if (pte ) +#endif { /* * No second-level page table; ptd describes one 4MB page. @@ -914,7 +928,11 @@ kvtophys (fd, addr) * it cr0, and that the kernel doesn't support 36-bit physical * addresses). */ +#ifdef __i386__ #define PAGE4M_MASK (NBPDR - 1) +#else +#define PAGE4M_MASK 0 +#endif #define PG_FRAME4M (~PAGE4M_MASK) addr = (pte & PG_FRAME4M) + (addr & PAGE4M_MASK); } @@ -923,11 +941,19 @@ kvtophys (fd, addr) /* * Read the second-level page table. */ +#ifdef __i386__ v = (pte&PG_FRAME) + ((addr >> PAGE_SHIFT)&(NPTEPG-1)) * sizeof pte; +#else + v = (pte ) + ((addr >> PAGE_SHIFT)&(NPTEPG-1)) * sizeof pte; +#endif if (physrd (fd, v, (char *) &pte, sizeof (pte)) < 0 || (pte&PG_V) == 0) return (~0); +#ifdef __i386__ addr = (pte & PG_FRAME) + (addr & PAGE_MASK); +#else + addr = (pte ) + (addr & PAGE_MASK); +#endif } #if 0 printf ("vtophys (%x) -> %x\n", oldaddr, addr); @@ -967,15 +993,19 @@ read_pcb (fd, uaddr) noreg = 0; for (i = 0; i < 3; ++i) /* eax,ecx,edx */ supply_register (i, (char *)&noreg); +#ifdef __i386__ supply_register (3, (char *)&pcb.pcb_ebx); supply_register (SP_REGNUM, (char *)&pcb.pcb_esp); supply_register (FP_REGNUM, (char *)&pcb.pcb_ebp); supply_register (6, (char *)&pcb.pcb_esi); supply_register (7, (char *)&pcb.pcb_edi); supply_register (PC_REGNUM, (char *)&pcb.pcb_eip); +#endif for (i = 9; i < 14; ++i) /* eflags, cs, ss, ds, es, fs */ supply_register (i, (char *)&noreg); +#ifdef __i386__ supply_register (15, (char *)&pcb.pcb_gs); +#endif /* XXX 80387 registers? */ } @@ -1024,14 +1054,9 @@ kernel_core_file_hook (fd, addr, buf, len) static struct target_ops kcore_ops; -#else -int kernel_debugging = 0; -#endif - void _initialize_kcorelow() { -#if __FreeBSD_version >= 500032 && defined(i386) kcore_ops.to_shortname = "kcore"; kcore_ops.to_longname = "Kernel core dump file"; kcore_ops.to_doc = @@ -1053,5 +1078,4 @@ _initialize_kcorelow() add_target (&kcore_ops); add_com ("proc", class_obscure, set_proc_cmd, "Set current process context"); add_com ("cpu", class_obscure, set_cpu_cmd, "Set current cpu"); -#endif } -- cgit v1.1