diff src/cpu/sparc/vm/sparc.ad @ 20290:85c339200299

8029443: 'assert(klass->is_loader_alive(_is_alive)) failed: must be alive' during VM_CollectForMetadataAllocation Summary: Added missing metadata relocation to 'loadConP_no_oop_cheap' on Sparc if the pointer is referring to a Klass. Added jtreg test. Reviewed-by: kvn
author thartmann
date Wed, 06 Aug 2014 08:47:40 +0200
parents 0bf37f737702
children 318cc6fdae90
line wrap: on
line diff
--- a/src/cpu/sparc/vm/sparc.ad	Thu Jul 31 19:59:36 2014 +0200
+++ b/src/cpu/sparc/vm/sparc.ad	Wed Aug 06 08:47:40 2014 +0200
@@ -6184,7 +6184,11 @@
   ins_cost(DEFAULT_COST * 3/2);
   format %{ "SET    $con,$dst\t! non-oop ptr" %}
   ins_encode %{
-    __ set($con$$constant, $dst$$Register);
+    if (_opnds[1]->constant_reloc() == relocInfo::metadata_type) {
+      __ set_metadata_constant((Metadata*)$con$$constant, $dst$$Register);
+    } else {
+      __ set($con$$constant, $dst$$Register);
+    }
   %}
   ins_pipe(loadConP);
 %}