From 40cf43eab4e4121a92ec95bc1366cc5b3bad4e27 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 1 Feb 2002 17:00:01 +0000 Subject: * So many patches have been posted recently on the mailing list and because we were unable to find correct solution to compile on various linux distros (due to rpcgen incompatibilities), and because the coding style of rdbg was rather inconsistant among various pieces of code, I decided to: 1) make some cleaning regarding global coding style (using indent + manual edits), 2) incorporate/review the paches send by various people (S. Holford, T. Strauman), 3) Fix the bug due to varying rpcgen code generation in remdeb_svc.c, 4) Remove some dead code, 5) Apply a patches enabling to call enterRdbg imediately after rdbg initialization is done, NB : the paches is huge but it is mainly due to coding styke chnages. Only few lines of codes have been really changed and they do not impact rdbg functionnality (AFAIKT). * include/rdbg/servrpc.h, include/rdbg/i386/rdbg_f.h, include/rdbg/m68k/rdbg_f.h, include/rdbg/powerpc/rdbg_f.h, src/_servtgt.c, src/awk.svc, src/excep.c, src/ptrace.c, src/rdbg.c, src/remdeb.x, src/servbkpt.c, src/servcon.c, src/servrpc.c, src/servtgt.c, src/servtsp.c, src/servutil.c, src/i386/excep_f.c, src/i386/rdbg_f.c, src/i386/any/Makefile.am, src/i386/any/remdeb.h, src/i386/any/remdeb_svc.c, src/i386/any/remdeb_xdr.c, src/m68k/excep_f.c, src/m68k/rdbg_f.c, src/m68k/any/Makefile.am, src/m68k/any/remdeb.h, src/m68k/any/remdeb_svc.c, src/m68k/any/remdeb_xdr.c, src/powerpc/excep_f.c, src/powerpc/rdbg_f.c, src/powerpc/new_exception_processing/Makefile.am, src/powerpc/new_exception_processing/remdeb.h, src/powerpc/new_exception_processing/remdeb_svc.c, src/powerpc/new_exception_processing/remdeb_xdr.c: Modified. --- c/src/librdbg/src/i386/rdbg_f.c | 213 +++++++++++++++++++++------------------- 1 file changed, 113 insertions(+), 100 deletions(-) (limited to 'c/src/librdbg/src/i386/rdbg_f.c') diff --git a/c/src/librdbg/src/i386/rdbg_f.c b/c/src/librdbg/src/i386/rdbg_f.c index b339256e70..e903309578 100644 --- a/c/src/librdbg/src/i386/rdbg_f.c +++ b/c/src/librdbg/src/i386/rdbg_f.c @@ -12,144 +12,157 @@ #include #include -#include +#include #include #include -#include -#include +#include +#include - -void -CtxToRegs (const CPU_Exception_frame* ctx, xdr_regs* regs) + void +CtxToRegs (const CPU_Exception_frame * ctx, xdr_regs * regs) { - regs->tabreg [GS] = 0; - regs->tabreg [FS] = 0; - regs->tabreg [ES] = 0; - regs->tabreg [DS] = 0; - regs->tabreg [EDI] = ctx->edi; - regs->tabreg [ESI] = ctx->esi; - regs->tabreg [EBP] = ctx->ebp; - regs->tabreg [ESP] = ctx->esp0; - regs->tabreg [EBX] = ctx->ebx; - regs->tabreg [EDX] = ctx->edx; - regs->tabreg [ECX] = ctx->ecx; - regs->tabreg [EAX] = ctx->eax; - regs->tabreg [TRAPNO] = ctx->idtIndex; - regs->tabreg [ERR] = ctx->faultCode; - regs->tabreg [EIP] = ctx->eip; - regs->tabreg [CS] = ctx->cs & 0xFFFF; - regs->tabreg [EFL] = ctx->eflags; + regs->tabreg[GS] = 0; + regs->tabreg[FS] = 0; + regs->tabreg[ES] = 0; + regs->tabreg[DS] = 0; + regs->tabreg[EDI] = ctx->edi; + regs->tabreg[ESI] = ctx->esi; + regs->tabreg[EBP] = ctx->ebp; + regs->tabreg[ESP] = ctx->esp0; + regs->tabreg[EBX] = ctx->ebx; + regs->tabreg[EDX] = ctx->edx; + regs->tabreg[ECX] = ctx->ecx; + regs->tabreg[EAX] = ctx->eax; + regs->tabreg[TRAPNO] = ctx->idtIndex; + regs->tabreg[ERR] = ctx->faultCode; + regs->tabreg[EIP] = ctx->eip; + regs->tabreg[CS] = ctx->cs & 0xFFFF; + regs->tabreg[EFL] = ctx->eflags; } - - void -RegsToCtx (const xdr_regs* regs, CPU_Exception_frame* ctx) + void +RegsToCtx (const xdr_regs * regs, CPU_Exception_frame * ctx) { - ctx->edi = regs->tabreg [EDI]; - ctx->esi = regs->tabreg [ESI]; - ctx->ebp = regs->tabreg [EBP]; - ctx->esp0 = regs->tabreg [ESP]; - ctx->ebx = regs->tabreg [EBX]; - ctx->edx = regs->tabreg [EDX]; - ctx->ecx = regs->tabreg [ECX]; - ctx->eax = regs->tabreg [EAX]; - ctx->idtIndex = regs->tabreg [TRAPNO]; - ctx->faultCode = regs->tabreg [ERR]; - ctx->eip = regs->tabreg [EIP]; - ctx->cs = regs->tabreg [CS]; - ctx->eflags = regs->tabreg [EFL]; + ctx->edi = regs->tabreg[EDI]; + ctx->esi = regs->tabreg[ESI]; + ctx->ebp = regs->tabreg[EBP]; + ctx->esp0 = regs->tabreg[ESP]; + ctx->ebx = regs->tabreg[EBX]; + ctx->edx = regs->tabreg[EDX]; + ctx->ecx = regs->tabreg[ECX]; + ctx->eax = regs->tabreg[EAX]; + ctx->idtIndex = regs->tabreg[TRAPNO]; + ctx->faultCode = regs->tabreg[ERR]; + ctx->eip = regs->tabreg[EIP]; + ctx->cs = regs->tabreg[CS]; + ctx->eflags = regs->tabreg[EFL]; } -void -get_ctx_thread( Thread_Control *thread, CPU_Exception_frame* ctx) + void +get_ctx_thread (Thread_Control * thread, CPU_Exception_frame * ctx) { - ctx->edi = thread->Registers.edi; - ctx->esi = thread->Registers.esi; - ctx->ebp = (unsigned32)(thread->Registers.ebp); - ctx->esp0 = (unsigned32)(thread->Registers.esp); - ctx->ebx = thread->Registers.ebx; - ctx->edx = 0; - ctx->ecx = 0; - ctx->eax = 0; - ctx->idtIndex = 0; - ctx->faultCode = 0; - ctx->eip = *(unsigned int*)(thread->Registers.esp); - ctx->cs = 0; - ctx->eflags = thread->Registers.eflags; + ctx->edi = thread->Registers.edi; + ctx->esi = thread->Registers.esi; + ctx->ebp = (unsigned32) (thread->Registers.ebp); + ctx->esp0 = (unsigned32) (thread->Registers.esp); + ctx->ebx = thread->Registers.ebx; + ctx->edx = 0; + ctx->ecx = 0; + ctx->eax = 0; + ctx->idtIndex = 0; + ctx->faultCode = 0; + ctx->eip = *(unsigned int *) (thread->Registers.esp); + ctx->cs = 0; + ctx->eflags = thread->Registers.eflags; } -void -set_ctx_thread( Thread_Control *thread, CPU_Exception_frame* ctx) + void +set_ctx_thread (Thread_Control * thread, CPU_Exception_frame * ctx) { thread->Registers.edi = ctx->edi; - thread->Registers.esi = ctx->esi; - thread->Registers.ebp = (void*)(ctx->ebp); - thread->Registers.esp = (void*)(ctx->esp0); - thread->Registers.ebx = ctx->ebx; - thread->Registers.eflags = ctx->eflags; + thread->Registers.esi = ctx->esi; + thread->Registers.ebp = (void *) (ctx->ebp); + thread->Registers.esp = (void *) (ctx->esp0); + thread->Registers.ebx = ctx->ebx; + thread->Registers.eflags = ctx->eflags; } - - -int -Single_Step(CPU_Exception_frame* ctx) + int +Single_Step (CPU_Exception_frame * ctx) { - /* Check if not already set */ - if ((ctx->eflags & EFLAGS_TF) != 0 || ExitForSingleStep != 0) { - /* Check coherency */ + /* + * Check if not already set + */ + if ((ctx->eflags & EFLAGS_TF) != 0 || ExitForSingleStep != 0) { + /* + * Check coherency + */ assert ((ctx->eflags & EFLAGS_TF) != 0); assert (ExitForSingleStep != 0); return 0; } - ctx->eflags |= EFLAGS_TF; /* eflags */ + ctx->eflags |= EFLAGS_TF; /* eflags */ ++ExitForSingleStep; - + return 0; } - int -CheckForSingleStep (CPU_Exception_frame* ctx) + int +CheckForSingleStep (CPU_Exception_frame * ctx) { - if (ExitForSingleStep) { - /* - * This functions can be called both from - * INT1 and INT3 handlers. In case it is - * called from INT3, need to clear TF. - */ - ctx->eflags &= ~EFLAGS_TF; - ExitForSingleStep = 0; - return 1; - } - return 0; + if (ExitForSingleStep) { + /* + * This functions can be called both from + * INT1 and INT3 handlers. In case it is + * called from INT3, need to clear TF. + */ + ctx->eflags &= ~EFLAGS_TF; + ExitForSingleStep = 0; + return 1; + } + return 0; } -void -CancelSingleStep (CPU_Exception_frame* ctx) + void +CancelSingleStep (CPU_Exception_frame * ctx) { - /* Cancel scheduled SS */ - ctx->eflags &= ~EFLAGS_TF; - ExitForSingleStep-- ; + /* + * Cancel scheduled SS + */ + ctx->eflags &= ~EFLAGS_TF; + ExitForSingleStep--; } -cpuExcHandlerType old_currentExcHandler; -extern void rtems_exception_prologue_50(); +static cpuExcHandlerType old_currentExcHandler; +extern void rtems_exception_prologue_50 (); -void connect_rdbg_exception() + void +connect_rdbg_exception () { - interrupt_gate_descriptor *currentIdtEntry; - unsigned limit; - unsigned level; + interrupt_gate_descriptor *currentIdtEntry; + unsigned limit; + unsigned level; /* * Connect the Exception used to debug */ i386_get_info_from_IDTR (¤tIdtEntry, &limit); - - _CPU_ISR_Disable(level); - create_interrupt_gate_descriptor (¤tIdtEntry[50], rtems_exception_prologue_50); - _CPU_ISR_Enable(level); - old_currentExcHandler = _currentExcHandler; - _currentExcHandler = BreakPointExcHdl ; + _CPU_ISR_Disable (level); + create_interrupt_gate_descriptor (¤tIdtEntry[50], + rtems_exception_prologue_50); + _CPU_ISR_Enable (level); + if (_currentExcHandler != BreakPointExcHdl) { + old_currentExcHandler = _currentExcHandler; + _currentExcHandler = BreakPointExcHdl; + } +} + + void +disconnect_rdbg_exception () +{ + if (_currentExcHandler == BreakPointExcHdl) { + _currentExcHandler = old_currentExcHandler; + } } -- cgit v1.2.3