提交 cd702a95 编写于 作者: R rraghavan

8191227: issues with unsafe handle resolution

Summary: added ThreadInVMfromNative or ThreadInVMfromUnknown support
Reviewed-by: thartmann, vlivanov
上级 e7c3ac14
...@@ -509,8 +509,13 @@ void LIR_Assembler::jobject2reg(jobject o, Register reg) { ...@@ -509,8 +509,13 @@ void LIR_Assembler::jobject2reg(jobject o, Register reg) {
if (o == NULL) { if (o == NULL) {
__ set(NULL_WORD, reg); __ set(NULL_WORD, reg);
} else { } else {
#ifdef ASSERT
{
ThreadInVMfromNative tiv(JavaThread::current());
assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(o)), "should be real oop");
}
#endif
int oop_index = __ oop_recorder()->find_index(o); int oop_index = __ oop_recorder()->find_index(o);
assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(o)), "should be real oop");
RelocationHolder rspec = oop_Relocation::spec(oop_index); RelocationHolder rspec = oop_Relocation::spec(oop_index);
__ set(NULL_WORD, reg, rspec); // Will be set when the nmethod is created __ set(NULL_WORD, reg, rspec); // Will be set when the nmethod is created
} }
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include "code/debugInfoRec.hpp" #include "code/debugInfoRec.hpp"
#include "code/nmethod.hpp" #include "code/nmethod.hpp"
#include "runtime/handles.inline.hpp" #include "runtime/handles.inline.hpp"
#include "runtime/interfaceSupport.hpp"
#include "runtime/thread.hpp"
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
...@@ -204,14 +206,24 @@ void ConstantDoubleValue::print_on(outputStream* st) const { ...@@ -204,14 +206,24 @@ void ConstantDoubleValue::print_on(outputStream* st) const {
// ConstantOopWriteValue // ConstantOopWriteValue
void ConstantOopWriteValue::write_on(DebugInfoWriteStream* stream) { void ConstantOopWriteValue::write_on(DebugInfoWriteStream* stream) {
assert(JNIHandles::resolve(value()) == NULL || #ifdef ASSERT
Universe::heap()->is_in_reserved(JNIHandles::resolve(value())), {
"Should be in heap"); // cannot use ThreadInVMfromNative here since in case of JVMCI compiler,
// thread is already in VM state.
ThreadInVMfromUnknown tiv;
assert(JNIHandles::resolve(value()) == NULL ||
Universe::heap()->is_in_reserved(JNIHandles::resolve(value())),
"Should be in heap");
}
#endif
stream->write_int(CONSTANT_OOP_CODE); stream->write_int(CONSTANT_OOP_CODE);
stream->write_handle(value()); stream->write_handle(value());
} }
void ConstantOopWriteValue::print_on(outputStream* st) const { void ConstantOopWriteValue::print_on(outputStream* st) const {
// using ThreadInVMfromUnknown here since in case of JVMCI compiler,
// thread is already in VM state.
ThreadInVMfromUnknown tiv;
JNIHandles::resolve(value())->print_value_on(st); JNIHandles::resolve(value())->print_value_on(st);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册