Code Review for 8000263

Prepared by:twisti on Fri Oct 5 11:54:21 PDT 2012
Workspace:/home/twisti/8000263
Compare against: /home/twisti/hotspot
Summary of changes: 210 lines changed: 39 ins; 74 del; 97 mod; 16048 unchg
Patch of changes: 8000263.patch
Author comments:
8000263: JSR 292: signature types may appear to be unloaded
Reviewed-by:

The problem is in the intrinsification code for Unsafe.getObject.
Usually field accesses with get/putfield resolve the field when
parsing the bytecode. ciBytecodeStream::get_field calls
ciField::will_link which puts class loader constraints for the
signature types in place. In LibraryCallKit::inline_unsafe_access we
create a ciField object for the field we are accessing but with the
ciField's type left uninitialized. When calling ciField::type we try
to look up the field type lazily which fails because we never resolved
the field and put class loader constraints in place.

There are two ways to fix it. The first one is two return
java/lang/Object as field type if the computed type is unloaded. The
second fix is to turn on LinkWellKnowClasses by default.
LinkWellKnownClasses only works if the field type is java/lang/Object,
for user types we need to other fix.

The change also renames the WK_KLASSES_DO macro argument template with
do_klass because template is a reserved keyword in C++.

Bug id: Bug Database
Legend: Modified file
Deleted file
New file

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/cpu/sparc/vm/methodHandles_sparc.cpp

24 lines changed: 0 ins; 23 del; 1 mod; 587 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/cpu/sparc/vm/methodHandles_sparc.hpp

2 lines changed: 0 ins; 2 del; 0 mod; 60 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/cpu/x86/vm/methodHandles_x86.cpp

27 lines changed: 0 ins; 26 del; 1 mod; 620 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/cpu/x86/vm/methodHandles_x86.hpp

2 lines changed: 0 ins; 2 del; 0 mod; 61 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/classfile/systemDictionary.cpp

17 lines changed: 15 ins; 0 del; 2 mod; 2922 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/classfile/systemDictionary.hpp

90 lines changed: 2 ins; 0 del; 88 mod; 610 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/classfile/vmSymbols.cpp

18 lines changed: 0 ins; 18 del; 0 mod; 545 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/classfile/vmSymbols.hpp

3 lines changed: 0 ins; 3 del; 0 mod; 1149 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/opto/library_call.cpp

5 lines changed: 2 ins; 0 del; 3 mod; 5610 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/prims/methodHandles.hpp

21 lines changed: 20 ins; 0 del; 1 mod; 212 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/runtime/globals.hpp

1 line changed: 0 ins; 0 del; 1 mod; 3672 unchg

This code review page was prepared using /home/twisti/bin/webrev (vers 23.18-hg-twisti).