1.1 --- a/src/share/vm/runtime/frame.cpp Thu Jun 20 16:30:44 2013 -0700 1.2 +++ b/src/share/vm/runtime/frame.cpp Fri Jun 21 15:56:24 2013 -0700 1.3 @@ -1008,6 +1008,7 @@ 1.4 OopClosure* _f; 1.5 int _offset; // the current offset, incremented with each argument 1.6 bool _has_receiver; // true if the callee has a receiver 1.7 + bool _has_appendix; // true if the call has an appendix 1.8 frame _fr; 1.9 RegisterMap* _reg_map; 1.10 int _arg_size; 1.11 @@ -1027,19 +1028,20 @@ 1.12 } 1.13 1.14 public: 1.15 - CompiledArgumentOopFinder(Symbol* signature, bool has_receiver, OopClosure* f, frame fr, const RegisterMap* reg_map) 1.16 + CompiledArgumentOopFinder(Symbol* signature, bool has_receiver, bool has_appendix, OopClosure* f, frame fr, const RegisterMap* reg_map) 1.17 : SignatureInfo(signature) { 1.18 1.19 // initialize CompiledArgumentOopFinder 1.20 _f = f; 1.21 _offset = 0; 1.22 _has_receiver = has_receiver; 1.23 + _has_appendix = has_appendix; 1.24 _fr = fr; 1.25 _reg_map = (RegisterMap*)reg_map; 1.26 - _arg_size = ArgumentSizeComputer(signature).size() + (has_receiver ? 1 : 0); 1.27 + _arg_size = ArgumentSizeComputer(signature).size() + (has_receiver ? 1 : 0) + (has_appendix ? 1 : 0); 1.28 1.29 int arg_size; 1.30 - _regs = SharedRuntime::find_callee_arguments(signature, has_receiver, &arg_size); 1.31 + _regs = SharedRuntime::find_callee_arguments(signature, has_receiver, has_appendix, &arg_size); 1.32 assert(arg_size == _arg_size, "wrong arg size"); 1.33 } 1.34 1.35 @@ -1049,12 +1051,16 @@ 1.36 _offset++; 1.37 } 1.38 iterate_parameters(); 1.39 + if (_has_appendix) { 1.40 + handle_oop_offset(); 1.41 + _offset++; 1.42 + } 1.43 } 1.44 }; 1.45 1.46 -void frame::oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f) { 1.47 +void frame::oops_compiled_arguments_do(Symbol* signature, bool has_receiver, bool has_appendix, const RegisterMap* reg_map, OopClosure* f) { 1.48 ResourceMark rm; 1.49 - CompiledArgumentOopFinder finder(signature, has_receiver, f, *this, reg_map); 1.50 + CompiledArgumentOopFinder finder(signature, has_receiver, has_appendix, f, *this, reg_map); 1.51 finder.oops_do(); 1.52 } 1.53