/* Sun-$Revision: 23.3 $ */ /* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University. See the LICENSE file for license information. */ # pragma interface class NLRSupport /* AllStatic */ { private: // When the compiled code for an NLR static bool _have_NLR_through_C; // set before Self returns to C public: static bool have_NLR_through_C() { return _have_NLR_through_C; } static void reset_have_NLR_through_C() { _have_NLR_through_C = false; } static void set_have_NLR_through_C() { _have_NLR_through_C = true; } // accessors for NLR vars above: static oop NLR_result_from_C(); static int32 NLR_home_from_C(); static int32 NLR_home_ID_from_C(); static void set_NLR_result_from_C(oop x); static void set_NLR_home_from_C(int32 x); static void set_NLR_home_ID_from_C(int32 x); // for non-local returns coming from C static void volatile continue_NLR_into_Self(bool removePatches); // to continue the NLR after C cleanup static void save_NLR_results(oop res, int32 targetFrame = 0, int32 targetID = 0); static bool is_bad_home_reference(char* addr); static void volatile unwind_stack_to_kill_process(oop res); // Handling nonlifo block NLRs from compiled code # if defined(FAST_COMPILER) || defined(SIC_COMPILER) static void non_lifo_abort_from_continuePC(); static void non_lifo_abort(pc_t contPC); private: static void fix_current_return_address(char* addr); # endif public: private: static volatile void continue_NLR_into_interpreted_Self(); static volatile void continue_NLR_from_compiled_nonLIFO_block(frame* vmf); static volatile void continue_NLR_into_compiled_Self(bool remove_patches, frame* vmf); };