[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