From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1L86iy-0007BP-Uv for qemu-devel@nongnu.org; Thu, 04 Dec 2008 00:26:04 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1L86iy-0007Ah-7K for qemu-devel@nongnu.org; Thu, 04 Dec 2008 00:26:04 -0500 Received: from [199.232.76.173] (port=37702 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1L86iy-0007AW-3S for qemu-devel@nongnu.org; Thu, 04 Dec 2008 00:26:04 -0500 Received: from csl.cornell.edu ([128.84.224.10]:2892 helo=vlsi.csl.cornell.edu) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1L86ix-0003bs-QS for qemu-devel@nongnu.org; Thu, 04 Dec 2008 00:26:03 -0500 Received: from cacao.csl.cornell.edu (cacao.csl.cornell.edu [128.84.224.47]) by vlsi.csl.cornell.edu (8.13.4/8.13.4) with ESMTP id mB45PwfM092261 for ; Thu, 4 Dec 2008 00:26:03 -0500 (EST) Date: Thu, 4 Dec 2008 00:25:58 -0500 (EST) From: Vince Weaver Subject: Re: [Qemu-devel] [patch] gdb-stub support for Alpha In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Here's an updated version of the patch. It fixes floating point support. It still double-steps after a branch for some reason though. Vince Index: target-alpha/translate.c =================================================================== --- target-alpha/translate.c (revision 5854) +++ target-alpha/translate.c (working copy) @@ -2407,10 +2407,15 @@ * generation */ if (((ctx.pc & (TARGET_PAGE_SIZE - 1)) == 0) || - (env->singlestep_enabled) || num_insns >= max_insns) { break; } + + if (env->singlestep_enabled) { + gen_excp(&ctx, EXCP_DEBUG, 0); + break; + } + #if defined (DO_SINGLE_STEP) break; #endif Index: gdbstub.c =================================================================== --- gdbstub.c (revision 5854) +++ gdbstub.c (working copy) @@ -990,6 +990,56 @@ return 4; } +#elif defined (TARGET_ALPHA) + +#define NUM_CORE_REGS 65 + +static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n) +{ + if (n < 31) { + GET_REGL(env->ir[n]); + } + else if (n == 31) { + GET_REGL(0); + } + else if (n<63) { + uint64_t val; + + val=*((uint64_t *)&env->fir[n-32]); + GET_REGL(val); + } + else if (n==63) { + GET_REGL(env->fpcr); + } + else if (n==64) { + GET_REGL(env->pc); + } + else { + GET_REGL(0); + } + + return 0; +} + +static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n) +{ + target_ulong tmp; + tmp = ldtul_p(mem_buf); + + if (n < 31) { + env->ir[n] = tmp; + } + + if (n > 31 && n < 63) { + env->fir[n - 32] = ldfl_p(mem_buf); + } + + if (n == 64 ) { + env->pc=tmp; + } + + return 8; +} #else #define NUM_CORE_REGS 0 @@ -1277,6 +1327,8 @@ s->c_cpu->active_tc.PC = addr; #elif defined (TARGET_CRIS) s->c_cpu->pc = addr; +#elif defined (TARGET_ALPHA) + s->c_cpu->pc = addr; #endif } gdb_continue(s); @@ -1313,6 +1365,8 @@ s->c_cpu->active_tc.PC = addr; #elif defined (TARGET_CRIS) s->c_cpu->pc = addr; +#elif defined (TARGET_ALPHA) + s->c_cpu->pc = addr; #endif } cpu_single_step(s->c_cpu, sstep_flags);