From owner-p4-projects@FreeBSD.ORG Sun Apr 25 14:05:18 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B2B3516A4D0; Sun, 25 Apr 2004 14:05:17 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 74C1D16A4CE for ; Sun, 25 Apr 2004 14:05:17 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5869543D2F for ; Sun, 25 Apr 2004 14:05:17 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i3PL5HGe064270 for ; Sun, 25 Apr 2004 14:05:17 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i3PL5G0d064267 for perforce@freebsd.org; Sun, 25 Apr 2004 14:05:16 -0700 (PDT) (envelope-from marcel@freebsd.org) Date: Sun, 25 Apr 2004 14:05:16 -0700 (PDT) Message-Id: <200404252105.i3PL5G0d064267@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 51729 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 25 Apr 2004 21:05:18 -0000 http://perforce.freebsd.org/chv.cgi?CH=51729 Change 51729 by marcel@marcel_sledge on 2004/04/25 14:05:13 Implement gdb_cpu_getreg() and gdb_cpu_regsz() accordingly. Don't implement gdb_cpu_signal() the same as on i386. It's a mistake to translate trap types to signal numbers. Affected files ... .. //depot/projects/gdb/sys/amd64/amd64/gdb_machdep.c#2 edit .. //depot/projects/gdb/sys/amd64/include/gdb_machdep.h#3 edit Differences ... ==== //depot/projects/gdb/sys/amd64/amd64/gdb_machdep.c#2 (text+ko) ==== @@ -29,7 +29,9 @@ #include #include +#include #include +#include #include #include @@ -40,73 +42,43 @@ #include -uintmax_t -gdb_cpu_getreg(int regnum, struct trapframe *tf) +void * +gdb_cpu_getreg(int regnum, size_t *regsz) { + struct trapframe *tf = kdb_frame; + + *regsz = gdb_cpu_regsz(regnum); switch (regnum) { - case GDB_REG_FP: return ((unsigned int)tf->tf_ebp); - case GDB_REG_PC: return ((unsigned int)tf->tf_eip); - case GDB_REG_SP: return ((unsigned int)tf->tf_esp); + case 0: return (&tf->tf_rax); + case 1: return (&tf->tf_rbx); + case 2: return (&tf->tf_rcx); + case 3: return (&tf->tf_rdx); + case 4: return (&tf->tf_rsi); + case 5: return (&tf->tf_rdi); + case 6: return (&tf->tf_rbp); + case 7: return (&tf->tf_rsp); + case 8: return (&tf->tf_r8); + case 9: return (&tf->tf_r9); + case 10: return (&tf->tf_r10); + case 11: return (&tf->tf_r11); + case 12: return (&tf->tf_r12); + case 13: return (&tf->tf_r13); + case 14: return (&tf->tf_r14); + case 15: return (&tf->tf_r15); + case 16: return (&tf->tf_rip); + case 17: return (&tf->tf_rflags); + case 18: return (&tf->tf_cs); + case 19: return (&tf->tf_ss); } - return (0); + return (NULL); } -ssize_t -gdb_cpu_getregs(struct trapframe *tf, void *buf, size_t bufsz) +void +gdb_cpu_setreg(int regnum, register_t val) { - struct reg *r = buf; - - if (sizeof(*r) > bufsz) - return (-1); - r->r_cs = tf->tf_cs; - r->r_ds = tf->tf_ds; - r->r_eax = tf->tf_eax; - r->r_ebp = tf->tf_ebp; - r->r_ebx = tf->tf_ebx; - r->r_ecx = tf->tf_ecx; - r->r_edi = tf->tf_edi; - r->r_edx = tf->tf_edx; - r->r_eflags = tf->tf_eflags; - r->r_eip = tf->tf_eip; - r->r_es = tf->tf_es; - r->r_esi = tf->tf_esi; - r->r_esp = tf->tf_esp; - r->r_fs = tf->tf_fs; - r->r_gs = 0; - r->r_ss = tf->tf_ss; - return (sizeof(*r)); -} + struct trapframe *tf = kdb_frame; -int -gdb_cpu_regsz(int regnum) -{ - return (4); /* XXX not really. */ -} - -void -gdb_cpu_setreg(int regnum, struct trapframe *tf, uintmax_t val) -{ switch (regnum) { - case GDB_REG_FP: tf->tf_ebp = val; break; - case GDB_REG_PC: tf->tf_eip = val; break; - case GDB_REG_SP: tf->tf_esp = val; break; + case GDB_REG_PC: tf->tf_rip = val; break; } } - -int -gdb_cpu_signal(int type, int code) -{ - return (type & ~T_USER); -} - -void -gdb_cpu_singlestep(int on, struct trapframe *tf) -{ - tf->tf_eflags &= ~PSL_T; - tf->tf_eflags |= (on) ? PSL_T : 0; -} - -void -gdb_cpu_trap(int type, int code, struct trapframe *tf) -{ -} ==== //depot/projects/gdb/sys/amd64/include/gdb_machdep.h#3 (text+ko) ==== @@ -29,14 +29,20 @@ #ifndef _MACHINE_GDB_MACHDEP_H_ #define _MACHINE_GDB_MACHDEP_H_ -#define GDB_BUFSZ 400 -#define GDB_NREGS 14 -#define GDB_REG_PC 8 +#define GDB_BUFSZ 500 +#define GDB_NREGS 56 +#define GDB_REG_PC 18 static __inline size_t -gdb_cpu_regsz(int regnum __unused) +gdb_cpu_regsz(int regnum) +{ + return ((regnum > 16 && regnum < 24) ? 4 : 8); +} + +static __inline int +gdb_cpu_signal(int type, int code __unused) { - return (sizeof(int)); + return (type); } static __inline int @@ -47,6 +53,5 @@ void *gdb_cpu_getreg(int, size_t *); void gdb_cpu_setreg(int, register_t); -int gdb_cpu_signal(int, int); #endif /* !_MACHINE_GDB_MACHDEP_H_ */