< prev index next >

src/hotspot/share/jvmci/jvmciEnv.cpp

Print this page

 338       Handle exception(THREAD, PENDING_EXCEPTION);
 339       CLEAR_PENDING_EXCEPTION;
 340       JavaCallArguments jargs;
 341       jargs.push_oop(exception);
 342       jargs.push_int(to_string != nullptr);
 343       jargs.push_int(stack_trace != nullptr);
 344       JavaValue result(T_OBJECT);
 345       JavaCalls::call_static(&result,
 346                               HotSpotJVMCI::HotSpotJVMCIRuntime::klass(),
 347                               vmSymbols::exceptionToString_name(),
 348                               vmSymbols::exceptionToString_signature(), &jargs, THREAD);
 349       if (HAS_PENDING_EXCEPTION) {
 350         Handle nested_exception(THREAD, PENDING_EXCEPTION);
 351         CLEAR_PENDING_EXCEPTION;
 352         java_lang_Throwable::print_stack_trace(nested_exception, tty);
 353         // Clear and ignore any exceptions raised during printing
 354         CLEAR_PENDING_EXCEPTION;
 355         had_nested_exception = true;
 356       } else {
 357         oop pair = result.get_oop();
 358         guarantee(pair->is_objArray(), "must be");
 359         objArrayOop pair_arr = objArrayOop(pair);
 360         int len = pair_arr->length();
 361         guarantee(len == 2, "bad len is %d", len);
 362         if (to_string != nullptr) {
 363           to_string_obj = HotSpotJVMCI::wrap(pair_arr->obj_at(0));
 364         }
 365         if (stack_trace != nullptr) {
 366           stack_trace_obj = HotSpotJVMCI::wrap(pair_arr->obj_at(1));
 367         }
 368       }
 369     } else {
 370       return false;
 371     }
 372   }
 373   if (had_nested_exception) {
 374     if (to_string != nullptr) {
 375       *to_string = "nested exception occurred converting exception to string";
 376     }
 377     if (stack_trace != nullptr) {
 378       *stack_trace = "nested exception occurred converting exception stack to string";
 379     }

 661 
 662 void JVMCIEnv::clear_pending_exception() {
 663   if (is_hotspot()) {
 664     JavaThread* THREAD = JavaThread::current(); // For exception macros.
 665     CLEAR_PENDING_EXCEPTION;
 666   } else {
 667     JNIAccessMark jni(this);
 668     jni()->ExceptionClear();
 669   }
 670 }
 671 
 672 int JVMCIEnv::get_length(JVMCIArray array) {
 673   if (is_hotspot()) {
 674     return HotSpotJVMCI::resolve(array)->length();
 675   } else {
 676     JNIAccessMark jni(this);
 677     return jni()->GetArrayLength(get_jarray(array));
 678   }
 679 }
 680 
 681 JVMCIObject JVMCIEnv::get_object_at(JVMCIObjectArray array, int index) {
 682   if (is_hotspot()) {
 683     oop result = HotSpotJVMCI::resolve(array)->obj_at(index);

 684     return wrap(result);
 685   } else {
 686     JNIAccessMark jni(this);
 687     jobject result = jni()->GetObjectArrayElement(get_jobjectArray(array), index);
 688     return wrap(result);
 689   }
 690 }
 691 
 692 void JVMCIEnv::put_object_at(JVMCIObjectArray array, int index, JVMCIObject value) {
 693   if (is_hotspot()) {
 694     HotSpotJVMCI::resolve(array)->obj_at_put(index, HotSpotJVMCI::resolve(value));
 695   } else {
 696     JNIAccessMark jni(this);
 697     jni()->SetObjectArrayElement(get_jobjectArray(array), index, get_jobject(value));
 698   }
 699 }
 700 
 701 jboolean JVMCIEnv::get_bool_at(JVMCIPrimitiveArray array, int index) {
 702   if (is_hotspot()) {
 703     return HotSpotJVMCI::resolve(array)->bool_at(index);

1135     jargs.push_int(type_char);
1136     jargs.push_long(value);
1137     JavaValue result(T_OBJECT);
1138     JavaCalls::call_static(&result,
1139                            HotSpotJVMCI::JavaConstant::klass(),
1140                            vmSymbols::forPrimitive_name(),
1141                            vmSymbols::forPrimitive_signature(), &jargs, CHECK_(JVMCIObject()));
1142     return wrap(result.get_oop());
1143   } else {
1144     JNIAccessMark jni(this, THREAD);
1145     jobject result = (jstring) jni()->CallStaticObjectMethod(JNIJVMCI::JavaConstant::clazz(),
1146                                                              JNIJVMCI::JavaConstant::forPrimitive_method(),
1147                                                              type_char, value);
1148     if (jni()->ExceptionCheck()) {
1149       return JVMCIObject();
1150     }
1151     return wrap(result);
1152   }
1153 }
1154 
1155 JVMCIObject JVMCIEnv::get_jvmci_primitive_type(BasicType type) {
1156   JVMCIObjectArray primitives = get_HotSpotResolvedPrimitiveType_primitives();
1157   JVMCIObject result = get_object_at(primitives, type);
1158   return result;
1159 }
1160 
1161 JVMCIObject JVMCIEnv::new_StackTraceElement(const methodHandle& method, int bci, JVMCI_TRAPS) {
1162   JavaThread* THREAD = JavaThread::current(); // For exception macros.
1163   Symbol* file_name_sym;
1164   int line_number;
1165   java_lang_StackTraceElement::decode(method, bci, file_name_sym, line_number, CHECK_(JVMCIObject()));
1166 
1167   Symbol* method_name_sym = method->name();
1168   InstanceKlass* holder = method->method_holder();
1169   const char* declaring_class_str = holder->external_name();
1170 
1171   if (is_hotspot()) {
1172     HotSpotJVMCI::StackTraceElement::klass()->initialize(CHECK_(JVMCIObject()));
1173     oop objOop = HotSpotJVMCI::StackTraceElement::klass()->allocate_instance(CHECK_(JVMCIObject()));
1174     Handle obj = Handle(THREAD, objOop);
1175 
1176     oop declaring_class = StringTable::intern((char*) declaring_class_str, CHECK_(JVMCIObject()));
1177     HotSpotJVMCI::StackTraceElement::set_declaringClass(this, obj(), declaring_class);

 338       Handle exception(THREAD, PENDING_EXCEPTION);
 339       CLEAR_PENDING_EXCEPTION;
 340       JavaCallArguments jargs;
 341       jargs.push_oop(exception);
 342       jargs.push_int(to_string != nullptr);
 343       jargs.push_int(stack_trace != nullptr);
 344       JavaValue result(T_OBJECT);
 345       JavaCalls::call_static(&result,
 346                               HotSpotJVMCI::HotSpotJVMCIRuntime::klass(),
 347                               vmSymbols::exceptionToString_name(),
 348                               vmSymbols::exceptionToString_signature(), &jargs, THREAD);
 349       if (HAS_PENDING_EXCEPTION) {
 350         Handle nested_exception(THREAD, PENDING_EXCEPTION);
 351         CLEAR_PENDING_EXCEPTION;
 352         java_lang_Throwable::print_stack_trace(nested_exception, tty);
 353         // Clear and ignore any exceptions raised during printing
 354         CLEAR_PENDING_EXCEPTION;
 355         had_nested_exception = true;
 356       } else {
 357         oop pair = result.get_oop();
 358         guarantee(pair->is_refArray(), "must be");
 359         refArrayOop pair_arr = refArrayOop(pair);
 360         int len = pair_arr->length();
 361         guarantee(len == 2, "bad len is %d", len);
 362         if (to_string != nullptr) {
 363           to_string_obj = HotSpotJVMCI::wrap(pair_arr->obj_at(0));
 364         }
 365         if (stack_trace != nullptr) {
 366           stack_trace_obj = HotSpotJVMCI::wrap(pair_arr->obj_at(1));
 367         }
 368       }
 369     } else {
 370       return false;
 371     }
 372   }
 373   if (had_nested_exception) {
 374     if (to_string != nullptr) {
 375       *to_string = "nested exception occurred converting exception to string";
 376     }
 377     if (stack_trace != nullptr) {
 378       *stack_trace = "nested exception occurred converting exception stack to string";
 379     }

 661 
 662 void JVMCIEnv::clear_pending_exception() {
 663   if (is_hotspot()) {
 664     JavaThread* THREAD = JavaThread::current(); // For exception macros.
 665     CLEAR_PENDING_EXCEPTION;
 666   } else {
 667     JNIAccessMark jni(this);
 668     jni()->ExceptionClear();
 669   }
 670 }
 671 
 672 int JVMCIEnv::get_length(JVMCIArray array) {
 673   if (is_hotspot()) {
 674     return HotSpotJVMCI::resolve(array)->length();
 675   } else {
 676     JNIAccessMark jni(this);
 677     return jni()->GetArrayLength(get_jarray(array));
 678   }
 679 }
 680 
 681 JVMCIObject JVMCIEnv::get_object_at(JVMCIObjectArray array, int index, JVMCI_TRAPS) {
 682   if (is_hotspot()) {
 683     JavaThread* THREAD = JavaThread::current(); // For exception macros.
 684     oop result = HotSpotJVMCI::resolve(array)->obj_at(index, CHECK_({}));
 685     return wrap(result);
 686   } else {
 687     JNIAccessMark jni(this);
 688     jobject result = jni()->GetObjectArrayElement(get_jobjectArray(array), index);
 689     return wrap(result);
 690   }
 691 }
 692 
 693 void JVMCIEnv::put_object_at(JVMCIObjectArray array, int index, JVMCIObject value) {
 694   if (is_hotspot()) {
 695     HotSpotJVMCI::resolve(array)->obj_at_put(index, HotSpotJVMCI::resolve(value));
 696   } else {
 697     JNIAccessMark jni(this);
 698     jni()->SetObjectArrayElement(get_jobjectArray(array), index, get_jobject(value));
 699   }
 700 }
 701 
 702 jboolean JVMCIEnv::get_bool_at(JVMCIPrimitiveArray array, int index) {
 703   if (is_hotspot()) {
 704     return HotSpotJVMCI::resolve(array)->bool_at(index);

1136     jargs.push_int(type_char);
1137     jargs.push_long(value);
1138     JavaValue result(T_OBJECT);
1139     JavaCalls::call_static(&result,
1140                            HotSpotJVMCI::JavaConstant::klass(),
1141                            vmSymbols::forPrimitive_name(),
1142                            vmSymbols::forPrimitive_signature(), &jargs, CHECK_(JVMCIObject()));
1143     return wrap(result.get_oop());
1144   } else {
1145     JNIAccessMark jni(this, THREAD);
1146     jobject result = (jstring) jni()->CallStaticObjectMethod(JNIJVMCI::JavaConstant::clazz(),
1147                                                              JNIJVMCI::JavaConstant::forPrimitive_method(),
1148                                                              type_char, value);
1149     if (jni()->ExceptionCheck()) {
1150       return JVMCIObject();
1151     }
1152     return wrap(result);
1153   }
1154 }
1155 
1156 JVMCIObject JVMCIEnv::get_jvmci_primitive_type(BasicType type, JVMCI_TRAPS) {
1157   JVMCIObjectArray primitives = get_HotSpotResolvedPrimitiveType_primitives();
1158   JVMCIObject result = get_object_at(primitives, type, JVMCI_CHECK_({}));
1159   return result;
1160 }
1161 
1162 JVMCIObject JVMCIEnv::new_StackTraceElement(const methodHandle& method, int bci, JVMCI_TRAPS) {
1163   JavaThread* THREAD = JavaThread::current(); // For exception macros.
1164   Symbol* file_name_sym;
1165   int line_number;
1166   java_lang_StackTraceElement::decode(method, bci, file_name_sym, line_number, CHECK_(JVMCIObject()));
1167 
1168   Symbol* method_name_sym = method->name();
1169   InstanceKlass* holder = method->method_holder();
1170   const char* declaring_class_str = holder->external_name();
1171 
1172   if (is_hotspot()) {
1173     HotSpotJVMCI::StackTraceElement::klass()->initialize(CHECK_(JVMCIObject()));
1174     oop objOop = HotSpotJVMCI::StackTraceElement::klass()->allocate_instance(CHECK_(JVMCIObject()));
1175     Handle obj = Handle(THREAD, objOop);
1176 
1177     oop declaring_class = StringTable::intern((char*) declaring_class_str, CHECK_(JVMCIObject()));
1178     HotSpotJVMCI::StackTraceElement::set_declaringClass(this, obj(), declaring_class);
< prev index next >