7200949 (original) (raw)

Prepared by:

twisti on Mon Oct 1 14:41:14 PDT 2012

Workspace:

/home/twisti/7200949

Compare against:

ssh://hg.openjdk.java.net/hsx/hotspot-comp-gate/hotspot

Summary of changes:

374 lines changed: 239 ins; 16 del; 119 mod; 24166 unchg

Patch of changes:

<7200949.patch>

Author comments:

7200949: JSR 292: rubybench/bench/time/bench_base64.rb fails with jruby.jar not on boot class path
Reviewed-by: jrose, kvn

The problem is in the declared signature returned by
ciBytecodeStream::get_method which was added with 7192406.

We create a ciSignature object with the constant pool holder as accessing
class. ciEnv::get_klass_by_name_impl doesn't delegate to its parent class
loaders and we can't call SystemDictionary::resolve_or_null because we
are in the compiler thread. Thus all lookups happen in the class loader
of the accessing class.

This leads to supposedly unloaded classes like org/jruby/RubyString or
even java/lang/Object.

The fix is to store the MethodType in the constant pool cache and using
that type information instead of the declared method signature to create
a ciSignature.

Bug id:

7200949 JSR 292: rubybench/bench/time/bench_base64.rb fails with jruby.jar not on boot class path

Legend:

Modified file
Deleted file
New file