diff options
Diffstat (limited to 'c/src/librdbg/src/powerpc')
-rw-r--r-- | c/src/librdbg/src/powerpc/excep_f.c | 233 | ||||
-rw-r--r-- | c/src/librdbg/src/powerpc/new_exception_processing/Makefile.am | 2 | ||||
-rw-r--r-- | c/src/librdbg/src/powerpc/new_exception_processing/remdeb.h | 155 | ||||
-rw-r--r-- | c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c | 34 | ||||
-rw-r--r-- | c/src/librdbg/src/powerpc/new_exception_processing/remdeb_xdr.c | 103 | ||||
-rw-r--r-- | c/src/librdbg/src/powerpc/rdbg_f.c | 216 |
6 files changed, 330 insertions, 413 deletions
diff --git a/c/src/librdbg/src/powerpc/excep_f.c b/c/src/librdbg/src/powerpc/excep_f.c index 13adcd1e67..b821f39c1d 100644 --- a/c/src/librdbg/src/powerpc/excep_f.c +++ b/c/src/librdbg/src/powerpc/excep_f.c @@ -17,32 +17,35 @@ #include <rdbg/rdbg.h> #include <rdbg/servrpc.h> - int -ExcepToSig (Exception_context *ctx) + int +ExcepToSig (Exception_context * ctx) { int excep = getExcNum (ctx); - + switch (excep) { - case ASM_FLOAT_VECTOR : return SIGFPE; - - case ASM_TRACE_VECTOR : - case ASM_PROG_VECTOR : - case ASM_SYS_VECTOR : return SIGTRAP; - - case ASM_ISI_VECTOR : return SIGSEGV; - - case ASM_RESET_VECTOR : - case ASM_MACH_VECTOR : - case ASM_EXT_VECTOR : - case ASM_ALIGN_VECTOR : return SIGILL; - - default: - break; - } - return SIGKILL; + case ASM_FLOAT_VECTOR: + return SIGFPE; + + case ASM_TRACE_VECTOR: + case ASM_PROG_VECTOR: + case ASM_SYS_VECTOR: + return SIGTRAP; + + case ASM_ISI_VECTOR: + return SIGSEGV; + + case ASM_RESET_VECTOR: + case ASM_MACH_VECTOR: + case ASM_EXT_VECTOR: + case ASM_ALIGN_VECTOR: + return SIGILL; + + default: + break; + } + return SIGKILL; } - /*----- Breakpoint Exception management -----*/ /* @@ -51,134 +54,124 @@ ExcepToSig (Exception_context *ctx) */ void -BreakPointExcHdl(CPU_Exception_frame *ctx) +BreakPointExcHdl (CPU_Exception_frame * ctx) { rtems_status_code status; rtems_id continueSemId; - /* T. Straumann, 1/16/2002: we must re-enable the floating point engine - * if the interrupted thread is FP. Otherwise, - * the semaphore primitives may crash when they - * try to save FP context while switching this - * thread... + /* + * we must re-enable the floating point engine + * if the interrupted thread is FP. Otherwise, + * the semaphore primitives may crash when they + * try to save FP context while switching this + * thread... NB : deferred fp context switching + * would 1) avoid to have to save FP, make this code + * obsolete. */ - if (ctx->EXC_SRR1 & 0x2000) { - register unsigned long msr; - __asm__ __volatile__("mfmsr %0":"=r"(msr)); - __asm__ __volatile__("mtmsr %0"::"r"(msr|MSR_FP)); + if (ctx->EXC_SRR1 & MSR_FP) { + register unsigned long msr; + __asm__ __volatile__ ("mfmsr %0":"=r" (msr)); + __asm__ __volatile__ ("mtmsr %0"::"r" (msr | MSR_FP)); } - if ( (justSaveContext) && (ctx->_EXC_number == ASM_SYS_VECTOR) ) { + if ((justSaveContext) && (ctx->_EXC_number == ASM_SYS_VECTOR)) { PushSavedExceptCtx (_Thread_Executing->Object.id, ctx); justSaveContext = 0; - } - else { - if (ctx->_EXC_number != ASM_TRACE_VECTOR){ + } else { + if (ctx->_EXC_number != ASM_TRACE_VECTOR) { NbSerializedCtx++; - rtems_semaphore_obtain(serializeSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT); + rtems_semaphore_obtain (serializeSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT); NbSerializedCtx--; } - + currentTargetThread = _Thread_Executing->Object.id; #ifdef DDEBUG - printk("----------------------------------------------------------\n"); - printk("Exception %d caught at PC %x by thread %d\n", - ctx->_EXC_number, - ctx->EXC_SRR0, - _Thread_Executing->Object.id); - printk("----------------------------------------------------------\n"); - printk("Processor execution context at time of the fault was :\n"); - printk("----------------------------------------------------------\n"); - printk("\t R0 = %x\n", ctx->GPR0); - printk("\t R1 = %x\n", ctx->GPR1); - printk("\t R2 = %x\n", ctx->GPR2); - printk("\t R3 = %x\n", ctx->GPR3); - printk("\t R4 = %x\n", ctx->GPR4); - printk("\t R5 = %x\n", ctx->GPR5); - printk("\t R6 = %x\n", ctx->GPR6); - printk("\t R7 = %x\n", ctx->GPR7); - printk("\t R8 = %x\n", ctx->GPR8); - printk("\t R9 = %x\n", ctx->GPR9); - printk("\t R10 = %x\n", ctx->GPR10); - printk("\t R11 = %x\n", ctx->GPR11); - printk("\t R12 = %x\n", ctx->GPR12); - printk("\t R13 = %x\n", ctx->GPR13); - printk("\t R14 = %x\n", ctx->GPR14); - printk("\t R15 = %x\n", ctx->GPR15); - printk("\t R16 = %x\n", ctx->GPR16); - printk("\t R17 = %x\n", ctx->GPR17); - printk("\t R18 = %x\n", ctx->GPR18); - printk("\t R19 = %x\n", ctx->GPR19); - printk("\t R20 = %x\n", ctx->GPR20); - printk("\t R21 = %x\n", ctx->GPR21); - printk("\t R22 = %x\n", ctx->GPR22); - printk("\t R23 = %x\n", ctx->GPR23); - printk("\t R24 = %x\n", ctx->GPR24); - printk("\t R25 = %x\n", ctx->GPR25); - printk("\t R26 = %x\n", ctx->GPR26); - printk("\t R27 = %x\n", ctx->GPR27); - printk("\t R28 = %x\n", ctx->GPR28); - printk("\t R29 = %x\n", ctx->GPR29); - printk("\t R30 = %x\n", ctx->GPR30); - printk("\t R31 = %x\n", ctx->GPR31); - printk("\t CR = %x\n", ctx->EXC_CR); - printk("\t CTR = %x\n", ctx->EXC_CTR); - printk("\t XER = %x\n", ctx->EXC_XER); - printk("\t LR = %x\n", ctx->EXC_LR); - printk("\t MSR = %x\n", ctx->EXC_SRR1); + printk ("----------------------------------------------------------\n"); + printk ("Exception %d caught at PC %x by thread %d\n", + ctx->_EXC_number, ctx->EXC_SRR0, _Thread_Executing->Object.id); + printk ("----------------------------------------------------------\n"); + printk ("Processor execution context at time of the fault was :\n"); + printk ("----------------------------------------------------------\n"); + printk ("\t R0 = %x\n", ctx->GPR0); + printk ("\t R1 = %x\n", ctx->GPR1); + printk ("\t R2 = %x\n", ctx->GPR2); + printk ("\t R3 = %x\n", ctx->GPR3); + printk ("\t R4 = %x\n", ctx->GPR4); + printk ("\t R5 = %x\n", ctx->GPR5); + printk ("\t R6 = %x\n", ctx->GPR6); + printk ("\t R7 = %x\n", ctx->GPR7); + printk ("\t R8 = %x\n", ctx->GPR8); + printk ("\t R9 = %x\n", ctx->GPR9); + printk ("\t R10 = %x\n", ctx->GPR10); + printk ("\t R11 = %x\n", ctx->GPR11); + printk ("\t R12 = %x\n", ctx->GPR12); + printk ("\t R13 = %x\n", ctx->GPR13); + printk ("\t R14 = %x\n", ctx->GPR14); + printk ("\t R15 = %x\n", ctx->GPR15); + printk ("\t R16 = %x\n", ctx->GPR16); + printk ("\t R17 = %x\n", ctx->GPR17); + printk ("\t R18 = %x\n", ctx->GPR18); + printk ("\t R19 = %x\n", ctx->GPR19); + printk ("\t R20 = %x\n", ctx->GPR20); + printk ("\t R21 = %x\n", ctx->GPR21); + printk ("\t R22 = %x\n", ctx->GPR22); + printk ("\t R23 = %x\n", ctx->GPR23); + printk ("\t R24 = %x\n", ctx->GPR24); + printk ("\t R25 = %x\n", ctx->GPR25); + printk ("\t R26 = %x\n", ctx->GPR26); + printk ("\t R27 = %x\n", ctx->GPR27); + printk ("\t R28 = %x\n", ctx->GPR28); + printk ("\t R29 = %x\n", ctx->GPR29); + printk ("\t R30 = %x\n", ctx->GPR30); + printk ("\t R31 = %x\n", ctx->GPR31); + printk ("\t CR = %x\n", ctx->EXC_CR); + printk ("\t CTR = %x\n", ctx->EXC_CTR); + printk ("\t XER = %x\n", ctx->EXC_XER); + printk ("\t LR = %x\n", ctx->EXC_LR); + printk ("\t MSR = %x\n", ctx->EXC_SRR1); #endif - status = rtems_semaphore_create (rtems_build_name('D', 'B', 'G', 'c'), - 0, - RTEMS_FIFO | - RTEMS_COUNTING_SEMAPHORE | - RTEMS_NO_INHERIT_PRIORITY | - RTEMS_NO_PRIORITY_CEILING | - RTEMS_LOCAL, - 0, - &continueSemId); + status = rtems_semaphore_create (rtems_build_name ('D', 'B', 'G', 'c'), + 0, + RTEMS_FIFO | + RTEMS_COUNTING_SEMAPHORE | + RTEMS_NO_INHERIT_PRIORITY | + RTEMS_NO_PRIORITY_CEILING | + RTEMS_LOCAL, 0, &continueSemId); if (status != RTEMS_SUCCESSFUL) - rtems_panic ("Can't create continue semaphore: `%s'\n",rtems_status_text(status)); + rtems_panic ("Can't create continue semaphore: `%s'\n", + rtems_status_text (status)); PushExceptCtx (_Thread_Executing->Object.id, continueSemId, ctx); - - switch (ctx->_EXC_number){ - case ASM_TRACE_VECTOR : - DPRINTF((" TRACE EXCEPTION !!!\n")); + + switch (ctx->_EXC_number) { + case ASM_TRACE_VECTOR: + DPRINTF ((" TRACE EXCEPTION !!!\n")); ctx->EXC_SRR1 &= ~MSR_SE; - ExitForSingleStep-- ; - rtems_semaphore_release( wakeupEventSemId ); - break; + ExitForSingleStep--; + rtems_semaphore_release (wakeupEventSemId); + break; - case ASM_PROG_VECTOR : - DPRINTF((" BREAKPOINT EXCEPTION !!!\n")); - rtems_semaphore_release( wakeupEventSemId ); - break; + case ASM_PROG_VECTOR: + DPRINTF ((" BREAKPOINT EXCEPTION !!!\n")); + rtems_semaphore_release (wakeupEventSemId); + break; - case ASM_SYS_VECTOR : - DPRINTF((" ENTER RDBG !!!\n")); - rtems_semaphore_release( wakeupEventSemId ); + case ASM_SYS_VECTOR: + DPRINTF ((" ENTER RDBG !!!\n")); + rtems_semaphore_release (wakeupEventSemId); break; default: - DPRINTF((" OTHER EXCEPTION !!!\n")); -#ifdef DDEBUG - { extern void BSP_printStackTrace(); - BSP_printStackTrace(ctx); - } -#endif - rtems_semaphore_release( wakeupEventSemId ); + DPRINTF ((" OTHER EXCEPTION !!!\n")); + rtems_semaphore_release (wakeupEventSemId); break; } - rtems_semaphore_obtain(continueSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT); - + rtems_semaphore_obtain (continueSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT); + PopExceptCtx (_Thread_Executing->Object.id); - rtems_semaphore_delete(continueSemId); + rtems_semaphore_delete (continueSemId); } - } - - - diff --git a/c/src/librdbg/src/powerpc/new_exception_processing/Makefile.am b/c/src/librdbg/src/powerpc/new_exception_processing/Makefile.am index 7ff7edceee..6f72c853bf 100644 --- a/c/src/librdbg/src/powerpc/new_exception_processing/Makefile.am +++ b/c/src/librdbg/src/powerpc/new_exception_processing/Makefile.am @@ -71,6 +71,8 @@ if RPCTOOLS -o powerpc/new_exception_processing/tmpSvc.c remdeb.x; \ $(AWK) -f ./awk.svc THEPROG="remdeb.h" powerpc/new_exception_processing/tmpSvc.c \ > powerpc/new_exception_processing/remdeb_svc.c; \ + $(SED) -e 's/fprintf.*,/printf(/' powerpc/new_exception_processing/remdeb_svc.c; > powerpc/new_exception_processing/remdeb_svc.tmp; \ + mv powerpc/new_exception_processing/remdeb_svc.tmp powerpc/new_exception_processing/remdeb_svc.c; \ rm -f powerpc/new_exception_processing/tmpSvc.c ) endif diff --git a/c/src/librdbg/src/powerpc/new_exception_processing/remdeb.h b/c/src/librdbg/src/powerpc/new_exception_processing/remdeb.h index ebbb44eaa1..07f50eed15 100644 --- a/c/src/librdbg/src/powerpc/new_exception_processing/remdeb.h +++ b/c/src/librdbg/src/powerpc/new_exception_processing/remdeb.h @@ -16,7 +16,7 @@ extern "C" { #define RTEMS_PORT 2071 #define RTEMS_BACK_PORT 2073 #ifndef REMDEB_H -#define RPCGENSRVNAME(a) a +#define RPCGENSRVNAME(a) a enum rpc_type { SUNRPC = 0, @@ -99,62 +99,62 @@ struct xdr_regs { typedef struct xdr_regs xdr_regs; /* now define register macros to apply to xdr_regs struct */ -#define R_PC 0 -#define R_MSR 1 -#define R_EXCEPNB 2 -#define R_R0 3 -#define R_R1 (R_R0 + 1) -#define R_R2 (R_R0 + 2) -#define R_R3 (R_R0 + 3) -#define R_R4 (R_R0 + 4) -#define R_R5 (R_R0 + 5) -#define R_R6 (R_R0 + 6) -#define R_R7 (R_R0 + 7) -#define R_R8 (R_R0 + 8) -#define R_R9 (R_R0 + 9) -#define R_R10 (R_R0 + 10) -#define R_R11 (R_R0 + 11) -#define R_R12 (R_R0 + 12) -#define R_R13 (R_R0 + 13) -#define R_R14 (R_R0 + 14) -#define R_R15 (R_R0 + 15) -#define R_R16 (R_R0 + 16) -#define R_R17 (R_R0 + 17) -#define R_R18 (R_R0 + 18) -#define R_R19 (R_R0 + 19) -#define R_R20 (R_R0 + 20) -#define R_R21 (R_R0 + 21) -#define R_R22 (R_R0 + 22) -#define R_R23 (R_R0 + 23) -#define R_R24 (R_R0 + 24) -#define R_R25 (R_R0 + 25) -#define R_R26 (R_R0 + 26) -#define R_R27 (R_R0 + 27) -#define R_R28 (R_R0 + 28) -#define R_R29 (R_R0 + 29) -#define R_R30 (R_R0 + 30) -#define R_R31 (R_R0 + 31) -#define R_CR 35 -#define R_CTR 36 -#define R_XER 37 -#define R_LR 38 -#define R_MQ 39 +#define R_PC 0 +#define R_MSR 1 +#define R_EXCEPNB 2 +#define R_R0 3 +#define R_R1 (R_R0 + 1) +#define R_R2 (R_R0 + 2) +#define R_R3 (R_R0 + 3) +#define R_R4 (R_R0 + 4) +#define R_R5 (R_R0 + 5) +#define R_R6 (R_R0 + 6) +#define R_R7 (R_R0 + 7) +#define R_R8 (R_R0 + 8) +#define R_R9 (R_R0 + 9) +#define R_R10 (R_R0 + 10) +#define R_R11 (R_R0 + 11) +#define R_R12 (R_R0 + 12) +#define R_R13 (R_R0 + 13) +#define R_R14 (R_R0 + 14) +#define R_R15 (R_R0 + 15) +#define R_R16 (R_R0 + 16) +#define R_R17 (R_R0 + 17) +#define R_R18 (R_R0 + 18) +#define R_R19 (R_R0 + 19) +#define R_R20 (R_R0 + 20) +#define R_R21 (R_R0 + 21) +#define R_R22 (R_R0 + 22) +#define R_R23 (R_R0 + 23) +#define R_R24 (R_R0 + 24) +#define R_R25 (R_R0 + 25) +#define R_R26 (R_R0 + 26) +#define R_R27 (R_R0 + 27) +#define R_R28 (R_R0 + 28) +#define R_R29 (R_R0 + 29) +#define R_R30 (R_R0 + 30) +#define R_R31 (R_R0 + 31) +#define R_CR 35 +#define R_CTR 36 +#define R_XER 37 +#define R_LR 38 +#define R_MQ 39 #include <libcpu/raw_exception.h> -#define REG_PC tabreg[R_PC] /* PC register offset */ -#define REG_SP tabreg[R_R1] /* SP register offset */ -#define REG_FP tabreg[R_R1] /* SP register offset (no FP on PPC) */ -#define BREAK_SIZE 4 /* Breakpoint occupies 4 bytes */ -#define BREAK_ADJ 0 /* Nothing to subtract from address after bp */ -#define IS_BREAK(l) ((l) == 0x7d8d6808) -#define SET_BREAK(l) (0x7d8d6808) +#define REG_PC tabreg[R_PC] /* PC register offset */ +#define REG_SP tabreg[R_R1] /* SP register offset */ +#define REG_FP tabreg[R_R1] /* SP register offset (no FP on PPC) */ +#define BREAK_SIZE 4 /* Breakpoint occupies 4 bytes */ +#define BREAK_ADJ 0 /* Nothing to subtract from address after bp */ +#define IS_BREAK(l) ((l) == 0x7d8d6808) +#define SET_BREAK(l) (0x7d8d6808) #define ORG_BREAK(c,p) (p) -#define IS_STEP(regs) (regs.tabreg[R_EXCEPNB] == ASM_TRACE_VECTOR) /* Was step and not break */ -#define TARGET_PROC_TYPE 3 +#define IS_STEP(regs) (regs.tabreg[R_EXCEPNB] == ASM_TRACE_VECTOR) /* Was step and not break */ +#define TARGET_PROC_TYPE 3 #define MAXDEBUGGEE 150 #define NAMEMAX 17 - /* + /* * Memory data for read/write text or data. The size is in data. The target * addr is in the addr field. * Be careful before modifying because this value goes into internal @@ -250,40 +250,9 @@ typedef struct { u_int CHAR_DATA_len; char *CHAR_DATA_val; } CHAR_DATA; -#define XRY_MAX_INST_BUFF 128 -#define XRY_MAX_INSTANCES 16 -#ifndef XRY_MAX_CMD_STR -#define XRY_MAX_CMD_STR 320 -#endif /* REMDEB_H */ - -struct xry_inst { - u_char flags; - u_char type; - u_char sub_type; - u_char res_type; - u_long value; - u_long value2; -}; -typedef struct xry_inst xry_inst; - -struct instance { - struct xry_inst instances[XRY_MAX_INSTANCES]; - u_char buffer[XRY_MAX_INST_BUFF]; -}; -typedef struct instance instance; - -struct instance_union { - bool_t instances; - union { - instance inst; - char *buffer; - } instance_union_u; -}; -typedef struct instance_union instance_union; typedef char *one_arg; -#define XRY_MAX_OBJ_NAME 32 - /* now open_connex() routine which establishes a connection to server */ + /* now open_connex() routine which establishes a connection to server */ enum debug_type { DEBTYP_PROCESS = 0, @@ -292,7 +261,7 @@ enum debug_type { DEBTYP_OTHER = 3, }; typedef enum debug_type debug_type; -#define DEBUGGER_IS_GDB 0x2 /* */ +#define DEBUGGER_IS_GDB 0x2 /* */ struct open_in { u_char back_port[16]; @@ -312,7 +281,7 @@ struct open_out { u_short server_vers; }; typedef struct open_out open_out; - /* now close_connex() routine which detaches from server */ + /* now close_connex() routine which detaches from server */ enum close_control { CLOSE_IGNORE = 0, @@ -325,7 +294,7 @@ struct close_in { close_control control; }; typedef struct close_in close_in; - /* now send_signal() routine which sends signals to processes like kill(2) */ + /* now send_signal() routine which sends signals to processes like kill(2) */ struct signal_in { int pid; @@ -338,7 +307,7 @@ struct signal_out { int errNo; }; typedef struct signal_out signal_out; - /* now wait_info() routine which returns results of polling the wait status + /* now wait_info() routine which returns results of polling the wait status of a process/actor. It may return 0 if running, else pid or -1 */ enum stop_code { @@ -373,8 +342,8 @@ struct wait_out { u_long thread; }; typedef struct wait_out wait_out; - /* now ptrace() routine. This matches the Sun UNIX ptrace as well as - some additions */ + /* now ptrace() routine. This matches the Sun UNIX ptrace as well as + some additions */ #define PTRFLG_FORCE 1 #define PTRFLG_NON_OWNER 2 #define PTRFLG_FREE 4 @@ -442,7 +411,7 @@ struct get_signal_names_out { all_signals signals; }; typedef struct get_signal_names_out get_signal_names_out; - /* now define the actual calls we support */ + /* now define the actual calls we support */ #define REMDEB_H #endif @@ -508,9 +477,6 @@ extern bool_t xdr_thread_list (XDR *, thread_list*); extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in*); extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out*); extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA*); -extern bool_t xdr_xry_inst (XDR *, xry_inst*); -extern bool_t xdr_instance (XDR *, instance*); -extern bool_t xdr_instance_union (XDR *, instance_union*); extern bool_t xdr_one_arg (XDR *, one_arg*); extern bool_t xdr_debug_type (XDR *, debug_type*); extern bool_t xdr_open_in (XDR *, open_in*); @@ -547,9 +513,6 @@ extern bool_t xdr_thread_list (); extern bool_t xdr_ptrace_addr_data_in (); extern bool_t xdr_ptrace_addr_data_out (); extern bool_t xdr_CHAR_DATA (); -extern bool_t xdr_xry_inst (); -extern bool_t xdr_instance (); -extern bool_t xdr_instance_union (); extern bool_t xdr_one_arg (); extern bool_t xdr_debug_type (); extern bool_t xdr_open_in (); diff --git a/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c b/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c index e06aef7620..88c15cc708 100644 --- a/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c +++ b/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c @@ -6,7 +6,7 @@ #include <bsp.h> #include <rdbg/servrpc.h> #include <rdbg/remdeb.h> -#define fprintf(fp, ...) printf(__VA_ARGS__) +#define printf(c) /*HEADER_START*/ #define RTEMS_PORT 2071 #define RTEMS_BACK_PORT 2073 @@ -14,30 +14,28 @@ * Sun request values for the remote ptrace system call */ - /* + /* * Memory data for read/write text or data. The size is in data. The target * addr is in the addr field. * Be careful before modifying because this value goes into internal * pipes and is allocated on stack too. Pipes and/or the stack could * become too small if this value gets incremented. */ -#ifndef XRY_MAX_CMD_STR -#endif /* REMDEB_H */ - /* now open_connex() routine which establishes a connection to server */ -#define DEBUGGER_IS_GDB 0x2 /* */ - /* now close_connex() routine which detaches from server */ - /* now send_signal() routine which sends signals to processes like kill(2) */ - /* now wait_info() routine which returns results of polling the wait status + /* now open_connex() routine which establishes a connection to server */ +#define DEBUGGER_IS_GDB 0x2 /* */ + /* now close_connex() routine which detaches from server */ + /* now send_signal() routine which sends signals to processes like kill(2) */ + /* now wait_info() routine which returns results of polling the wait status of a process/actor. It may return 0 if running, else pid or -1 */ - /* now ptrace() routine. This matches the Sun UNIX ptrace as well as - some additions */ - /* now define the actual calls we support */ + /* now ptrace() routine. This matches the Sun UNIX ptrace as well as + some additions */ + /* now define the actual calls we support */ const char* names [] = { - "NULLPROC", "OPEN_CONNEX", "SEND_SIGNAL", "name3", - "name4", "name5", "name6", "name7", - "name8", "name9", "CLOSE_CONNEX", "PTRACE", - "name12", "WAIT_INFO", "name14", "name15", - "name16", "GET_SIGNAL_NAMES", "name18" + "NULLPROC", "OPEN_CONNEX", "SEND_SIGNAL", "name3", + "name4", "name5", "name6", "name7", + "name8", "name9", "CLOSE_CONNEX", "PTRACE", + "name12", "WAIT_INFO", "name14", "name15", + "name16", "GET_SIGNAL_NAMES", "name18" }; void @@ -115,7 +113,7 @@ remotedeb_2(struct svc_req *rqstp, register SVCXPRT *transp) svcerr_systemerr (transp); } if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument)) { - fprintf (stderr, "%s", "unable to free arguments"); + printf( "unable to free arguments"); exit (1); } return; diff --git a/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_xdr.c b/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_xdr.c index 45a41ae35e..defadeca19 100644 --- a/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_xdr.c +++ b/c/src/librdbg/src/powerpc/new_exception_processing/remdeb_xdr.c @@ -97,7 +97,7 @@ xdr_xdr_regs (XDR *xdrs, xdr_regs *objp) return FALSE; return TRUE; } - /* + /* * Memory data for read/write text or data. The size is in data. The target * addr is in the addr field. * Be careful before modifying because this value goes into internal @@ -105,16 +105,16 @@ xdr_xdr_regs (XDR *xdrs, xdr_regs *objp) * become too small if this value gets incremented. */ bool_t xdr_xdr_mem(xdrs, objp) - XDR *xdrs; - struct xdr_mem *objp; + XDR *xdrs; + struct xdr_mem *objp; { - if (!xdr_u_long(xdrs, &objp->addr)) { - return (FALSE); - } - if (!xdr_u_int(xdrs, &objp->dataNb)) { - return(FALSE); - } - return (xdr_opaque(xdrs, objp->data, objp->dataNb)); + if (!xdr_u_long(xdrs, &objp->addr)) { + return (FALSE); + } + if (!xdr_u_int(xdrs, &objp->dataNb)) { + return(FALSE); + } + return (xdr_opaque(xdrs, objp->data, objp->dataNb)); } bool_t @@ -262,11 +262,11 @@ xdr_KernThread (XDR *xdrs, KernThread *objp) return TRUE; } bool_t xdr_thread_list(xdrs, objp) - XDR *xdrs; - struct thread_list *objp; + XDR *xdrs; + struct thread_list *objp; { - return (xdr_array(xdrs, (char**)&objp->threads, &objp->nbThread, - UTHREAD_MAX, sizeof(KernThread), xdr_KernThread)); + return (xdr_array(xdrs, (char**)&objp->threads, &objp->nbThread, + UTHREAD_MAX, sizeof(KernThread), xdr_KernThread)); } bool_t @@ -386,65 +386,6 @@ xdr_CHAR_DATA (XDR *xdrs, CHAR_DATA *objp) return FALSE; return TRUE; } -#ifndef XRY_MAX_CMD_STR -#endif /* REMDEB_H */ - -bool_t -xdr_xry_inst (XDR *xdrs, xry_inst *objp) -{ - register int32_t *buf; - - if (!xdr_u_char (xdrs, &objp->flags)) - return FALSE; - if (!xdr_u_char (xdrs, &objp->type)) - return FALSE; - if (!xdr_u_char (xdrs, &objp->sub_type)) - return FALSE; - if (!xdr_u_char (xdrs, &objp->res_type)) - return FALSE; - if (!xdr_u_long (xdrs, &objp->value)) - return FALSE; - if (!xdr_u_long (xdrs, &objp->value2)) - return FALSE; - return TRUE; -} - -bool_t -xdr_instance (XDR *xdrs, instance *objp) -{ - register int32_t *buf; - - int i; - if (!xdr_vector (xdrs, (char *)objp->instances, XRY_MAX_INSTANCES, - sizeof (xry_inst), (xdrproc_t) xdr_xry_inst)) - return FALSE; - if (!xdr_vector (xdrs, (char *)objp->buffer, XRY_MAX_INST_BUFF, - sizeof (u_char), (xdrproc_t) xdr_u_char)) - return FALSE; - return TRUE; -} - -bool_t -xdr_instance_union (XDR *xdrs, instance_union *objp) -{ - register int32_t *buf; - - if (!xdr_bool (xdrs, &objp->instances)) - return FALSE; - switch (objp->instances) { - case TRUE: - if (!xdr_instance (xdrs, &objp->instance_union_u.inst)) - return FALSE; - break; - case FALSE: - if (!xdr_string (xdrs, &objp->instance_union_u.buffer, XRY_MAX_CMD_STR)) - return FALSE; - break; - default: - return FALSE; - } - return TRUE; -} bool_t xdr_one_arg (XDR *xdrs, one_arg *objp) @@ -455,7 +396,7 @@ xdr_one_arg (XDR *xdrs, one_arg *objp) return FALSE; return TRUE; } - /* now open_connex() routine which establishes a connection to server */ + /* now open_connex() routine which establishes a connection to server */ bool_t xdr_debug_type (XDR *xdrs, debug_type *objp) @@ -466,7 +407,7 @@ xdr_debug_type (XDR *xdrs, debug_type *objp) return FALSE; return TRUE; } -#define DEBUGGER_IS_GDB 0x2 /* */ +#define DEBUGGER_IS_GDB 0x2 /* */ bool_t xdr_open_in (XDR *xdrs, open_in *objp) @@ -573,7 +514,7 @@ xdr_open_out (XDR *xdrs, open_out *objp) return FALSE; return TRUE; } - /* now close_connex() routine which detaches from server */ + /* now close_connex() routine which detaches from server */ bool_t xdr_close_control (XDR *xdrs, close_control *objp) @@ -594,7 +535,7 @@ xdr_close_in (XDR *xdrs, close_in *objp) return FALSE; return TRUE; } - /* now send_signal() routine which sends signals to processes like kill(2) */ + /* now send_signal() routine which sends signals to processes like kill(2) */ bool_t xdr_signal_in (XDR *xdrs, signal_in *objp) @@ -619,7 +560,7 @@ xdr_signal_out (XDR *xdrs, signal_out *objp) return FALSE; return TRUE; } - /* now wait_info() routine which returns results of polling the wait status + /* now wait_info() routine which returns results of polling the wait status of a process/actor. It may return 0 if running, else pid or -1 */ bool_t @@ -744,8 +685,8 @@ xdr_wait_out (XDR *xdrs, wait_out *objp) return FALSE; return TRUE; } - /* now ptrace() routine. This matches the Sun UNIX ptrace as well as - some additions */ + /* now ptrace() routine. This matches the Sun UNIX ptrace as well as + some additions */ bool_t xdr_ptrace_in (XDR *xdrs, ptrace_in *objp) @@ -925,4 +866,4 @@ xdr_get_signal_names_out (XDR *xdrs, get_signal_names_out *objp) return FALSE; return TRUE; } - /* now define the actual calls we support */ + /* now define the actual calls we support */ diff --git a/c/src/librdbg/src/powerpc/rdbg_f.c b/c/src/librdbg/src/powerpc/rdbg_f.c index 6149b5d426..3cdfc26579 100644 --- a/c/src/librdbg/src/powerpc/rdbg_f.c +++ b/c/src/librdbg/src/powerpc/rdbg_f.c @@ -12,109 +12,108 @@ #include <assert.h> #include <errno.h> -#include <rdbg/reg.h> +#include <rdbg/reg.h> #include <rdbg/remdeb.h> #include <rdbg/rdbg.h> -#include <rtems/score/cpu.h> -#include <rtems/score/thread.h> +#include <rtems/score/cpu.h> +#include <rtems/score/thread.h> #include <libcpu/cpu.h> -void -CtxToRegs (const CPU_Exception_frame* ctx, xdr_regs* regs) + void +CtxToRegs (const CPU_Exception_frame * ctx, xdr_regs * regs) { - * ((CPU_Exception_frame*) regs) = *ctx; + *((CPU_Exception_frame *) regs) = *ctx; } - - void -RegsToCtx (const xdr_regs* regs, CPU_Exception_frame* ctx) + void +RegsToCtx (const xdr_regs * regs, CPU_Exception_frame * ctx) { - *ctx = * ((CPU_Exception_frame*) regs); + *ctx = *((CPU_Exception_frame *) regs); } -void -get_ctx_thread( Thread_Control *thread, CPU_Exception_frame* ctx) + void +get_ctx_thread (Thread_Control * thread, CPU_Exception_frame * ctx) { unsigned int *ptr; unsigned int i; - - ctx->EXC_SRR0 = thread->Registers.pc; - ctx->EXC_SRR1 = thread->Registers.msr; + + ctx->EXC_SRR0 = thread->Registers.pc; + ctx->EXC_SRR1 = thread->Registers.msr; ctx->_EXC_number = 0xdeadbeef; - - ctx->GPR1 = thread->Registers.gpr1; - ctx->GPR2 = thread->Registers.gpr2; + + ctx->GPR1 = thread->Registers.gpr1; + ctx->GPR2 = thread->Registers.gpr2; /* * Fill with dummy values... */ ptr = &ctx->GPR3; for (i = 0; i < 10; i++) - ptr [i] = 0xdeadbeef; - - ctx->GPR13 = thread->Registers.gpr13; - ctx->GPR14 = thread->Registers.gpr14; - ctx->GPR15 = thread->Registers.gpr15; - ctx->GPR16 = thread->Registers.gpr16; - ctx->GPR17 = thread->Registers.gpr17; - ctx->GPR18 = thread->Registers.gpr18; - ctx->GPR19 = thread->Registers.gpr19; - ctx->GPR20 = thread->Registers.gpr20; - ctx->GPR21 = thread->Registers.gpr21; - ctx->GPR22 = thread->Registers.gpr22; - ctx->GPR23 = thread->Registers.gpr23; - ctx->GPR24 = thread->Registers.gpr24; - ctx->GPR25 = thread->Registers.gpr25; - ctx->GPR26 = thread->Registers.gpr26; - ctx->GPR27 = thread->Registers.gpr27; - ctx->GPR28 = thread->Registers.gpr28; - ctx->GPR29 = thread->Registers.gpr29; - ctx->GPR30 = thread->Registers.gpr30; - ctx->GPR31 = thread->Registers.gpr31; - ctx->EXC_CR = thread->Registers.cr; - ctx->EXC_CTR = 0xdeadbeef; - ctx->EXC_XER = 0xdeadbeef; - ctx->EXC_LR = 0xdeadbeef; - ctx->EXC_MSR = 0xdeadbeef; - ctx->EXC_DAR = 0xdeadbeef; + ptr[i] = 0xdeadbeef; + + ctx->GPR13 = thread->Registers.gpr13; + ctx->GPR14 = thread->Registers.gpr14; + ctx->GPR15 = thread->Registers.gpr15; + ctx->GPR16 = thread->Registers.gpr16; + ctx->GPR17 = thread->Registers.gpr17; + ctx->GPR18 = thread->Registers.gpr18; + ctx->GPR19 = thread->Registers.gpr19; + ctx->GPR20 = thread->Registers.gpr20; + ctx->GPR21 = thread->Registers.gpr21; + ctx->GPR22 = thread->Registers.gpr22; + ctx->GPR23 = thread->Registers.gpr23; + ctx->GPR24 = thread->Registers.gpr24; + ctx->GPR25 = thread->Registers.gpr25; + ctx->GPR26 = thread->Registers.gpr26; + ctx->GPR27 = thread->Registers.gpr27; + ctx->GPR28 = thread->Registers.gpr28; + ctx->GPR29 = thread->Registers.gpr29; + ctx->GPR30 = thread->Registers.gpr30; + ctx->GPR31 = thread->Registers.gpr31; + ctx->EXC_CR = thread->Registers.cr; + ctx->EXC_CTR = 0xdeadbeef; + ctx->EXC_XER = 0xdeadbeef; + ctx->EXC_LR = 0xdeadbeef; + ctx->EXC_MSR = 0xdeadbeef; + ctx->EXC_DAR = 0xdeadbeef; } -void -set_ctx_thread( Thread_Control *thread, CPU_Exception_frame* ctx) + void +set_ctx_thread (Thread_Control * thread, CPU_Exception_frame * ctx) { - thread->Registers.gpr1 = ctx->GPR1; - thread->Registers.gpr2 = ctx->GPR2; + thread->Registers.gpr1 = ctx->GPR1; + thread->Registers.gpr2 = ctx->GPR2; - thread->Registers.gpr13 = ctx->GPR13; - thread->Registers.gpr14 = ctx->GPR14; - thread->Registers.gpr15 = ctx->GPR15; - thread->Registers.gpr16 = ctx->GPR16; - thread->Registers.gpr17 = ctx->GPR17; - thread->Registers.gpr18 = ctx->GPR18; - thread->Registers.gpr19 = ctx->GPR19; - thread->Registers.gpr20 = ctx->GPR20; - thread->Registers.gpr21 = ctx->GPR21; - thread->Registers.gpr22 = ctx->GPR22; - thread->Registers.gpr23 = ctx->GPR23; - thread->Registers.gpr24 = ctx->GPR24; - thread->Registers.gpr25 = ctx->GPR25; - thread->Registers.gpr26 = ctx->GPR26; - thread->Registers.gpr27 = ctx->GPR27; - thread->Registers.gpr28 = ctx->GPR28; - thread->Registers.gpr29 = ctx->GPR29; - thread->Registers.gpr30 = ctx->GPR30; - thread->Registers.gpr31 = ctx->GPR31; - thread->Registers.cr = ctx->EXC_CR; - thread->Registers.pc = ctx->EXC_SRR0; - thread->Registers.msr = ctx->EXC_SRR1; + thread->Registers.gpr13 = ctx->GPR13; + thread->Registers.gpr14 = ctx->GPR14; + thread->Registers.gpr15 = ctx->GPR15; + thread->Registers.gpr16 = ctx->GPR16; + thread->Registers.gpr17 = ctx->GPR17; + thread->Registers.gpr18 = ctx->GPR18; + thread->Registers.gpr19 = ctx->GPR19; + thread->Registers.gpr20 = ctx->GPR20; + thread->Registers.gpr21 = ctx->GPR21; + thread->Registers.gpr22 = ctx->GPR22; + thread->Registers.gpr23 = ctx->GPR23; + thread->Registers.gpr24 = ctx->GPR24; + thread->Registers.gpr25 = ctx->GPR25; + thread->Registers.gpr26 = ctx->GPR26; + thread->Registers.gpr27 = ctx->GPR27; + thread->Registers.gpr28 = ctx->GPR28; + thread->Registers.gpr29 = ctx->GPR29; + thread->Registers.gpr30 = ctx->GPR30; + thread->Registers.gpr31 = ctx->GPR31; + thread->Registers.cr = ctx->EXC_CR; + thread->Registers.pc = ctx->EXC_SRR0; + thread->Registers.msr = ctx->EXC_SRR1; } - - -int -Single_Step(CPU_Exception_frame* ctx) + int +Single_Step (CPU_Exception_frame * ctx) { - if ((ctx->EXC_SRR1 & MSR_SE) != 0 || ExitForSingleStep != 0) { - /* Check coherency */ + if ((ctx->EXC_SRR1 & MSR_SE) != 0 || ExitForSingleStep != 0) { + /* + * Check coherency + */ assert ((ctx->EXC_SRR1 & MSR_SE) != 0); assert (ExitForSingleStep != 0); return 0; @@ -124,33 +123,54 @@ Single_Step(CPU_Exception_frame* ctx) 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->EXC_SRR1 &= ~MSR_SE; - 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->EXC_SRR1 &= ~MSR_SE; + ExitForSingleStep = 0; + return 1; + } + return 0; } -void -CancelSingleStep (CPU_Exception_frame* ctx) + void +CancelSingleStep (CPU_Exception_frame * ctx) { - /* Cancel scheduled SS */ + /* + * Cancel scheduled SS + */ ctx->EXC_SRR1 &= ~MSR_SE; - ExitForSingleStep-- ; + ExitForSingleStep--; } -cpuExcHandlerType oldExcHandler; -void connect_rdbg_exception() +static cpuExcHandlerType oldExcHandler; + + void +connect_rdbg_exception () +{ + /* + * test if rdbg already connected its exception handler + */ + if (globalExceptHdl != BreakPointExcHdl) { + oldExcHandler = globalExceptHdl; + globalExceptHdl = BreakPointExcHdl; + } +} + + void +disconnect_rdbg_exception () { - oldExcHandler = globalExceptHdl; - globalExceptHdl = BreakPointExcHdl ; + /* + * test if current execption handler is rdbg's one + * and restore the original one in this case. + */ + if (globalExceptHdl == BreakPointExcHdl) { + globalExceptHdl = oldExcHandler; + } } |