[vmkit-commits] [vmkit] r56435 - /vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Sep 22 07:46:29 PDT 2008
Author: geoffray
Date: Mon Sep 22 09:46:29 2008
New Revision: 56435
URL: http://llvm.org/viewvc/llvm-project?rev=56435&view=rev
Log:
Use alloca in the top-level function, instead of mallocs in the called
functions.
Modified:
vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp?rev=56435&r1=56434&r2=56435&view=diff
==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/NativeUtil.cpp Mon Sep 22 09:46:29 2008
@@ -38,15 +38,12 @@
#define PRE "Java_"
#define PRE_LEN 5
-static char* jniConsFromMeth(CommonClass* cl, JavaMethod* meth) {
+static char* jniConsFromMeth(CommonClass* cl, JavaMethod* meth, char* buf) {
const UTF8* jniConsClName = cl->name;
const UTF8* jniConsName = meth->name;
- const UTF8* jniConsType = meth->type;
sint32 clen = jniConsClName->size;
sint32 mnlen = jniConsName->size;
- sint32 mtlen = jniConsType->size;
- char* buf = (char*)malloc(3 + PRE_LEN + mnlen + clen + (mtlen << 1));
uint32 cur = 0;
char* ptr = &(buf[PRE_LEN]);
@@ -75,15 +72,12 @@
}
-static char* jniConsFromMeth2(CommonClass* cl, JavaMethod* meth) {
+static char* jniConsFromMeth2(CommonClass* cl, JavaMethod* meth, char* buf) {
const UTF8* jniConsClName = cl->name;
const UTF8* jniConsName = meth->name;
- const UTF8* jniConsType = meth->type;
sint32 clen = jniConsClName->size;
sint32 mnlen = jniConsName->size;
- sint32 mtlen = jniConsType->size;
- char* buf = (char*)malloc(3 + PRE_LEN + mnlen + clen + (mtlen << 1));
uint32 cur = 0;
char* ptr = &(buf[PRE_LEN]);
@@ -117,15 +111,13 @@
}
-static char* jniConsFromMeth3(CommonClass* cl, JavaMethod* meth) {
+static char* jniConsFromMeth3(CommonClass* cl, JavaMethod* meth, char* buf) {
const UTF8* jniConsClName = cl->name;
const UTF8* jniConsName = meth->name;
const UTF8* jniConsType = meth->type;
sint32 clen = jniConsClName->size;
sint32 mnlen = jniConsName->size;
- sint32 mtlen = jniConsType->size;
- char* buf = (char*)malloc(3 + PRE_LEN + mnlen + clen + (mtlen << 1));
uint32 cur = 0;
char* ptr = &(buf[PRE_LEN]);
@@ -183,7 +175,6 @@
return buf;
}
-#undef PRE_LEN
static void* loadName(char* buf, bool& jnjvm) {
void* res = dlsym(SELF_HANDLE, buf);
@@ -205,13 +196,21 @@
}
void* NativeUtil::nativeLookup(CommonClass* cl, JavaMethod* meth, bool& jnjvm) {
- char* buf = jniConsFromMeth(cl, meth);
+ const UTF8* jniConsClName = cl->name;
+ const UTF8* jniConsName = meth->name;
+ const UTF8* jniConsType = meth->type;
+ sint32 clen = jniConsClName->size;
+ sint32 mnlen = jniConsName->size;
+ sint32 mtlen = jniConsType->size;
+
+ char* buf = (char*)alloca(3 + PRE_LEN + mnlen + clen + (mtlen << 1));
+ jniConsFromMeth(cl, meth, buf);
void* res = loadName(buf, jnjvm);
if (!res) {
- buf = jniConsFromMeth2(cl, meth);
+ buf = jniConsFromMeth2(cl, meth, buf);
res = loadName(buf, jnjvm);
if (!res) {
- buf = jniConsFromMeth3(cl, meth);
+ buf = jniConsFromMeth3(cl, meth, buf);
res = loadName(buf, jnjvm);
if (!res) {
printf("Native function %s not found. Probably "
@@ -222,10 +221,11 @@
}
}
}
- free(buf);
return res;
}
+#undef PRE_LEN
+
UserCommonClass* NativeUtil::resolvedImplClass(jclass clazz, bool doClinit) {
Jnjvm* vm = JavaThread::get()->isolate;
JavaObject *Cl = (JavaObject*)clazz;
More information about the vmkit-commits
mailing list