< prev index next >

src/hotspot/share/prims/jvmtiImpl.cpp

Print this page
@@ -454,11 +454,12 @@
    assert(ty_sign != nullptr, "type signature must not be null");
    assert(thread != nullptr, "thread must not be null");
    assert(klass != nullptr, "klass must not be null");
  
    int len = (int) strlen(ty_sign);
-   if (ty_sign[0] == JVM_SIGNATURE_CLASS &&
+   if ((ty_sign[0] == JVM_SIGNATURE_CLASS ||
+        ty_sign[0] == JVM_SIGNATURE_PRIMITIVE_OBJECT) &&
        ty_sign[len-1] == JVM_SIGNATURE_ENDCLASS) { // Need pure class/interface name
      ty_sign++;
      len -= 2;
    }
    TempNewSymbol ty_sym = SymbolTable::new_symbol(ty_sign, len);

@@ -532,10 +533,11 @@
    case T_CHAR:
    case T_BOOLEAN:
      slot_type = T_INT;
      break;
    case T_ARRAY:
+   case T_PRIMITIVE_OBJECT:
      slot_type = T_OBJECT;
      break;
    default:
      break;
    };

@@ -679,11 +681,11 @@
  
        // If we are updating an oop then get the oop from the handle
        // since the handle will be long gone by the time the deopt
        // happens. The oop stored in the deferred local will be
        // gc'd on its own.
-       if (_type == T_OBJECT) {
+       if (_type == T_OBJECT || _type == T_PRIMITIVE_OBJECT) {
          _value.l = cast_from_oop<jobject>(JNIHandles::resolve_external_guard(_value.l));
        }
        // Re-read the vframe so we can see that it is deoptimized
        // [ Only need because of assert in update_local() ]
        _jvf = get_java_vframe();

@@ -697,11 +699,12 @@
      switch (_type) {
        case T_INT:    locals->set_int_at   (_index, _value.i); break;
        case T_LONG:   locals->set_long_at  (_index, _value.j); break;
        case T_FLOAT:  locals->set_float_at (_index, _value.f); break;
        case T_DOUBLE: locals->set_double_at(_index, _value.d); break;
-       case T_OBJECT: {
+       case T_OBJECT:
+       case T_PRIMITIVE_OBJECT: {
          Handle ob_h(current_thread, JNIHandles::resolve_external_guard(_value.l));
          locals->set_obj_at (_index, ob_h);
          break;
        }
        default: ShouldNotReachHere();

@@ -718,11 +721,12 @@
        switch (_type) {
          case T_INT:    _value.i = locals->int_at   (_index);   break;
          case T_LONG:   _value.j = locals->long_at  (_index);   break;
          case T_FLOAT:  _value.f = locals->float_at (_index);   break;
          case T_DOUBLE: _value.d = locals->double_at(_index);   break;
-         case T_OBJECT: {
+         case T_OBJECT:
+         case T_PRIMITIVE_OBJECT: {
            // Wrap the oop to be returned in a local JNI handle since
            // oops_do() no longer applies after doit() is finished.
            oop obj = locals->obj_at(_index)();
            _value.l = JNIHandles::make_local(_calling_thread, obj);
            break;
< prev index next >