view patches/hotspot/original/icedtea-shark.patch @ 1702:6cb729c4a876

Make the normal (non-Zero/Shark) HotSpot original build work. 2010-03-10 Andrew John Hughes <ahughes@redhat.com> Fix the normal (non-Zero/Shark) build with the original HotSpot. * Makefile.am: Move format-warnings, fortify-source, 6791168 and includedb patch to set applied to all HotSpots. Add bytecodeInterpreter XSL fix back for original HotSpot. * patches/hotspot/default/icedtea-explicit-target-arch.patch: Move HotSpot chunk to separate hs14-specific file. * patches/hotspot/original/icedtea-6791168.patch, * patches/hotspot/original/icedtea-explicit-target-arch.patch, * patches/hotspot/original/icedtea-includedb.patch: New variants for original HotSpot (hs11). * patches/hotspot/original/icedtea-shark.patch: Fixed to apply to original HotSpot. * patches/icedtea-bytecodeInterpreterWithChecks.patch: Readded, reverting part of Gary's patch of 2009-05-08. * patches/icedtea-explicit-target-arch.patch: Remove HotSpot chunk and specialise it in HotSpot subdirectories.
author Andrew John Hughes <ahughes@redhat.com>
date Thu, 11 Mar 2010 22:57:54 +0000
parents ce6567001a96
children
line wrap: on
line source

diff -Nru openjdk.orig/hotspot/src/share/vm/ci/ciMethod.cpp openjdk/hotspot/src/share/vm/ci/ciMethod.cpp
--- openjdk.orig/hotspot/src/share/vm/ci/ciMethod.cpp	2009-04-24 08:30:54.000000000 +0100
+++ openjdk/hotspot/src/share/vm/ci/ciMethod.cpp	2010-03-11 14:42:47.000000000 +0000
@@ -59,9 +59,9 @@
   _liveness           = NULL;
   _bcea = NULL;
   _method_blocks = NULL;
-#ifdef COMPILER2
+#if defined(COMPILER2) || defined(SHARK)
   _flow               = NULL;
-#endif // COMPILER2
+#endif // COMPILER2 || SHARK
 
   if (JvmtiExport::can_hotswap_or_post_breakpoint() && _is_compilable) {
     // 6328518 check hotswap conditions under the right lock.  
@@ -127,9 +127,9 @@
   _bcea = NULL;
   _method_blocks = NULL;
   _method_data = NULL;
-#ifdef COMPILER2
+#if defined(COMPILER2) || defined(SHARK)
   _flow = NULL;
-#endif // COMPILER2
+#endif // COMPILER2 || SHARK
 }
 
 
@@ -297,34 +297,34 @@
 // ------------------------------------------------------------------
 // ciMethod::get_flow_analysis
 ciTypeFlow* ciMethod::get_flow_analysis() {
-#ifdef COMPILER2
+#if defined(COMPILER2) || defined(SHARK)
   if (_flow == NULL) {
     ciEnv* env = CURRENT_ENV;
     _flow = new (env->arena()) ciTypeFlow(env, this);
     _flow->do_flow();
   }
   return _flow;
-#else // COMPILER2
+#else // COMPILER2 || SHARK
   ShouldNotReachHere();
   return NULL;
-#endif // COMPILER2
+#endif // COMPILER2 || SHARK
 }
 
 
 // ------------------------------------------------------------------
 // ciMethod::get_osr_flow_analysis
 ciTypeFlow* ciMethod::get_osr_flow_analysis(int osr_bci) {
-#ifdef COMPILER2
+#if defined(COMPILER2) || defined(SHARK)
   // OSR entry points are always place after a call bytecode of some sort
   assert(osr_bci >= 0, "must supply valid OSR entry point");
   ciEnv* env = CURRENT_ENV;
   ciTypeFlow* flow = new (env->arena()) ciTypeFlow(env, this, osr_bci);
   flow->do_flow();
   return flow;
-#else // COMPILER2
+#else // COMPILER2 || SHARK
   ShouldNotReachHere();
   return NULL;
-#endif // COMPILER2
+#endif // COMPILER2 || SHARK
 }
 
 // ------------------------------------------------------------------
diff -Nru openjdk.orig/hotspot/src/share/vm/ci/ciMethod.hpp openjdk/hotspot/src/share/vm/ci/ciMethod.hpp
--- openjdk.orig/hotspot/src/share/vm/ci/ciMethod.hpp	2009-04-24 08:30:54.000000000 +0100
+++ openjdk/hotspot/src/share/vm/ci/ciMethod.hpp	2010-03-11 14:42:47.000000000 +0000
@@ -72,7 +72,7 @@
 
   // Optional liveness analyzer.
   MethodLiveness* _liveness;
-#ifdef COMPILER2
+#if defined(COMPILER2) || defined(SHARK)
   ciTypeFlow*     _flow;
 #endif
 
diff -Nru openjdk.orig/hotspot/src/share/vm/code/nmethod.cpp openjdk/hotspot/src/share/vm/code/nmethod.cpp
--- openjdk.orig/hotspot/src/share/vm/code/nmethod.cpp	2009-04-24 08:30:54.000000000 +0100
+++ openjdk/hotspot/src/share/vm/code/nmethod.cpp	2010-03-11 14:42:47.000000000 +0000
@@ -190,6 +190,11 @@
 
   add_address_and_handler(pc,handler);
 }
+bool nmethod::is_compiled_by_shark() const {
+  if (is_native_method()) return false;
+  assert(compiler() != NULL, "must be");
+  return compiler()->is_shark();
+}
 
 
 address ExceptionCache::match(Handle exception, address pc) {
@@ -1451,6 +1456,7 @@
 // Method that knows how to preserve outgoing arguments at call. This method must be
 // called with a frame corresponding to a Java invoke
 void nmethod::preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) {  
+#ifndef SHARK
   if (!method()->is_native()) {
     SimpleScopeDesc ssd(this, fr.pc());
     Bytecode_invoke* call = Bytecode_invoke_at(ssd.method(), ssd.bci());
@@ -1458,6 +1464,7 @@
     symbolOop signature = call->signature();
     fr.oops_compiled_arguments_do(signature, is_static, reg_map, f);
   }
+#endif // !SHARK
 }
 
 
@@ -1886,6 +1893,8 @@
     tty->print("(c1) ");
   } else if (is_compiled_by_c2()) {
     tty->print("(c2) ");
+  } else if (is_compiled_by_shark()) {
+    tty->print("(shark) ");
   } else {
     assert(is_native_method(), "Who else?");
     tty->print("(nm) ");
diff -Nru openjdk.orig/hotspot/src/share/vm/code/nmethod.hpp openjdk/hotspot/src/share/vm/code/nmethod.hpp
--- openjdk.orig/hotspot/src/share/vm/code/nmethod.hpp	2009-04-24 08:30:54.000000000 +0100
+++ openjdk/hotspot/src/share/vm/code/nmethod.hpp	2010-03-11 14:42:47.000000000 +0000
@@ -293,6 +293,7 @@
 
   bool is_compiled_by_c1() const;
   bool is_compiled_by_c2() const;
+  bool is_compiled_by_shark() const;
     
   // boundaries for different parts
   address code_begin         () const             { return _entry_point; }
diff -Nru openjdk.orig/hotspot/src/share/vm/compiler/abstractCompiler.hpp openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp
--- openjdk.orig/hotspot/src/share/vm/compiler/abstractCompiler.hpp	2009-04-24 08:30:54.000000000 +0100
+++ openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp	2010-03-11 14:42:47.000000000 +0000
@@ -48,18 +48,26 @@
   // Missing feature tests
   virtual bool supports_native()                 { return true; }
   virtual bool supports_osr   ()                 { return true; } 
-#if defined(TIERED) || ( !defined(COMPILER1) && !defined(COMPILER2))
+#if defined(TIERED) || ( !defined(COMPILER1) && !defined(COMPILER2) && !defined(SHARK))
   virtual bool is_c1   ()                        { return false; } 
   virtual bool is_c2   ()                        { return false; } 
+  virtual bool is_shark()                        { return false; }
 #else
 #ifdef COMPILER1
   bool is_c1   ()                                { return true; } 
   bool is_c2   ()                                { return false; } 
+  bool is_shark()                                { return false; }
 #endif // COMPILER1
 #ifdef COMPILER2
   bool is_c1   ()                                { return false; } 
   bool is_c2   ()                                { return true; } 
+  bool is_shark()                                { return false; }
 #endif // COMPILER2
+#ifdef SHARK
+  bool is_c1   ()                                { return false; }
+  bool is_c2   ()                                { return false; }
+  bool is_shark()                                { return true; }
+#endif // SHARK  
 #endif // TIERED
 
   // Customization
diff -Nru openjdk.orig/hotspot/src/share/vm/compiler/compileBroker.cpp openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp
--- openjdk.orig/hotspot/src/share/vm/compiler/compileBroker.cpp	2009-04-24 08:30:54.000000000 +0100
+++ openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp	2010-03-11 14:42:47.000000000 +0000
@@ -557,6 +557,14 @@
 #endif
 #endif // COMPILER2
 
+#ifdef SHARK
+#if defined(COMPILER1) || defined(COMPILER2)
+#error "Can't use COMPILER1 or COMPILER2 with shark"
+#endif
+  _compilers[0] = new SharkCompiler();
+  _compilers[1] = _compilers[0];  
+#endif
+  
   // Initialize the CompileTask free list
   _task_free_list = NULL;
 
diff -Nru openjdk.orig/hotspot/src/share/vm/memory/cardTableModRefBS.hpp openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp
--- openjdk.orig/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	2009-04-24 08:30:55.000000000 +0100
+++ openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	2010-03-11 14:42:47.000000000 +0000
@@ -47,6 +47,7 @@
   friend class VMStructs;
   friend class CardTableRS;
   friend class CheckForUnmarkedOops; // Needs access to raw card bytes.
+  friend class SharkBuilder;
 #ifndef PRODUCT
   // For debugging.
   friend class GuaranteeNotModClosure;
diff -Nru openjdk.orig/hotspot/src/share/vm/oops/methodOop.cpp openjdk/hotspot/src/share/vm/oops/methodOop.cpp
--- openjdk.orig/hotspot/src/share/vm/oops/methodOop.cpp	2009-04-24 08:30:56.000000000 +0100
+++ openjdk/hotspot/src/share/vm/oops/methodOop.cpp	2010-03-11 14:42:47.000000000 +0000
@@ -733,10 +733,14 @@
   }
 
   OrderAccess::storestore();
+#ifdef SHARK
+  mh->_from_interpreted_entry = code->instructions_begin();
+#else
   mh->_from_compiled_entry = code->verified_entry_point();
   OrderAccess::storestore();
   // Instantly compiled code can execute.
   mh->_from_interpreted_entry = mh->get_i2c_entry();
+#endif // SHARK
 
 }
 
diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
--- openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp	2009-04-24 08:30:56.000000000 +0100
+++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp	2010-03-11 14:42:47.000000000 +0000
@@ -220,6 +220,7 @@
     
   }
 
+#ifndef SHARK
   // Compute the caller frame based on the sender sp of stub_frame and stored frame sizes info.
   CodeBlob* cb = stub_frame.cb();
   // Verify we have the right vframeArray
@@ -230,6 +231,10 @@
   assert(cb->is_deoptimization_stub() || cb->is_uncommon_trap_stub(), "just checking");
   Events::log("fetch unroll sp " INTPTR_FORMAT, unpack_sp);
 #endif
+#else
+  intptr_t* unpack_sp = stub_frame.sender(&dummy_map).unextended_sp();
+#endif // !SHARK
+  
   // This is a guarantee instead of an assert because if vframe doesn't match
   // we will unpack the wrong deoptimized frame and wind up in strange places
   // where it will be very difficult to figure out what went wrong. Better
@@ -340,7 +345,9 @@
 
   frame_pcs[0] = deopt_sender.raw_pc();
 
+#ifndef SHARK
   assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc");
+#endif // SHARK
 
   UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord, 
 				      caller_adjustment * BytesPerWord,
@@ -835,7 +842,20 @@
   // stuff a C2I adapter we can properly fill in the callee-save
   // register locations.
   frame caller = fr.sender(reg_map);
+#ifdef ZERO
+  int frame_size;
+  {
+    // In zero, frame::sp() is the *end* of the frame, so
+    // caller.sp() - fr.sp() is the size of the *caller*.
+    RegisterMap dummy_map(thread, false);
+    frame frame_1 = thread->last_frame();
+    frame frame_2 = frame_1.sender(&dummy_map);
+    assert(frame_2.sp() == fr.sp(), "should be");
+    frame_size = frame_2.sp() - frame_1.sp();
+  }
+#else
   int frame_size = caller.sp() - fr.sp();
+#endif // ZERO
 
   frame sender = caller;
  
@@ -1002,7 +1022,7 @@
 JRT_END
 
 
-#ifdef COMPILER2
+#if defined(COMPILER2) || defined(SHARK)
 void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) {
   // in case of an unresolved klass entry, load the class.
   if (constant_pool->tag_at(index).is_unresolved_klass()) {
@@ -1753,7 +1773,7 @@
     if (xtty != NULL)  xtty->tail("statistics");
   }
 }
-#else // COMPILER2
+#else // COMPILER2 || SHARK
 
 
 // Stubs for C1 only system.
@@ -1789,4 +1809,4 @@
   return buf;
 }
 
-#endif // COMPILER2
+#endif // COMPILER2 || SHARK
diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/globals.cpp openjdk/hotspot/src/share/vm/runtime/globals.cpp
--- openjdk.orig/hotspot/src/share/vm/runtime/globals.cpp	2009-04-24 08:30:56.000000000 +0100
+++ openjdk/hotspot/src/share/vm/runtime/globals.cpp	2010-03-11 14:42:47.000000000 +0000
@@ -161,6 +161,18 @@
   #define C2_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, "{C2 notproduct}", DEFAULT },
 #endif
 
+#define SHARK_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, "{Shark product}", DEFAULT },
+#define SHARK_PD_PRODUCT_FLAG_STRUCT(type, name, doc)     { #type, XSTR(name), &name, "{Shark pd product}", DEFAULT },
+#define SHARK_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, "{Shark diagnostic}", DEFAULT },
+#ifdef PRODUCT
+  #define SHARK_DEVELOP_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
+  #define SHARK_PD_DEVELOP_FLAG_STRUCT(type, name, doc)     /* flag is constant */
+  #define SHARK_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
+#else
+  #define SHARK_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, "{Shark}", DEFAULT },
+  #define SHARK_PD_DEVELOP_FLAG_STRUCT(type, name, doc)     { #type, XSTR(name), &name, "{Shark pd}", DEFAULT },
+  #define SHARK_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, "{Shark notproduct}", DEFAULT },
+#endif
 
 static Flag flagTable[] = {
  RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, RUNTIME_PD_DEVELOP_FLAG_STRUCT, RUNTIME_PRODUCT_FLAG_STRUCT, RUNTIME_PD_PRODUCT_FLAG_STRUCT, RUNTIME_DIAGNOSTIC_FLAG_STRUCT, RUNTIME_NOTPRODUCT_FLAG_STRUCT, RUNTIME_MANAGEABLE_FLAG_STRUCT, RUNTIME_PRODUCT_RW_FLAG_STRUCT)
@@ -171,6 +183,9 @@
 #ifdef COMPILER2
  C2_FLAGS(C2_DEVELOP_FLAG_STRUCT, C2_PD_DEVELOP_FLAG_STRUCT, C2_PRODUCT_FLAG_STRUCT, C2_PD_PRODUCT_FLAG_STRUCT, C2_DIAGNOSTIC_FLAG_STRUCT, C2_NOTPRODUCT_FLAG_STRUCT)
 #endif
+#ifdef SHARK
+ SHARK_FLAGS(SHARK_DEVELOP_FLAG_STRUCT, SHARK_PD_DEVELOP_FLAG_STRUCT, SHARK_PRODUCT_FLAG_STRUCT, SHARK_PD_PRODUCT_FLAG_STRUCT, SHARK_DIAGNOSTIC_FLAG_STRUCT, SHARK_NOTPRODUCT_FLAG_STRUCT)
+#endif
  {0, NULL, NULL}
 };
 
diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp openjdk/hotspot/src/share/vm/runtime/globals.hpp
--- openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp	2010-03-11 14:37:11.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/globals.hpp	2010-03-11 14:42:47.000000000 +0000
@@ -25,7 +25,7 @@
  *  
  */
 
-#if !defined(COMPILER1) && !defined(COMPILER2)
+#if !defined(COMPILER1) && !defined(COMPILER2) && !defined(SHARK)
 define_pd_global(bool, BackgroundCompilation,        false);
 define_pd_global(bool, UseTLAB,                      false);
 define_pd_global(bool, CICompileOSR,                 false);
diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/vframeArray.cpp openjdk/hotspot/src/share/vm/runtime/vframeArray.cpp
--- openjdk.orig/hotspot/src/share/vm/runtime/vframeArray.cpp	2009-04-24 08:30:57.000000000 +0100
+++ openjdk/hotspot/src/share/vm/runtime/vframeArray.cpp	2010-03-11 14:42:47.000000000 +0000
@@ -67,6 +67,11 @@
       assert(monitor->owner() == NULL || (!monitor->owner()->is_unlocked() && !monitor->owner()->has_bias_pattern()), "object must be null or locked, and unbiased");
       BasicObjectLock* dest = _monitors->at(index);
       dest->set_obj(monitor->owner());
+#ifdef SHARK
+      // XXX This can be removed when Shark knows
+      // which monitors are in use.
+      if (monitor->owner())
+#endif // SHARK
       monitor->lock()->move_to(monitor->owner(), dest->lock());
     }
   }
@@ -265,6 +270,11 @@
     top = iframe()->previous_monitor_in_interpreter_frame(top);
     BasicObjectLock* src = _monitors->at(index);
     top->set_obj(src->obj());
+#ifdef SHARK
+    // XXX This can be removed when Shark knows
+    // which monitors are in use.
+    if (src->obj())
+#endif // SHARK    
     src->lock()->move_to(src->obj(), top->lock());
   }
   if (ProfileInterpreter) {
diff -Nru openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
--- openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp	2010-03-11 14:37:11.000000000 +0000
+++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp	2010-03-11 14:43:42.000000000 +0000
@@ -95,6 +95,9 @@
 #ifdef TIERED
   #define VMTYPE "Server"
 #else
+#ifdef SHARK
+  #define VMTYPE "Shark"
+#else
 #if defined(COMPILER1) || defined(COMPILER2)
    #define VMTYPE COMPILER1_PRESENT("Client")   \
                   COMPILER2_PRESENT("Server")
@@ -105,6 +108,7 @@
   #define VMTYPE "Core"
 #endif // ZERO
 #endif // COMPILER1 || COMPILER2
+#endif // SHARK
 #endif // TIERED
 #endif // KERNEL