Hi,

In jni.cpp the DEFINE_NEWSCALARARRAY macro uses DT_RETURN_MARK_DECL_FOR
instead of the normal DT_RETURN_MARK_DECL. The DT_RETURN_MARK_DECL_FOR
macro should only be used for mark probes that could return a primitive
jfloat or jdouble. But DEFINE_NEWSCALARARRAY creates the functions for
New<Type>Array which return primitiveTypeArrays. This means that for
NewFloatArray and NewDoubleArray you cannot get the return value in the
return mark probe.

According to hotspot_jni.d the intention is to return these values in
those cases:

  probe NewDoubleArray__entry(void*, uintptr_t);
  probe NewDoubleArray__return(void*);
  probe NewFloatArray__entry(void*, uintptr_t);
  probe NewFloatArray__return(void*);

The attached trivial patch fixes it and makes the actual return value in
those cases available.

Tested against Systemtap, but the same should work for DTrace also.
I don't have access to a system with solaris/dtrace on it, so it would
be nice of someone who does could double check the above on such a
system.

Please let me know if I should create a bug also on
https://bugs.openjdk.java.net/ and/or if I should report/post this patch
on some other mailing-list.

Thanks,

Mark
diff -r 6ddec5389232 src/share/vm/prims/jni.cpp
--- a/src/share/vm/prims/jni.cpp	Fri Oct 02 11:26:25 2009 -0700
+++ b/src/share/vm/prims/jni.cpp	Mon Oct 19 21:09:20 2009 +0200
@@ -2150,14 +2150,14 @@
 
 #define DEFINE_NEWSCALARARRAY(Return,Allocator,Result) \
 \
-  DT_RETURN_MARK_DECL_FOR(Result, New##Result##Array, Return);\
+  DT_RETURN_MARK_DECL(New##Result##Array, Return);\
 \
 JNI_ENTRY(Return, \
           jni_New##Result##Array(JNIEnv *env, jsize len)) \
   JNIWrapper("New" XSTR(Result) "Array"); \
   DTRACE_PROBE2(hotspot_jni, New##Result##Array__entry, env, len);\
   Return ret = NULL;\
-  DT_RETURN_MARK_FOR(Result, New##Result##Array, Return, (const Return&)ret);\
+  DT_RETURN_MARK(New##Result##Array, Return, (const Return&)ret);\
 \
   oop obj= oopFactory::Allocator(len, CHECK_0); \
   ret = (Return) JNIHandles::make_local(env, obj); \

Reply via email to