changeset 1481:fa456dbffc04

Merge with doko.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Thu, 04 Dec 2008 14:09:57 +0000
parents 7a0ac0efdfe9 (current diff) d0505857d8da (diff)
children 4c80afa670e8
files ChangeLog Makefile.am patches/icedtea-shark-build.patch
diffstat 4 files changed, 362 insertions(+), 366 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Dec 04 12:36:04 2008 +0000
+++ b/ChangeLog	Thu Dec 04 14:09:57 2008 +0000
@@ -108,6 +108,14 @@
 
 2008-12-03  Matthias Klose  <doko@ubuntu.com>
 
+	* patches/icedtea-shark-build.patch: Regenerate.
+	* patches/icedtea-shark.patch: Regenerate.
+	* patches/icedtea-zero.patch: Regenerate.
+	* patches/icedtea-hotspot7-build-fixes.patch: Remove.
+	* Makefile.am (ZERO_PATCHES): Remove icedtea-hotspot7-build-fixes.patch.
+
+2008-12-03  Matthias Klose  <doko@ubuntu.com>
+
 	* patches/icedtea-shark.patch: Moved to ...
 	* patches/hotspot/original/icedtea-shark.patch: ... here.
 	* patches/hotspot/14.0b08/icedtea-shark.patch: New, regenerated.
@@ -324,6 +332,9 @@
 	(os::is_allocatable): Likewise.
 
 2008-12-03  Matthias Klose  <doko@ubuntu.com>
+=======
+2008-12-02  Matthias Klose  <doko@ubuntu.com>
+>>>>>>> other
 
 	* patches/icedtea-format-warnings.patch: New.
 	* patches/icedtea-format-warnings.patch: Likewise.
--- a/Makefile.am	Thu Dec 04 12:36:04 2008 +0000
+++ b/Makefile.am	Thu Dec 04 14:09:57 2008 +0000
@@ -1874,6 +1874,7 @@
 	patches/icedtea-display-mode-changer.patch \
 	patches/icedtea-testenv.patch \
 	patches/icedtea-format-warnings.patch \
+<<<<<<< local
 	patches/icedtea-fortify-source.patch \
 	$(ZERO_PATCHES_COND) \
 	patches/icedtea-samejvm-safe.patch \
@@ -1887,6 +1888,9 @@
         patches/security/icedtea-6734167.patch \
         patches/security/icedtea-6755943.patch \
         patches/security/icedtea-6766136.patch
+=======
+	$(ZERO_PATCHES_COND)
+>>>>>>> other
 
 if WITH_RHINO
 ICEDTEA_PATCHES += \
--- a/patches/icedtea-shark.patch	Thu Dec 04 12:36:04 2008 +0000
+++ b/patches/icedtea-shark.patch	Thu Dec 04 14:09:57 2008 +0000
@@ -1,6 +1,304 @@
-diff -ru openjdk/hotspot/src/share/vm/ci/ciMethod.cpp openjdk/hotspot/src/share/vm/ci/ciMethod.cpp
---- openjdk/hotspot/src/share/vm/ci/ciMethod.cpp	2008-06-20 10:22:10.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/ci/ciMethod.cpp	2008-05-19 12:00:23.000000000 +0100
+--- openjdk/hotspot/src/share/vm/oops/methodOop.cpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/oops/methodOop.cpp	2008-12-03 14:33:48.000000000 +0000
+@@ -727,10 +727,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
+ 
+ }
+ 
+--- openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	2008-12-03 14:33:48.000000000 +0000
+@@ -44,6 +44,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;
+--- openjdk/hotspot/src/share/vm/runtime/globals.cpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/globals.cpp	2008-12-03 14:33:48.000000000 +0000
+@@ -176,6 +176,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_EXPERIMENTAL_FLAG_STRUCT, RUNTIME_NOTPRODUCT_FLAG_STRUCT, RUNTIME_MANAGEABLE_FLAG_STRUCT, RUNTIME_PRODUCT_RW_FLAG_STRUCT, RUNTIME_LP64_PRODUCT_FLAG_STRUCT)
+@@ -189,6 +201,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}
+ };
+ 
+--- openjdk/hotspot/src/share/vm/runtime/vframeArray.cpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/vframeArray.cpp	2008-12-03 14:33:49.000000000 +0000
+@@ -64,6 +64,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());
+     }
+   }
+@@ -262,6 +267,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) {
+--- openjdk/hotspot/src/share/vm/runtime/vm_version.cpp.orig	2008-12-03 14:23:37.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp	2008-12-03 14:33:48.000000000 +0000
+@@ -94,12 +94,16 @@
+ #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")
++  #define VMTYPE COMPILER1_PRESENT("Client")   \
++                 COMPILER2_PRESENT("Server")
+ #else
+   #define VMTYPE "Core"
+ #endif // COMPILER1 || COMPILER2
++#endif // SHARK
+ #endif // TIERED
+ #endif // KERNEL
+ 
+--- openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp	2008-12-03 14:33:48.000000000 +0000
+@@ -229,6 +229,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
+@@ -239,6 +240,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
+@@ -349,7 +354,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,
+@@ -890,7 +897,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;
+ 
+@@ -1057,7 +1077,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()) {
+@@ -1808,7 +1828,7 @@
+     if (xtty != NULL)  xtty->tail("statistics");
+   }
+ }
+-#else // COMPILER2
++#else // COMPILER2 || SHARK
+ 
+ 
+ // Stubs for C1 only system.
+@@ -1844,4 +1864,4 @@
+   return buf;
+ }
+ 
+-#endif // COMPILER2
++#endif // COMPILER2 || SHARK
+--- openjdk/hotspot/src/share/vm/runtime/globals.hpp.orig	2008-12-03 14:22:17.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/globals.hpp	2008-12-03 14:33:48.000000000 +0000
+@@ -22,7 +22,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);
+--- openjdk/hotspot/src/share/vm/code/nmethod.hpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/code/nmethod.hpp	2008-12-03 14:33:48.000000000 +0000
+@@ -318,6 +318,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; }
+--- openjdk/hotspot/src/share/vm/code/nmethod.cpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/code/nmethod.cpp	2008-12-03 14:33:48.000000000 +0000
+@@ -65,6 +65,11 @@
+   assert(compiler() != NULL, "must be");
+   return compiler()->is_c2();
+ }
++bool nmethod::is_compiled_by_shark() const {
++  if (is_native_method()) return false;
++  assert(compiler() != NULL, "must be");
++  return compiler()->is_shark();
++}
+ 
+ 
+ 
+@@ -1567,6 +1572,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());
+@@ -1574,6 +1580,7 @@
+     symbolOop signature = call->signature();
+     fr.oops_compiled_arguments_do(signature, is_static, reg_map, f);
+   }
++#endif // !SHARK
+ }
+ 
+ 
+@@ -2003,6 +2010,8 @@
+     tty->print("(c1) ");
+   } else if (is_compiled_by_c2()) {
+     tty->print("(c2) ");
++  } else if (is_compiled_by_shark()) {
++    tty->print("(shark) ");
+   } else {
+     tty->print("(nm) ");
+   }
+--- openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp	2008-12-03 14:33:48.000000000 +0000
+@@ -554,6 +554,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;
+ 
+--- openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp	2008-12-03 14:33:48.000000000 +0000
+@@ -45,18 +45,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
+--- openjdk/hotspot/src/share/vm/ci/ciMethod.hpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/ci/ciMethod.hpp	2008-12-03 14:33:48.000000000 +0000
+@@ -69,7 +69,7 @@
+ 
+   // Optional liveness analyzer.
+   MethodLiveness* _liveness;
+-#ifdef COMPILER2
++#if defined(COMPILER2) || defined(SHARK)
+   ciTypeFlow*     _flow;
+ #endif
+ 
+--- openjdk/hotspot/src/share/vm/ci/ciMethod.cpp.orig	2008-11-22 00:11:18.000000000 +0000
++++ openjdk/hotspot/src/share/vm/ci/ciMethod.cpp	2008-12-03 14:33:48.000000000 +0000
 @@ -56,9 +56,9 @@
    _liveness           = NULL;
    _bcea = NULL;
@@ -66,320 +364,3 @@
  }
  
  // ------------------------------------------------------------------
-diff -ru openjdk/hotspot/src/share/vm/ci/ciMethod.hpp openjdk/hotspot/src/share/vm/ci/ciMethod.hpp
---- openjdk/hotspot/src/share/vm/ci/ciMethod.hpp	2008-06-20 10:22:10.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/ci/ciMethod.hpp	2008-05-19 12:10:30.000000000 +0100
-@@ -69,7 +69,7 @@
- 
-   // Optional liveness analyzer.
-   MethodLiveness* _liveness;
--#ifdef COMPILER2
-+#if defined(COMPILER2) || defined(SHARK)
-   ciTypeFlow*     _flow;
- #endif
- 
-diff -ru openjdk/hotspot/src/share/vm/code/nmethod.cpp openjdk/hotspot/src/share/vm/code/nmethod.cpp
---- openjdk/hotspot/src/share/vm/code/nmethod.cpp	2008-06-20 10:22:11.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/code/nmethod.cpp	2008-04-07 11:49:27.000000000 +0100
-@@ -66,6 +66,11 @@
-   assert(compiler() != NULL, "must be");
-   return compiler()->is_c2();
- }
-+bool nmethod::is_compiled_by_shark() const {
-+  if (is_native_method()) return false;
-+  assert(compiler() != NULL, "must be");
-+  return compiler()->is_shark();
-+}
- 
- 
- 
-@@ -1883,6 +1888,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 -ru openjdk/hotspot/src/share/vm/code/nmethod.hpp openjdk/hotspot/src/share/vm/code/nmethod.hpp
---- openjdk/hotspot/src/share/vm/code/nmethod.hpp	2008-06-20 10:22:11.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/code/nmethod.hpp	2008-04-07 11:48:22.000000000 +0100
-@@ -290,6 +290,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 -ru openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp
---- openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp	2008-06-20 10:22:11.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/compiler/abstractCompiler.hpp	2008-04-07 11:50:35.000000000 +0100
-@@ -45,18 +45,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 -ru openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp
---- openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp	2008-06-20 10:22:11.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp	2008-04-15 17:16:38.000000000 +0100
-@@ -554,6 +554,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 -ru openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp
---- openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	2008-06-20 10:22:11.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	2008-05-06 10:43:55.000000000 +0100
-@@ -44,6 +44,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 -ru openjdk/hotspot/src/share/vm/oops/methodOop.cpp openjdk/hotspot/src/share/vm/oops/methodOop.cpp
---- openjdk/hotspot/src/share/vm/oops/methodOop.cpp	2008-06-20 10:22:11.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/oops/methodOop.cpp	2008-04-15 10:52:44.000000000 +0100
-@@ -730,10 +730,14 @@ void methodOopDesc::set_code(methodHandl
-   }
- 
-   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 -ru openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
---- openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp	2008-06-20 10:22:12.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp	2008-05-19 13:19:54.000000000 +0100
-@@ -999,7 +999,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()) {
-@@ -1750,7 +1750,7 @@
-     if (xtty != NULL)  xtty->tail("statistics");
-   }
- }
--#else // COMPILER2
-+#else // COMPILER2 || SHARK
- 
- 
- // Stubs for C1 only system.
-@@ -1786,4 +1786,4 @@
-   return buf;
- }
- 
--#endif // COMPILER2
-+#endif // COMPILER2 || SHARK
-diff -ru openjdk/hotspot/src/share/vm/runtime/globals.cpp openjdk/hotspot/src/share/vm/runtime/globals.cpp
---- openjdk/hotspot/src/share/vm/runtime/globals.cpp	2008-06-20 10:22:12.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/runtime/globals.cpp	2008-06-19 14:42:50.000000000 +0100
-@@ -158,6 +158,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)
-@@ -168,6 +180,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 -ru openjdk/hotspot/src/share/vm/runtime/globals.hpp openjdk/hotspot/src/share/vm/runtime/globals.hpp
---- openjdk/hotspot/src/share/vm/runtime/globals.hpp	2008-06-20 10:22:23.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/runtime/globals.hpp	2008-03-31 13:32:44.000000000 +0100
-@@ -22,7 +22,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 -ru openjdk/hotspot/src/share/vm/runtime/vm_version.cpp openjdk/hotspot/src/share/vm/runtime/vm_version.cpp
---- openjdk/hotspot/src/share/vm/runtime/vm_version.cpp	2008-06-20 10:22:21.000000000 +0100
-+++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp	2008-04-15 11:22:07.000000000 +0100
-@@ -89,12 +89,16 @@
- #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")
-+  #define VMTYPE COMPILER1_PRESENT("Client")   \
-+                 COMPILER2_PRESENT("Server")
- #else
-   #define VMTYPE "Core"
- #endif // COMPILER1 || COMPILER2
-+#endif // SHARK
- #endif // TIERED
- 
- #ifndef HOTSPOT_VM_DISTRO
-diff -r ef3bb05d21d5 openjdk/hotspot/src/share/vm/code/nmethod.cpp
---- openjdk/hotspot/src/share/vm/code/nmethod.cpp	Fri Aug 08 11:17:59 2008 +0100
-+++ openjdk/hotspot/src/share/vm/code/nmethod.cpp	Fri Aug 08 11:35:04 2008 +0100
-@@ -1453,6 +1453,7 @@ void nmethod::oops_do(OopClosure* f) {
- // 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());
-@@ -1460,6 +1461,7 @@ void nmethod::preserve_callee_argument_o
-     symbolOop signature = call->signature();
-     fr.oops_compiled_arguments_do(signature, is_static, reg_map, f);
-   }
-+#endif // !SHARK
- }
- 
- 
-diff -r 70711eb56d8e openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp
---- openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp	Mon Sep 29 08:47:58 2008 +0100
-+++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp	Mon Sep 29 08:54:36 2008 +0100
-@@ -217,6 +217,7 @@ Deoptimization::UnrollBlock* Deoptimizat
-     
-   }
- 
-+#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
-@@ -227,6 +228,10 @@ Deoptimization::UnrollBlock* Deoptimizat
-   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
-@@ -337,7 +342,9 @@ Deoptimization::UnrollBlock* Deoptimizat
- 
-   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,
-@@ -832,7 +839,20 @@ vframeArray* Deoptimization::create_vfra
-   // 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;
-  
-diff -r 70711eb56d8e openjdk/hotspot/src/share/vm/runtime/vframeArray.cpp
---- openjdk/hotspot/src/share/vm/runtime/vframeArray.cpp	Mon Sep 29 08:47:58 2008 +0100
-+++ openjdk/hotspot/src/share/vm/runtime/vframeArray.cpp	Mon Sep 29 08:56:26 2008 +0100
-@@ -64,6 +64,11 @@ void vframeArrayElement::fill_in(compile
-       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());
-     }
-   }
-@@ -262,6 +267,11 @@ void vframeArrayElement::unpack_on_stack
-     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) {
--- a/patches/icedtea-zero.patch	Thu Dec 04 12:36:04 2008 +0000
+++ b/patches/icedtea-zero.patch	Thu Dec 04 14:09:57 2008 +0000
@@ -1,6 +1,6 @@
---- openjdk/hotspot/src/os/linux/vm/os_linux.cpp.orig	2008-07-27 08:37:02.000000000 +0000
-+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp	2008-07-27 08:43:41.000000000 +0000
-@@ -159,7 +159,9 @@
+--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp.orig	2008-12-03 19:33:43.000000000 +0000
++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp	2008-12-03 19:44:02.000000000 +0000
+@@ -176,7 +176,9 @@
  #endif
  
  // Cpu architecture string
@@ -11,7 +11,7 @@
  static char cpu_arch[] = "ia64";
  #elif defined(IA32)
  static char cpu_arch[] = "i386";
-@@ -1665,7 +1667,14 @@
+@@ -1712,7 +1714,14 @@
      {EM_SPARC32PLUS, EM_SPARC,   ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
      {EM_SPARCV9,     EM_SPARCV9, ELFCLASS64, ELFDATA2MSB, (char*)"Sparc v9 64"},
      {EM_PPC,         EM_PPC,     ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"},
@@ -27,10 +27,10 @@
    };
  
    #if  (defined IA32)
-@@ -1682,9 +1691,23 @@
-     static  Elf32_Half running_arch_code=EM_PPC64; 
-   #elif  (defined __powerpc__)  
-     static  Elf32_Half running_arch_code=EM_PPC; 
+@@ -1729,9 +1738,23 @@
+     static  Elf32_Half running_arch_code=EM_PPC64;
+   #elif  (defined __powerpc__)
+     static  Elf32_Half running_arch_code=EM_PPC;
 +  #elif  (defined ARM)
 +    static  Elf32_Half running_arch_code=EM_ARM;
 +  #elif  (defined S390)
@@ -52,20 +52,20 @@
    #endif
  
    // Identify compatability class for VM's architecture and library's architecture
-@@ -1716,10 +1739,12 @@
-     return NULL; 
+@@ -1763,10 +1786,12 @@
+     return NULL;
    }
  
 +#ifndef S390
    if (lib_arch.elf_class != arch_array[running_arch_index].elf_class) {
      ::snprintf(diag_msg_buf, diag_msg_max_length-1," (Possible cause: architecture word width mismatch)");
-     return NULL; 
+     return NULL;
    }
 +#endif // !S390
  
    if (lib_arch.compat_class != arch_array[running_arch_index].compat_class) {
      if ( lib_arch.name!=NULL ) {
-@@ -2354,7 +2379,9 @@
+@@ -2545,7 +2570,9 @@
      // format has been changed), we'll use the largest page size supported by
      // the processor.
  
@@ -75,9 +75,9 @@
  
      FILE *fp = fopen("/proc/meminfo", "r");
      if (fp) {
---- openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp.orig	2008-07-27 08:37:03.000000000 +0000
-+++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp	2008-07-27 08:38:13.000000000 +0000
-@@ -3030,9 +3030,9 @@
+--- openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp.orig	2008-11-20 08:41:04.000000000 +0000
++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp	2008-12-03 19:40:11.000000000 +0000
+@@ -3031,9 +3031,9 @@
    tty->print_cr("&native_fresult: " INTPTR_FORMAT, (uintptr_t) &this->_native_fresult);
    tty->print_cr("native_lresult: " INTPTR_FORMAT, (uintptr_t) this->_native_lresult);
  #endif
@@ -89,8 +89,28 @@
    tty->print_cr("self_link: " INTPTR_FORMAT, (uintptr_t) this->_self_link);
  }
  
---- openjdk/hotspot/src/share/vm/runtime/icache.cpp.orig	2008-07-27 08:37:02.000000000 +0000
-+++ openjdk/hotspot/src/share/vm/runtime/icache.cpp	2008-07-27 08:38:13.000000000 +0000
+--- openjdk/hotspot/src/share/vm/runtime/jniHandles.hpp.orig	2008-11-20 08:41:06.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/jniHandles.hpp	2008-12-03 19:40:11.000000000 +0000
+@@ -126,9 +126,17 @@
+   // Fill block with bad_handle values
+   void zap();
+ 
++#ifdef ZERO
++ protected:
++  friend class CppInterpreter;
++#endif // ZERO
++
+   // No more handles in the both the current and following blocks
+   void clear() { _top = 0; }
+ 
++#ifdef ZERO
++ private:
++#endif // ZERO
+   // Free list computation
+   void rebuild_free_list();
+ 
+--- openjdk/hotspot/src/share/vm/runtime/icache.cpp.orig	2008-11-20 08:41:06.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/icache.cpp	2008-12-03 19:45:03.000000000 +0000
 @@ -78,6 +78,7 @@
  }
  
@@ -102,13 +122,13 @@
 @@ -97,6 +98,7 @@
    }
    call_flush_stub(start, round_to(nbytes, ICache::line_size) >>
- 		         ICache::log2_line_size);
+                          ICache::log2_line_size);
 +#endif
  }
  
  // For init.cpp
---- openjdk/hotspot/src/share/vm/runtime/mutex.hpp.orig	2008-07-27 08:37:02.000000000 +0000
-+++ openjdk/hotspot/src/share/vm/runtime/mutex.hpp	2008-07-27 08:38:13.000000000 +0000
+--- openjdk/hotspot/src/share/vm/runtime/mutex.hpp.orig	2008-11-20 08:41:06.000000000 +0000
++++ openjdk/hotspot/src/share/vm/runtime/mutex.hpp	2008-12-03 19:40:11.000000000 +0000
 @@ -61,18 +61,10 @@
  } ;
  
@@ -129,28 +149,8 @@
  #endif
  
  class ParkEvent ;
---- openjdk/hotspot/src/share/vm/runtime/jniHandles.hpp.orig	2008-07-27 08:37:02.000000000 +0000
-+++ openjdk/hotspot/src/share/vm/runtime/jniHandles.hpp	2008-07-27 08:38:13.000000000 +0000
-@@ -126,9 +126,17 @@
-   // Fill block with bad_handle values
-   void zap();
- 
-+#ifdef ZERO
-+ protected:
-+  friend class CppInterpreter;
-+#endif // ZERO
-+
-   // No more handles in the both the current and following blocks
-   void clear() { _top = 0; }
- 
-+#ifdef ZERO
-+ private:
-+#endif // ZERO
-   // Free list computation
-   void rebuild_free_list();
- 
---- openjdk/hotspot/src/share/vm/utilities/vmError.cpp.orig	2008-07-27 08:37:02.000000000 +0000
-+++ openjdk/hotspot/src/share/vm/utilities/vmError.cpp	2008-07-27 08:38:13.000000000 +0000
+--- openjdk/hotspot/src/share/vm/utilities/vmError.cpp.orig	2008-12-03 19:33:25.000000000 +0000
++++ openjdk/hotspot/src/share/vm/utilities/vmError.cpp	2008-12-03 19:40:11.000000000 +0000
 @@ -25,6 +25,11 @@
  # include "incls/_precompiled.incl"
  # include "incls/_vmError.cpp.incl"
@@ -163,7 +163,7 @@
  // List of environment variables that should be reported in error log file.
  const char *env_list[] = {
    // All platforms
-@@ -392,6 +397,7 @@
+@@ -398,6 +403,7 @@
         st->cr();
       }
  
@@ -171,7 +171,7 @@
    STEP(110, "(printing stack bounds)" )
  
       if (_verbose) {
-@@ -449,11 +455,16 @@
+@@ -455,11 +461,16 @@
            st->cr();
         }
       }
@@ -188,7 +188,7 @@
         if (jt->has_last_Java_frame()) {
           st->print_cr("Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)");
           for(StackFrameStream sfs(jt); !sfs.is_done(); sfs.next()) {
-@@ -461,6 +472,7 @@
+@@ -467,6 +478,7 @@
             st->cr();
           }
         }
@@ -196,7 +196,7 @@
       }
  
    STEP(140, "(printing VM operation)" )
-@@ -472,6 +484,14 @@ void VMError::report(outputStream* st) {
+@@ -478,6 +490,14 @@
            op->print_on_error(st);
            st->cr();
            st->cr();