# HG changeset patch # User Thomas Wuerthinger # Date 1289674707 -3600 # Node ID 944071972cd995eab07f213cb883e63d82cdef43 # Parent 1ffaf7819f9181601f1f0d530bea3a1c2627f097 Small fix. diff -r 1ffaf7819f91 -r 944071972cd9 src/share/vm/c1x/c1x_Compiler.cpp --- a/src/share/vm/c1x/c1x_Compiler.cpp Sat Nov 13 18:29:13 2010 +0100 +++ b/src/share/vm/c1x/c1x_Compiler.cpp Sat Nov 13 19:58:27 2010 +0100 @@ -100,15 +100,12 @@ } } -oop C1XCompiler::get_RiField(ciField *field, KlassHandle accessor, Bytecodes::Code byteCode, TRAPS) { +oop C1XCompiler::get_RiField(ciField *field, ciInstanceKlass* accessor_klass, KlassHandle accessor, Bytecodes::Code byteCode, TRAPS) { + bool will_link = field->will_link_from_vm(accessor_klass, byteCode); + int offset = (field->holder()->is_loaded() && will_link) ? field->offset() : -1; + Handle field_name = VmIds::toString(field->name()->get_symbolOop(), CHECK_0); Handle field_holder = get_RiType(field->holder(), accessor, CHECK_0); Handle field_type = get_RiType(field->type(), accessor, CHECK_0); - Handle field_name = VmIds::toString(field->name()->get_symbolOop(), CHECK_0); - - ciInstanceKlass* accessor_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(accessor()); - bool will_link = field->will_link_from_vm(accessor_klass, byteCode); - - int offset = (field->holder()->is_loaded() && will_link) ? field->offset() : -1; // TODO: implement caching return VMExits::createRiField(field_holder, field_name, field_type, offset, THREAD); diff -r 1ffaf7819f91 -r 944071972cd9 src/share/vm/c1x/c1x_Compiler.hpp --- a/src/share/vm/c1x/c1x_Compiler.hpp Sat Nov 13 18:29:13 2010 +0100 +++ b/src/share/vm/c1x/c1x_Compiler.hpp Sat Nov 13 19:58:27 2010 +0100 @@ -57,7 +57,7 @@ virtual void print_timers(); static oop get_RiType(ciType *klass, KlassHandle accessor, TRAPS); - static oop get_RiField(ciField *ciField, KlassHandle accessor, Bytecodes::Code byteCode, TRAPS); + static oop get_RiField(ciField *ciField, ciInstanceKlass* accessor_klass, KlassHandle accessor, Bytecodes::Code byteCode, TRAPS); static oop createHotSpotTypeResolved(KlassHandle klass, Handle name, TRAPS); diff -r 1ffaf7819f91 -r 944071972cd9 src/share/vm/c1x/c1x_VMEntries.cpp --- a/src/share/vm/c1x/c1x_VMEntries.cpp Sat Nov 13 18:29:13 2010 +0100 +++ b/src/share/vm/c1x/c1x_VMEntries.cpp Sat Nov 13 19:58:27 2010 +0100 @@ -256,7 +256,7 @@ ciInstanceKlass* loading_klass = (ciInstanceKlass *) CURRENT_ENV->get_object(cp->pool_holder()); ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index); Bytecodes::Code code = (Bytecodes::Code)(((int) byteCode) & 0xFF); - return JNIHandles::make_local(THREAD, C1XCompiler::get_RiField(field, cp->pool_holder(), code, THREAD)); + return JNIHandles::make_local(THREAD, C1XCompiler::get_RiField(field, loading_klass, cp->pool_holder(), code, THREAD)); } // public RiConstantPool RiType_constantPool(long vmId); diff -r 1ffaf7819f91 -r 944071972cd9 src/share/vm/ci/ciField.cpp --- a/src/share/vm/ci/ciField.cpp Sat Nov 13 18:29:13 2010 +0100 +++ b/src/share/vm/ci/ciField.cpp Sat Nov 13 19:58:27 2010 +0100 @@ -307,6 +307,7 @@ // link errors? bool ciField::will_link_from_vm(ciInstanceKlass* accessing_klass, Bytecodes::Code bc) { + Thread* THREAD = Thread::current(); if (_offset == -1) { // at creation we couldn't link to our holder so we need to // maintain that stance, otherwise there's no safe way to use this