summaryrefslogtreecommitdiffstats
path: root/c/src/librdbg/src/powerpc
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2002-02-01 17:00:01 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2002-02-01 17:00:01 +0000
commit40cf43eab4e4121a92ec95bc1366cc5b3bad4e27 (patch)
tree5aef0f81416b68a9f035ac5d14ba9278f0787c1c /c/src/librdbg/src/powerpc
parent2001-02-01 Mike Siers <mikes@poliac.com> (diff)
downloadrtems-40cf43eab4e4121a92ec95bc1366cc5b3bad4e27.tar.bz2
* 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.
Diffstat (limited to 'c/src/librdbg/src/powerpc')
-rw-r--r--c/src/librdbg/src/powerpc/excep_f.c233
-rw-r--r--c/src/librdbg/src/powerpc/new_exception_processing/Makefile.am2
-rw-r--r--c/src/librdbg/src/powerpc/new_exception_processing/remdeb.h155
-rw-r--r--c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c34
-rw-r--r--c/src/librdbg/src/powerpc/new_exception_processing/remdeb_xdr.c103
-rw-r--r--c/src/librdbg/src/powerpc/rdbg_f.c216
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;
+ }
}