Request for reviews (S): 7092712: JSR 292: unloaded invokedynamic call sites can lead to a crash with signature types not on BCP
sebastian.sickelmann at gmx.de
Fri Sep 23 06:19:31 PDT 2011
Am 22.09.2011 12:23, schrieb Christian Thalinger:
> 7092712: JSR 292: unloaded invokedynamic call sites can lead to a crash with signature types not on BCP
> The problem is that ciEnv::get_fake_invokedynamic_method_impl calls
> get_unloaded_method with java.lang.invoke.MethodHandle as the holder
> for unresolved call sites.
> Since the loader of j.l.i.MethodHandle is the boot class loader the
> resolving of e.g. signature classes is done with the boot class loader
> resulting in problems like:
> (dbx) p this->print()
> <ciInstanceKlass name=NEW2 loader=0xe5e88000 loaded=true initialized=true finalized=false subklass=false size=16 flags=public,super super=java/lang/Object ident=714 PERM address=0x8480c40>this->print() = (void)
> (dbx) p that->print()
> <ciInstanceKlass name=NEW2 loader=0x0 loaded=false ident=720 address=0x8481178>that->print() = (void)
> Later in the game a ciInstanceKlass lookup for NEW2 returns a
> ciInstanceKlass created during the signature resolving in
> get_unloaded_method with the boot class loader as loader resulting in
> the above situation.
> The fix is to always pass an accessor to get_unloaded_method and
> subsequently the ciMethod constructor.
It fixed it for me on my Testcase with (jdk8).
Thanks for that.
I can't review it formally (because i don't understand the fix in a
complete manner) but
should there be an automated test for this? Or is this not a common
practice at hotspot-level?
Will there be a jdk7 backport?
More information about the hotspot-compiler-dev