RFR(S): 8050022: linux-sparcv9: assert(SharedSkipVerify || obj->is_oop()) failed: sanity check

David Chase david.r.chase at oracle.com
Wed Sep 10 15:16:21 UTC 2014


(Not a Reviewer review)

Style question — in the stack-slot manipulating code in
src/cpu/sparc/vm/sharedRuntime_sparc.cpp, it says
    // V9ism: floats go in ODD registers
and then repeats this expression three times
   1 + (j << 1)
Perhaps it would be better to say (after the comment)
  int float_index = 1 + (j << 1);
and repeat float_index three times,
and likewise for the even index in the double case
  int double_index = (j<<1)

Other than that, I like it, especially the typos/spellos that you caught in associated files.

David

On 2014-09-10, at 11:00 AM, Morris Meyer <morris.meyer at oracle.com> wrote:

> Folks,
> 
> Could I get a review for this issue?  On Linux-SPARC, in the jnistress002 test, the registers all save cleanly, and the JNI call into jniobjects() happens cleanly.  Inside the compiled JNI method, prior to the first (*env)->MonitorEnter(), the code spills the float and double arguments onto the stack, which happens to corrupt both JNIEnv *env, and jobject jobj.
> 
> JNIEXPORT jobjectArray JNICALL
> Java_nsk_stress_jni_JNIStress002_JNIter_jniobjects (JNIEnv *env, jobject jobj, jstring jstr, jint intgr,
>              jlong lng, jcharArray jChArr, jfloat flt, jdouble dbl) {
> 
>  static int classCount = 0;
>  jobjectArray obj;
>  jobject element;
>  jclass clazz, clazzUp;
>  jmethodID methodID;
>  jfieldID classNoID;
>  const char *classname="nsk/stress/jni/JNIStress002/objectsJNI";
>  const char *name="<init>";
>  const char *sig="(Ljava/lang/String;IJ[CFD)V";
>  const char *upperClassName="nsk/stress/jni/JNIStress002/jnistress002";
>  const char *fieldName="jniStringAllocSize";
>  const char *fieldSig="I";
>  const char *setpass="halt";
>  const char *setpassSig="()V";
>  jvalue paramArr [6];
>  int kkk;
> 
>  (*env)->MonitorEnter(env, jobj); CE
> 
> The fix is to allocate stack spillage space for Linux SPARC machines for floating point arguments passed as registers.  I didn't touch the V8 side of this as I'm not sure if we even have a V8 machine (pre-2000) running Linux.
> 
> Tested with JPRT and nsk.stress.
> 
>        --morris
> 
> WEBREV - http://cr.openjdk.java.net/~morris/JDK-8050022.01/
> JBS - https://bugs.openjdk.java.net/browse/JDK-8050022
> 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20140910/1ec376a7/signature.asc>


More information about the hotspot-compiler-dev mailing list