Mercurial > hg > release > icedtea6-1.6
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