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

Tom Rodriguez tom.rodriguez at oracle.com
Wed Jun 22 13:13:09 PDT 2011


Do you have meth-link-7056328.patch applied?  There's a bug in there with a missing null check.  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.

tom

On Jun 22, 2011, at 12:04 PM, Stephen Bannasch wrote:

> At 10:30 AM -0700 6/22/11, Tom Rodriguez wrote:
>> Could you provide more detail on this?  I just ran the all these against b146 and they all pass cleanly for a large collection of configs.  One thing you have to watch out for is an issue on 64 bit where the code cache fills up because some ofthe stress tests use a lot of signatures.  Run with -XX:ReservedCodeCacheSize=128m until that issue is dealt with.  You may also need to increase the timeout for jtreg depending on the speed of your machine.
> 
> The problem appears to be the same for all the failures and is a segfault while compiling:
> 
>    #section:compile
>    ----------messages:(3/189)----------
>    command: compile /Users/stephen/dev/java/src/mlvm/sources/jdk/test/java/lang/invoke/6991596/Test6991596.java
>    reason: .class file out of date or does not exist
>    elapsed time (seconds): 1.314
>    ----------System.out:(18/764)----------
>    #
>    # A fatal error has been detected by the Java Runtime Environment:
>    #
>    #  SIGSEGV (0xb) at pc=0x0000000101017a3d, pid=8795, tid=4501590016
>    #
>    # JRE version: 7.0
>    # Java VM: OpenJDK 64-Bit Server VM (21.0-b15 mixed mode bsd-amd64 compressed oops)
>    # Problematic frame:
>    # V  [libjvm.dylib+0x17a3d]  ciEnv::get_klass_by_name_impl(ciKlass*, constantPoolHandle, ciSymbol*,bool)+0x4fd
>    #
>    # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
> 
> See more details: https://gist.github.com/1040828
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev



More information about the mlvm-dev mailing list