25
26 #include "precompiled.hpp"
27 #include "assembler_zero.inline.hpp"
28 #include "entry_zero.hpp"
29 #include "interpreter/cppInterpreter.hpp"
30 #include "memory/resourceArea.hpp"
31 #include "nativeInst_zero.hpp"
32 #include "oops/oop.inline.hpp"
33 #include "runtime/handles.hpp"
34 #include "runtime/sharedRuntime.hpp"
35 #include "runtime/stubRoutines.hpp"
36 #include "utilities/ostream.hpp"
37 #ifdef COMPILER1
38 #include "c1/c1_Runtime1.hpp"
39 #endif
40
41 // This method is called by nmethod::make_not_entrant_or_zombie to
42 // insert a jump to SharedRuntime::get_handle_wrong_method_stub()
43 // (dest) at the start of a compiled method (verified_entry) to avoid
44 // a race where a method is invoked while being made non-entrant.
45 //
46 // In Shark, verified_entry is a pointer to a SharkEntry. We can
47 // handle this simply by changing it's entry point to point at the
48 // interpreter. This only works because the interpreter and Shark
49 // calling conventions are the same.
50
51 void NativeJump::patch_verified_entry(address entry,
52 address verified_entry,
53 address dest) {
54 assert(dest == SharedRuntime::get_handle_wrong_method_stub(), "should be");
55
56 #ifdef CC_INTERP
57 ((ZeroEntry*) verified_entry)->set_entry_point(
58 (address) CppInterpreter::normal_entry);
59 #else
60 Unimplemented();
61 #endif // CC_INTERP
62 }
|
25
26 #include "precompiled.hpp"
27 #include "assembler_zero.inline.hpp"
28 #include "entry_zero.hpp"
29 #include "interpreter/cppInterpreter.hpp"
30 #include "memory/resourceArea.hpp"
31 #include "nativeInst_zero.hpp"
32 #include "oops/oop.inline.hpp"
33 #include "runtime/handles.hpp"
34 #include "runtime/sharedRuntime.hpp"
35 #include "runtime/stubRoutines.hpp"
36 #include "utilities/ostream.hpp"
37 #ifdef COMPILER1
38 #include "c1/c1_Runtime1.hpp"
39 #endif
40
41 // This method is called by nmethod::make_not_entrant_or_zombie to
42 // insert a jump to SharedRuntime::get_handle_wrong_method_stub()
43 // (dest) at the start of a compiled method (verified_entry) to avoid
44 // a race where a method is invoked while being made non-entrant.
45
46 void NativeJump::patch_verified_entry(address entry,
47 address verified_entry,
48 address dest) {
49 assert(dest == SharedRuntime::get_handle_wrong_method_stub(), "should be");
50
51 #ifdef CC_INTERP
52 ((ZeroEntry*) verified_entry)->set_entry_point(
53 (address) CppInterpreter::normal_entry);
54 #else
55 Unimplemented();
56 #endif // CC_INTERP
57 }
|