[kaffe] CVS kaffe (robilad): jit fixes for arm linux

Kaffe CVS cvs-commits at kaffe.org
Mon Feb 18 19:35:22 PST 2008


PatchSet 7762 
Date: 2008/02/19 03:33:30
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
jit fixes for arm linux

2008-02-18  Dalibor Topic  <robilad at kaffe.org>

        JIT fixes for ARM.

        * kaffe/kaffevm/exception.c (vmExcept_setJNIFrame): Removed unnecessary assert.

        * kaffe/kaffevm/stackTrace.c (buildStackTrace): Check if a frame shows up twice
        on the stack and abort when it does.

Members: 
	ChangeLog:1.5262->1.5263 
	kaffe/kaffevm/exception.c:1.110->1.111 
	kaffe/kaffevm/stackTrace.c:1.55->1.56 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.5262 kaffe/ChangeLog:1.5263
--- kaffe/ChangeLog:1.5262	Sun Feb 17 13:17:59 2008
+++ kaffe/ChangeLog	Tue Feb 19 03:33:30 2008
@@ -1,3 +1,12 @@
+2008-02-18  Dalibor Topic  <robilad at kaffe.org>
+
+	JIT fixes for ARM.
+
+	* kaffe/kaffevm/exception.c (vmExcept_setJNIFrame): Removed unnecessary assert.
+
+	* kaffe/kaffevm/stackTrace.c (buildStackTrace): Check if a frame shows up twice
+	on the stack and abort when it does.
+
 2008-02-17  Dalibor Topic  <robilad at kaffe.org>
 
 	* kaffe/kaffevm/fp.c (doubleDivide): Follow the spec more closely.
Index: kaffe/kaffe/kaffevm/exception.c
diff -u kaffe/kaffe/kaffevm/exception.c:1.110 kaffe/kaffe/kaffevm/exception.c:1.111
--- kaffe/kaffe/kaffevm/exception.c:1.110	Sat Jan 19 15:13:39 2008
+++ kaffe/kaffe/kaffevm/exception.c	Tue Feb 19 03:33:32 2008
@@ -89,7 +89,6 @@
 	assert(eh != NULL);
 	assert(eh->meth == VMEXCEPTHANDLER_KAFFEJNI_HANDLER);
 	assert(fp != (JNIFrameAddress)0);
-
 	return (eh->frame.jni.fp == fp);
 }
 
@@ -97,7 +96,6 @@
 vmExcept_setJNIFrame(VmExceptHandler* eh, JNIFrameAddress fp)
 {
 	assert(eh != NULL);
-	assert(fp != (JNIFrameAddress)0);
 
 	eh->meth = VMEXCEPTHANDLER_KAFFEJNI_HANDLER;
 	eh->frame.jni.fp = fp;
Index: kaffe/kaffe/kaffevm/stackTrace.c
diff -u kaffe/kaffe/kaffevm/stackTrace.c:1.55 kaffe/kaffe/kaffevm/stackTrace.c:1.56
--- kaffe/kaffe/kaffevm/stackTrace.c:1.55	Sat Sep 22 17:36:13 2007
+++ kaffe/kaffe/kaffevm/stackTrace.c	Tue Feb 19 03:33:32 2008
@@ -52,23 +52,43 @@
 Hjava_lang_Object*
 buildStackTrace(struct _exceptionFrame* base)
 {
-	int cnt;
 	struct _stackTrace trace;
 	stackTraceInfo* info;
 	struct _exceptionFrame orig;
+#ifdef TRANSLATOR
+	struct _exceptionFrame* previousframe;
+#else
+	VmExceptHandler* previousframe;
+#endif
+	int cnt;
+	int elements;
 
 	(void) orig;			/* avoid compiler warning in intrp */
 	DBG(STACKTRACE,
 	    dprintf("STACKTRACEINIT(trace, %p, %p, orig);\n", base, base); );
 	STACKTRACEINIT(trace, base, base, orig);
 	cnt = 0;
+	previousframe = trace.frame;
+
 	while(STACKTRACEFRAME(trace) && KTHREAD(on_current_stack) ((void *)STACKTRACEFP(trace))) {
+#ifdef TRANSLATOR
+	DBG(STACKTRACE,
+	    dprintf("STACKTRACESTEP(%d, fp=%p, nextframe=%p);\n", 
+	             cnt, (void *) FPFRAME(trace.frame), (void *) NEXTFRAME(trace.frame)); );
+#endif
 		cnt++;
 		STACKTRACESTEP(trace);
+		/* break out of the frame counting loop if 
+		 * we start looping frames. */
+		if (previousframe == trace.frame)
+			break;
+		else
+			previousframe = trace.frame;
 	}
+	elements = cnt;
 
 	/* Build an array of stackTraceInfo */
-	info = gc_malloc(sizeof(stackTraceInfo) * (cnt+1), KGC_ALLOC_NOWALK);
+	info = gc_malloc(sizeof(stackTraceInfo) * (elements+1), KGC_ALLOC_NOWALK);
 	if (!info) {
 	    dprintf("buildStackTrace(%p): can't allocate stackTraceInfo\n",
 		    base);
@@ -81,7 +101,7 @@
 	    dprintf("STACKTRACEINIT(trace, &orig, %p, orig);\n", base); );
 	STACKTRACEINIT(trace, &orig, base, orig);
 
-	while (STACKTRACEFRAME(trace) && KTHREAD(on_current_stack) ((void *)STACKTRACEFP(trace))) {
+	while (cnt < elements) {
 		info[cnt].pc = STACKTRACEPC(trace);
 		info[cnt].fp = STACKTRACEFP(trace);
 		info[cnt].meth = stacktraceFindMethod (info[cnt].fp, info[cnt].pc);




More information about the kaffe mailing list