15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 #ifndef SHARE_VM_PRIMS_UNIVERSALUPCALLHANDLER_HPP
25 #define SHARE_VM_PRIMS_UNIVERSALUPCALLHANDLER_HPP
26
27 #include "asm/codeBuffer.hpp"
28 #include "code/codeBlob.hpp"
29 #include "prims/foreign_globals.hpp"
30
31 class JavaThread;
32
33 class ProgrammableUpcallHandler {
34 private:
35 static constexpr CodeBuffer::csize_t upcall_stub_size = 1024;
36
37 struct UpcallMethod {
38 Klass* klass;
39 Symbol* name;
40 Symbol* sig;
41 } upcall_method;
42
43 ProgrammableUpcallHandler();
44
45 static const ProgrammableUpcallHandler& instance();
46
47 static void upcall_helper(JavaThread* thread, jobject rec, address buff);
48 static void attach_thread_and_do_upcall(jobject rec, address buff);
49
50 static void handle_uncaught_exception(oop exception);
51 static JavaThread* maybe_attach_and_get_thread(bool* should_detach);
52 static void detach_current_thread();
53
54 static JavaThread* on_entry(OptimizedEntryBlob::FrameData* context);
55 static void on_exit(OptimizedEntryBlob::FrameData* context);
56 public:
57 static address generate_optimized_upcall_stub(jobject mh, Method* entry, jobject jabi, jobject jconv);
58 static address generate_upcall_stub(jobject rec, jobject abi, jobject buffer_layout);
59 static bool supports_optimized_upcalls();
60 };
61
62 #endif // SHARE_VM_PRIMS_UNIVERSALUPCALLHANDLER_HPP
|
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 #ifndef SHARE_VM_PRIMS_UNIVERSALUPCALLHANDLER_HPP
25 #define SHARE_VM_PRIMS_UNIVERSALUPCALLHANDLER_HPP
26
27 #include "asm/codeBuffer.hpp"
28 #include "code/codeBlob.hpp"
29 #include "prims/foreign_globals.hpp"
30
31 class JavaThread;
32
33 class ProgrammableUpcallHandler {
34 private:
35 static void handle_uncaught_exception(oop exception);
36 static JavaThread* maybe_attach_and_get_thread();
37 static void detach_current_thread();
38
39 static JavaThread* on_entry(OptimizedEntryBlob::FrameData* context);
40 static void on_exit(OptimizedEntryBlob::FrameData* context);
41 public:
42 static address generate_optimized_upcall_stub(jobject mh, Method* entry,
43 BasicType* in_sig_bt, int total_in_args,
44 BasicType* out_sig_bt, int total_out_args,
45 BasicType ret_type,
46 jobject jabi, jobject jconv,
47 bool needs_return_buffer, int ret_buf_size);
48 };
49
50 #endif // SHARE_VM_PRIMS_UNIVERSALUPCALLHANDLER_HPP
|