four failing jdk/test/java/lang/invoke tests

Stephen Bannasch stephen.bannasch at deanbrook.org
Wed Jun 22 18:49:03 PDT 2011


At 1:13 PM -0700 6/22/11, Tom Rodriguez wrote:
>Do you have meth-link-7056328.patch applied?  There's a bug in there with a missing null check. 


yes ... it's in the patches/hotspot/series file

  # non-pushed files are under review or development, or merely experimental:
  meth-link-7056328.patch         #-/meth #+8166f9740747



>A fastdebug build will assert like this:
>
>(dbx) where
>current thread: t at 7
> [1] __lwp_kill(0x7, 0x6), at 0xfeeb3ac5
> [2] _thr_kill(0x7, 0x6), at 0xfeead5dd
> [3] raise(0x6), at 0xfee68362
> [4] abort(0x6, 0xfeaf1c48, 0xfe4c453c, 0xfe4d0037, 0xfa6918ec, 0xfe140f44), at 0xfee45e3d
>=>[5] os::abort(dump_core = true), line 1869 in "os_solaris.cpp"
> [6] VMError::report_and_die(this = 0xfa691b50), line 991 in "vmError.cpp"
> [7] report_vm_error(file = 0xfe67c90e "/home/ct232829/hsx/hotspot-comp/7056328/src/share/vm/runtime/handles.hpp", line = 81, error_msg = 0xfe67c957 "assert(_handle != NULL) failed", detail_msg = 0xfe67c976 "resolving NULL handle"), line 216 in "debug.cpp"
> [8] Handle::non_null_obj(this = 0xfa691ca0), line 81 in "handles.hpp"
> [9] constantPoolHandle::non_null_obj(this = 0xfa691ca0), line 195 in "handles.hpp"
> [10] constantPoolHandle::operator->(this = 0xfa691ca0), line 195 in "handles.hpp"
> [11] ciEnv::get_klass_by_name_impl(this = 0xfa692a44, accessing_klass = 0x83d6710, cpool = CLASS, name = 0x83d6a10, require_local = false), line 457 in "ciEnv.cpp"
>
>This piece of the patch for ciEnv.cpp should look like this instead:
>
>@@ -451,6 +454,19 @@
>     }                                                                                                                                               
>   }                                                                                                                                                 
>                                                                                                                                                     
>+  if (found_klass() == NULL && !cpool.is_null() && cpool->has_preresolution()) {                                                                   
>+    // Look inside the constant pool for pre-resolved class entries.                                                                               
>+    for (int i = cpool->length() - 1; i >= 1; i--) {                                                                                               
>+      if (cpool->tag_at(i).is_klass()) {                                                                                                           
>+        klassOop kls = cpool->resolved_klass_at(i);                                                                                                 
>+        if (Klass::cast(kls)->name() == sym) {                                                                                                     
>+          found_klass = KlassHandle(THREAD, kls);                                                                                                   
>+          break;                                                                                                                                   
>+        }                                                                                                                                           
>+      }                                                                                                                                             
>+    }                                                                                                                                               
>+  }                                                                                                                                                 
>+                                                                                                                                                   
>   if (found_klass() != NULL) {                                                                                                                     
>     // Found it.  Build a CI handle.                                                                                                               
>     return get_object(found_klass())->as_klass();
>
>Note the !cpool.is_null() part.  Hopefully John will update the patch when he gets a chance.

With this applied I'm not getting any failures:

diff --git a/meth-link-7056328.patch b/meth-link-7056328.patch
--- a/meth-link-7056328.patch
+++ b/meth-link-7056328.patch
@@ -43,7 +43,7 @@
      }
    }
 
-+  if (found_klass() == NULL && cpool->has_preresolution()) {
++  if (found_klass() == NULL && !cpool.is_null() && cpool->has_preresolution()) {
 +    // Look inside the constant pool for pre-resolved class entries.
 +    for (int i = cpool->length() - 1; i >= 1; i--) {
 +      if (cpool->tag_at(i).is_klass()) {

I see it's applied in John's latest commits


More information about the mlvm-dev mailing list