another patch for better verifier diagnostics

Per Bothner per@bothner.com
Thu Mar 15 20:18:00 GMT 2001


This is another one in my occasional serious of verifier patches
to improve error messages on verifier failures, inspired by Kawa
code generation bugs.  This one improves handling of the "dup"
family of opercodes.

I've checked this into the trunk.

2001-03-13  Per Bothner  <per@bothner.com>

	* verify.c (verify_jvm_instructions):  Better error msgs for dup.
	(type_stack_dup):  Remove no-longer neded error check.

Index: verify.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/verify.c,v
retrieving revision 1.39
diff -u -p -r1.39 verify.c
--- verify.c	2001/02/04 22:44:09	1.39
+++ verify.c	2001/03/16 04:10:59
@@ -294,8 +294,6 @@ type_stack_dup (size, offset)
 {
   tree type[4];
   int index;
-  if (size + offset > stack_pointer)
-    error ("stack underflow - dup* operation");
   for (index = 0;  index < size + offset; index++)
     {
       type[index] = stack_type_map[stack_pointer - 1];
@@ -923,12 +921,18 @@ verify_jvm_instructions (jcf, byte_ops, 
 	case OPCODE_new:
 	  PUSH_TYPE (get_class_constant (jcf, IMMEDIATE_u2));
 	  break;
-	case OPCODE_dup:     type_stack_dup (1, 0);  break;
-	case OPCODE_dup_x1:  type_stack_dup (1, 1);  break;
-	case OPCODE_dup_x2:  type_stack_dup (1, 2);  break;
-	case OPCODE_dup2:    type_stack_dup (2, 0);  break;
-	case OPCODE_dup2_x1: type_stack_dup (2, 1);  break;
-	case OPCODE_dup2_x2: type_stack_dup (2, 2);  break;
+	case OPCODE_dup:     wide = 1; index = 0;  goto dup;
+	case OPCODE_dup_x1:  wide = 1; index = 1;  goto dup;
+	case OPCODE_dup_x2:  wide = 1; index = 2;  goto dup;
+	case OPCODE_dup2:    wide = 2; index = 0;  goto dup;
+	case OPCODE_dup2_x1: wide = 2; index = 1;  goto dup;
+	case OPCODE_dup2_x2: wide = 2; index = 2;  goto dup;
+	dup:
+	  if (wide + index > stack_pointer)
+	    VERIFICATION_ERROR ("stack underflow - dup* operation");
+	  type_stack_dup (wide, index);
+	  wide = 0;
+	  break;
 	case OPCODE_pop:  index = 1;  goto pop;
 	case OPCODE_pop2: index = 2;  goto pop;
 	pop:

-- 
	--Per Bothner
per@bothner.com   http://www.bothner.com/~per/



More information about the Java-patches mailing list