Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [patch] sim/erc32/ max simulation time extended by using 64bit   ints
@ 2010-04-23 13:25 Tiemen Schut
  2010-04-23 20:28 ` Doug Evans
  0 siblings, 1 reply; 13+ messages in thread
From: Tiemen Schut @ 2010-04-23 13:25 UTC (permalink / raw)
  To: gdb-patches; +Cc: joel.sherrill

[-- Attachment #1: Type: text/plain, Size: 468 bytes --]

Hey all,

This patch solves the problem that the sparc instruction simulator (SIS) would hang after a few minutes of simulation time (time depending on speed of host pc), because of the use of 32 bit counters internally.

This patch doesn't change anything to simulator behaviour, except that it allows for longer simulation times.

There may be a problem with the use of 64 bit integers, but that was also there before this patch.

Thanks,

Tiemen Schut


[-- Attachment #2: sis-V3.diff --]
[-- Type: application/octet-stream, Size: 9232 bytes --]

Index: sim/erc32/ChangeLog
===================================================================
RCS file: /cvs/src/src/sim/erc32/ChangeLog,v
retrieving revision 1.31
diff -u -r1.31 ChangeLog
--- sim/erc32/ChangeLog	14 Apr 2010 07:38:04 -0000	1.31
+++ sim/erc32/ChangeLog	22 Apr 2010 13:45:22 -0000
@@ -1,3 +1,8 @@
+2010-04-20  Tiemen Schut    <T.Schut@sron.nl>
+
+	* sis.c, func.c, sis.h, interf.c: Increase max simulation time
+	by using uint64 for relevant counters.
+
 2010-04-14  Mike Frysinger  <vapier@gentoo.org>
 
 	* interp.c (sim_write): Add const to buf arg.
Index: sim/erc32/func.c
===================================================================
RCS file: /cvs/src/src/sim/erc32/func.c,v
retrieving revision 1.4
diff -u -r1.4 func.c
--- sim/erc32/func.c	8 Jul 2005 08:04:54 -0000	1.4
+++ sim/erc32/func.c	22 Apr 2010 13:45:22 -0000
@@ -421,7 +421,7 @@
 	    }
 	} else if (strncmp(cmd1, "cont", clen) == 0) {
 	    if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) {
-		stat = run_sim(sregs, -1, 0);
+		stat = run_sim(sregs, UINT64_MAX, 0);
 	    } else {
 		stat = run_sim(sregs, VAL(cmd1), 0);
 	    }
@@ -472,7 +472,7 @@
 	    if ((cmd2 = strtok(NULL, " \t\n\r")) != NULL) {
 		stat = run_sim(sregs, VAL(cmd2), 0);
 	    } else {
-		stat = run_sim(sregs, -1, 0);
+		stat = run_sim(sregs, UINT64_MAX, 0);
 	    }
 	    daddr = sregs->pc;
 	    sim_halt();
@@ -544,7 +544,7 @@
 	    reset_all();
 	    reset_stat(sregs);
 	    if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) {
-		stat = run_sim(sregs, -1, 0);
+		stat = run_sim(sregs, UINT64_MAX, 0);
 	    } else {
 		stat = run_sim(sregs, VAL(cmd1), 0);
 	    }
@@ -560,7 +560,7 @@
 	    sim_halt();
 	} else if (strncmp(cmd1, "tcont", clen) == 0) {
 	    sregs->tlimit = limcalc(sregs->freq);
-	    stat = run_sim(sregs, -1, 0);
+	    stat = run_sim(sregs, UINT64_MAX, 0);
 	    daddr = sregs->pc;
 	    sim_halt();
 	} else if (strncmp(cmd1, "tgo", clen) == 0) {
@@ -573,7 +573,7 @@
 	    sregs->pc = len & ~3;
 	    sregs->npc = sregs->pc + 4;
 	    printf("resuming at 0x%08x\n",sregs->pc);
-	    stat = run_sim(sregs, -1, 0);
+	    stat = run_sim(sregs, UINT64_MAX, 0);
 	    daddr = sregs->pc;
 	    sim_halt();
 	} else if (strncmp(cmd1, "tlimit", clen) == 0) {
@@ -583,7 +583,7 @@
 		sregs->tlimit / sregs->freq / 1000);
 	} else if (strncmp(cmd1, "tra", clen) == 0) {
 	    if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) {
-		stat = run_sim(sregs, -1, 1);
+		stat = run_sim(sregs, UINT64_MAX, 1);
 	    } else {
 		stat = run_sim(sregs, VAL(cmd1), 1);
 	    }
@@ -595,7 +595,7 @@
 	    reset_all();
 	    reset_stat(sregs);
 	    sregs->tlimit = limcalc(sregs->freq);
-	    stat = run_sim(sregs, -1, 0);
+	    stat = run_sim(sregs, UINT64_MAX, 0);
 	    daddr = sregs->pc;
 	    sim_halt();
 	} else
@@ -833,7 +833,7 @@
 event(cfunc, arg, delta)
     void            (*cfunc) ();
     int32           arg;
-    uint32          delta;
+    uint64          delta;
 {
     struct evcell  *ev1, *evins;
 
@@ -900,7 +900,8 @@
 
     struct evcell  *evrem;
     void            (*cfunc) ();
-    uint32          arg, endtime;
+    uint32          arg;
+    uint64          endtime;
 
 #ifdef STAT
     sregs->fholdt += sregs->fhold;
@@ -938,7 +939,8 @@
 {
     struct evcell  *evrem;
     void            (*cfunc) ();
-    int32           arg, endtime;
+    int32           arg;
+    uint64          endtime;
 
     if (ebase.eq.nxt == NULL)
 	printf("Warning: event queue empty - power-down mode not entered\n");
Index: sim/erc32/interf.c
===================================================================
RCS file: /cvs/src/src/sim/erc32/interf.c,v
retrieving revision 1.7
diff -u -r1.7 interf.c
--- sim/erc32/interf.c	14 Apr 2010 07:38:04 -0000	1.7
+++ sim/erc32/interf.c	22 Apr 2010 13:45:22 -0000
@@ -37,7 +37,7 @@
 
 #define PSR_CWP 0x7
 
-#define	VAL(x)	strtol(x,(char **)NULL,0)
+#define	VAL(x)	strtoull(x,(char **)NULL,0)
 
 extern struct disassemble_info dinfo;
 extern struct pstate sregs;
@@ -69,7 +69,7 @@
 int
 run_sim(sregs, icount, dis)
     struct pstate  *sregs;
-    unsigned int    icount;
+    uint64          icount;
     int             dis;
 {
     int             mexc, irq;
@@ -338,10 +338,10 @@
 
 int
 sim_fetch_register(sd, regno, buf, length)
-     SIM_DESC sd;
-    int             regno;
-    unsigned char  *buf;
-     int length;
+    SIM_DESC sd;
+    int regno;
+    unsigned char *buf;
+    int length;
 {
     get_regi(&sregs, regno, buf);
     return -1;
@@ -349,10 +349,10 @@
 
 int
 sim_write(sd, mem, buf, length)
-     SIM_DESC sd;
-    SIM_ADDR             mem;
+    SIM_DESC sd;
+    SIM_ADDR mem;
     const unsigned char  *buf;
-    int             length;
+    int length;
 {
     return (sis_memory_write(mem, buf, length));
 }
@@ -461,7 +461,7 @@
 void
 sim_resume(SIM_DESC sd, int step, int siggnal)
 {
-    simstat = run_sim(&sregs, -1, 0);
+    simstat = run_sim(&sregs, UINT64_MAX, 0);
 
     if (sis_gdb_break) flush_windows ();
 }
Index: sim/erc32/sis.c
===================================================================
RCS file: /cvs/src/src/sim/erc32/sis.c,v
retrieving revision 1.3
diff -u -r1.3 sis.c
--- sim/erc32/sis.c	9 Jun 2008 22:55:27 -0000	1.3
+++ sim/erc32/sis.c	22 Apr 2010 13:45:22 -0000
@@ -82,7 +82,7 @@
 int
 run_sim(sregs, icount, dis)
     struct pstate  *sregs;
-    unsigned int    icount;
+    uint64          icount;
     int             dis;
 {
     int             irq, mexc, deb, asi;
Index: sim/erc32/sis.h
===================================================================
RCS file: /cvs/src/src/sim/erc32/sis.h,v
retrieving revision 1.2
diff -u -r1.2 sis.h
--- sim/erc32/sis.h	9 Jun 2002 15:45:46 -0000	1.2
+++ sim/erc32/sis.h	22 Apr 2010 13:45:22 -0000
@@ -23,6 +23,7 @@
 #include "ansidecl.h"
 #include "gdb/callback.h"
 #include "gdb/remote-sim.h"
+#include "stdint.h"
 
 #include "end.h"
 
@@ -52,8 +53,8 @@
 typedef double  float64;	/* 64-bit float */
 
 /* FIXME: what about host compilers that don't support 64-bit ints? */
-typedef unsigned long long uint64; /* 64-bit unsigned int */
-typedef long long int64;	/* 64-bit signed int */
+typedef uint64_t uint64; /* 64-bit unsigned int */
+typedef int64_t int64;	/* 64-bit signed int */
 
 struct pstate {
 
@@ -108,22 +109,22 @@
     float32         freq;	/* Simulated processor frequency */
 
 
-    uint32          tottime;
-    uint32          ninst;
-    uint32          fholdt;
-    uint32          holdt;
-    uint32          icntt;
-    uint32          finst;
-    uint32          simstart;
-    uint32          starttime;
-    uint32          tlimit;	/* Simulation time limit */
-    uint32          pwdtime;	/* Cycles in power-down mode */
-    uint32          nstore;	/* Number of load instructions */
-    uint32          nload;	/* Number of store instructions */
-    uint32          nannul;	/* Number of annuled instructions */
-    uint32          nbranch;	/* Number of branch instructions */
-    uint32          ildreg;	/* Destination of last load instruction */
-    uint32          ildtime;	/* Last time point for load dependency */
+    uint64          tottime;
+    uint64          ninst;
+    uint64          fholdt;
+    uint64          holdt;
+    uint64          icntt;
+    uint64          finst;
+    uint64          simstart;
+    uint64          starttime;
+    uint64          tlimit;	/* Simulation time limit */
+    uint64          pwdtime;	/* Cycles in power-down mode */
+    uint64          nstore;	/* Number of load instructions */
+    uint64          nload;	/* Number of store instructions */
+    uint64          nannul;	/* Number of annuled instructions */
+    uint64          nbranch;	/* Number of branch instructions */
+    uint64          ildreg;	/* Destination of last load instruction */
+    uint64          ildtime;	/* Last time point for load dependency */
 
     int             rett_err;	/* IU in jmpl/restore error state (Rev.0) */
     int             jmpltime;
@@ -132,14 +133,14 @@
 struct evcell {
     void            (*cfunc) ();
     int32           arg;
-    uint32          time;
+    uint64          time;
     struct evcell  *nxt;
 };
 
 struct estate {
     struct evcell   eq;
     struct evcell  *freeq;
-    uint32          simtime;
+    uint64          simtime;
 };
 
 struct irqcell {
@@ -186,7 +187,7 @@
 struct disassemble_info;
 extern void	dis_mem PARAMS ((uint32 addr, uint32 len,
 				 struct disassemble_info *info));
-extern void	event PARAMS ((void (*cfunc) (), int32 arg, uint32 delta));
+extern void	event PARAMS ((void (*cfunc) (), int32 arg, uint64 delta));
 extern void	set_int PARAMS ((int32 level, void (*callback) (), int32 arg));
 extern void	advance_time PARAMS ((struct pstate  *sregs));
 extern uint32	now PARAMS ((void));
@@ -205,7 +206,7 @@
 
 /* interf.c */
 extern int	run_sim PARAMS ((struct pstate *sregs,
-				 unsigned int icount, int dis));
+				 uint64 icount, int dis));
 
 /* float.c */
 extern int	get_accex PARAMS ((void));

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-05-21 16:52 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-23 13:25 [patch] sim/erc32/ max simulation time extended by using 64bit ints Tiemen Schut
2010-04-23 20:28 ` Doug Evans
2010-05-04 21:16   ` Joel Sherrill
2010-05-07 17:48     ` Doug Evans
2010-05-17  2:08     ` Joel Brobecker
2010-05-17  3:23       ` Joel Sherrill
2010-05-17 16:37       ` Doug Evans
2010-05-17 16:59         ` Joel Brobecker
2010-05-20 23:13       ` Joel Brobecker
2010-05-21 13:47         ` Joel Sherrill
2010-05-21 15:06           ` Joel Brobecker
2010-05-21 15:15             ` Joel Sherrill
2010-05-21 17:13               ` Doug Evans

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox