Hotspot Zero patch for invokedynamic
Andrew Dinn
adinn at redhat.com
Tue May 8 08:08:20 PDT 2012
Enclosed below are details of a patch to the hsx/hotspot-main tree. The
patch fixes some errors which manifested in the Zero ARM code when
running the TCK tests which exercise method handles. This patch has
already been applied to the iced tea 7-2.1 hotspot hg repository and
found to correct the errors when retested on ARM. However, since the
changes actually apply to Zero code (none of which is not ARM-specific)
I think it really ought to be included in the hotspot tree.
I would be grateful if someone would agree to sponsor this patch for
inclusion into the relevant hotspot repo(s).
n.b. I originally posted this last week with a full webrev attached but
the note was held (for all I know still may be held) awaiting moderation
because of the size of the attachment. I will happily forward the webrev
to whoever is willing to sponsor this patch.
regards,
Andrew Dinn
-----------
Principal Software Engineer
Red Hat UK Ltd
Registered in UK and Wales under Company Registration No. 3798903
Directors: Michael Cunningham (USA), Mark Hegarty (Ireland), Matt Parson
(USA), Charlie Peters (USA)
index.html
----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---
Code Review for hotspot
Prepared by: "Andrew Dinn " on Fri May 4 17:40:58 BST 2012
Workspace: /ssd/home/adinn/redhat/openjdk/hsx/hotspot-main/hotspot
Compare against: http://hg.openjdk.java.net/hsx/hotspot-main//hotspot
Compare against version: 3292
Summary of changes: 19 lines changed: 19 ins; 0 del; 0 mod; 1565 unchg
Patch of changes: hotspot.patch
----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---
hotspot.patch:
----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---
--- old/src/cpu/zero/vm/cppInterpreter_zero.cpp 2012-05-04
17:40:57.837805644 +0100
+++ new/src/cpu/zero/vm/cppInterpreter_zero.cpp 2012-05-04
17:40:57.756806657 +0100
@@ -1026,6 +1026,16 @@
java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle);
oop arg = VMSLOTS_OBJECT(arg_slot);
jvalue arg_value;
+ if (arg == NULL) {
+ // queue a nullpointer exception for the caller
+ stack->set_sp(calculate_unwind_sp(stack, method_handle));
+ CALL_VM_NOCHECK_NOFIX(
+ throw_exception(
+ thread, vmSymbols::java_lang_NullPointerException()));
+ // NB all oops trashed!
+ assert(HAS_PENDING_EXCEPTION, "should do");
+ return;
+ }
BasicType arg_type = java_lang_boxing_object::get_value(arg,
&arg_value);
if (arg_type == T_LONG || arg_type == T_DOUBLE) {
intptr_t *unwind_sp = calculate_unwind_sp(stack, method_handle);
@@ -1112,6 +1122,15 @@
case T_SHORT:
return;
}
+ // INT results sometimes need narrowing
+ case T_BOOLEAN:
+ case T_CHAR:
+ case T_BYTE:
+ case T_SHORT:
+ switch (src_rtype) {
+ case T_INT:
+ return;
+ }
}
tty->print_cr("unhandled conversion:");
----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---
More information about the hotspot-dev
mailing list