[vmkit-commits] [vmkit] r200663 - Add a helper function to build stack traces.
Gael Thomas
gael.thomas at lip6.fr
Sun Feb 2 14:43:31 PST 2014
Author: gthomas
Date: Sun Feb 2 16:43:31 2014
New Revision: 200663
URL: http://llvm.org/viewvc/llvm-project?rev=200663&view=rev
Log:
Add a helper function to build stack traces.
Modified:
vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=200663&r1=200662&r2=200663&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Sun Feb 2 16:43:31 2014
@@ -346,31 +346,34 @@ jboolean JNICALL JVM_IsNaN(jdouble d) {
/*
* java.lang.Throwable
*/
+static void addStackElement(int64_t* orig, int64_t*& buf, uint32_t& max, uint32_t& cur, uint64_t val) {
+ if(cur == max) {
+ void* prev = buf;
+ buf = (int64_t*)malloc((max<<1)*sizeof(int64_t));
+ memcpy(buf, prev, max*sizeof(int64_t));
+ max <<= 1;
+ if(prev != orig)
+ free(prev);
+ }
+ buf[cur++] = val;
+}
+
void JNICALL JVM_FillInStackTrace(JNIEnv* env, jobject throwable) {
enterJVM();
uint32_t cur = 0;
uint32_t max = 1024;
- int64_t _buf[max];
- int64_t* buf = _buf;
+ int64_t orig[max];
+ int64_t* buf = orig;
vmkit::StackWalker walker;
- while(walker.next()) {
- if(cur == max) {
- void* prev = buf;
- buf = (int64_t*)malloc((max<<1)*sizeof(int64_t));
- memcpy(buf, prev, max*sizeof(int64_t));
- max <<= 1;
- if(prev != _buf)
- free(prev);
- }
- buf[cur++] = (int64_t)(uintptr_t)walker.ip();
- }
+ while(walker.next())
+ addStackElement(orig, buf, max, cur, (int64_t)(uintptr_t)walker.ip());
J3* vm = J3Thread::get()->vm();
jobject backtrace = J3ObjectHandle::doNewArray(vm->typeLong->getArray(), cur);
backtrace->setRegionLong(0, buf, 0, cur);
- if(buf != _buf)
+ if(buf != orig)
free(buf);
throwable->setObject(vm->throwableClassBacktrace, backtrace);
More information about the vmkit-commits
mailing list