This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: FYI: more verifier fixes


I'm checking this in.  With this patch we can now load and verify
every class in Mauve.

Bugs fixed in this patch

* iinc and arraylength had wrong length in the branch prepass

* All calls to check_no_uninitialized_objects passed in the wrong
  argument

Tom

Index: ChangeLog
from  Tom Tromey  <tromey@redhat.com>
	* verify.cc (_Jv_BytecodeVerifier::branch_prepass) [op_iinc]:
	Uses two operand bytes, not one.
	[op_arraylength]: Has no operands in bytecode.
	(_Jv_BytecodeVerifier::push_jump): Fixed call to
	check_no_uninitialized_objects.
	(_Jv_BytecodeVerifier::push_exception_jump): Likewise.
	(_Jv_BytecodeVerifier::handle_ret_insn): Likewise.
	(_Jv_BytecodeVerifier::handle_jsr_insn): Likewise.

Index: verify.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/verify.cc,v
retrieving revision 1.15
diff -u -r1.15 verify.cc
--- verify.cc 2001/11/20 00:38:40 1.15
+++ verify.cc 2001/11/20 05:14:44
@@ -1037,13 +1037,13 @@
   {
     int npc = compute_jump (offset);
     if (npc < PC)
-      current_state->check_no_uninitialized_objects (current_method->max_stack);
+      current_state->check_no_uninitialized_objects (current_method->max_locals);
     push_jump_merge (npc, current_state);
   }
 
   void push_exception_jump (type t, int pc)
   {
-    current_state->check_no_uninitialized_objects (current_method->max_stack,
+    current_state->check_no_uninitialized_objects (current_method->max_locals,
 						  true);
     state s (current_state, current_method->max_stack,
 	     current_method->max_locals);
@@ -1114,7 +1114,7 @@
 	// in the enclosing context.
 	current_state->subroutine = get_subroutine (subr->pc);
 	if (subr->pc < PC)
-	  current_state->check_no_uninitialized_objects (current_method->max_stack);
+	  current_state->check_no_uninitialized_objects (current_method->max_locals);
 	push_jump_merge (subr->pc, current_state, true);
       }
 
@@ -1139,7 +1139,7 @@
     int npc = compute_jump (offset);
 
     if (npc < PC)
-      current_state->check_no_uninitialized_objects (current_method->max_stack);
+      current_state->check_no_uninitialized_objects (current_method->max_locals);
     check_nonrecursive_call (current_state->subroutine, npc);
 
     // Temporarily modify the current state so that it looks like we are
@@ -1344,7 +1344,6 @@
 	  case op_lneg:
 	  case op_fneg:
 	  case op_dneg:
-	  case op_iinc:
 	  case op_i2l:
 	  case op_i2f:
 	  case op_i2d:
@@ -1371,6 +1370,7 @@
 	  case op_areturn:
 	  case op_return:
 	  case op_athrow:
+	  case op_arraylength:
 	    break;
 
 	  case op_bipush:
@@ -1385,12 +1385,12 @@
 	  case op_fstore:
 	  case op_dstore:
 	  case op_astore:
-	  case op_arraylength:
 	  case op_ret:
 	  case op_newarray:
 	    get_byte ();
 	    break;
 
+	  case op_iinc:
 	  case op_sipush:
 	  case op_ldc_w:
 	  case op_ldc2_w:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]