Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8278874

VerifyStack logic is too permissive

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Unresolved
    • Icon: P4 P4
    • tbd
    • 19
    • hotspot
    • None

      842 /* SPARC */
      843 (iframe->interpreter_frame_expression_stack_size() == mask.expression_stack_size() + callee_size_of_parameters) ||
      844 /* x86 */
      845 (iframe->interpreter_frame_expression_stack_size() == mask.expression_stack_size() + callee_max_locals) ||
      846 (try_next_mask &&
      847 (iframe->interpreter_frame_expression_stack_size() == (next_mask_expression_stack_size -
      848 top_frame_expression_stack_adjustment))) ||
      849 (is_top_frame && (exec_mode == Unpack_exception) && iframe->interpreter_frame_expression_stack_size() == 0) ||
      850 (is_top_frame && (exec_mode == Unpack_uncommon_trap || exec_mode == Unpack_reexecute || el->should_reexecute()) &&
      851 (iframe->interpreter_frame_expression_stack_size() == mask.expression_stack_size() + cur_invoke_parameter_size))

      This is extra conservative. It applies both x86 and SPARC (obsolete) logic to all platforms. The special case for Unpack_exception may not be needed.

      I found a problem with arraylength (see JDK-8278384), but it goes unnoticed because the VerifyStack logic is too permissive.

            dlong Dean Long
            dlong Dean Long
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: