Thread: [Sablevm-user] Assertion failure
Brought to you by:
egagnon
From: Archie C. <ar...@de...> - 2003-02-18 18:00:10
|
Hi, I'm trying to use SableVM 1.0.5 to run Soot 1.2.5 and getting an assertion failure when trying to process java.lang.String. Here is a test program: import soot.*; import soot.jimple.*; import java.util.*; public class x { public static void main(String[] args) throws Exception { SootClass c = Scene.v().loadClassAndSupport("java.lang.String"); c.setApplicationClass(); for (Iterator i = c.methodIterator(); i.hasNext(); ) { SootMethod m = (SootMethod)i.next(); Body body = (JimpleBody)m.retrieveActiveBody(); } } } Here's what I get: $ sablevm x assertion "instruction->stack_and_local_map->stack_size >= 0" failed: file "prepare_code.c", line 1088 Abort(core dumped) FYI I also filed this on the bug system: http://sourceforge.net/tracker/index.php?func=detail&aid=688788&group_id=5523&atid=105523 Any ideas appreciated... Thanks, -Archie __________________________________________________________________________ Archie Cobbs * Packet Design * http://www.packetdesign.com |
From: Prof. E. M. G. <eti...@uq...> - 2003-02-19 14:25:23
|
Hi Archie, Archie Cobbs wrote: > I'm trying to use SableVM 1.0.5 to run Soot 1.2.5 and getting an > assertion failure when trying to process java.lang.String. >=20 > Here is a test program: =2E.. > Here's what I get: >=20 > $ sablevm x > assertion "instruction->stack_and_local_map->stack_size >=3D 0" fai= led: file "prepare_code.c", line 1088 > Abort(core dumped) =B7=B7=B7 > Any ideas appreciated... This *should* only happen if you were trying to execute unverifiable byte= code (a=20 verifier would reject the code). Could you find out exactly which method= is=20 executing, then send us the javap -c -l -private -s -verbose output for that method? In a debugging version of SableVM, you can type: sablevm --property=3Dsablevm.verbose.methods=3Dtrue x Etienne --=20 Etienne M. Gagnon, Ph.D. http://www.info.uqam.ca/~egagnon/ SableVM: http://www.sablevm.org/ SableCC: http://www.sablecc.org/ |
From: Archie C. <ar...@de...> - 2003-02-19 18:15:07
|
Prof. Etienne M. Gagnon wrote: > > Here's what I get: > > > > $ sablevm x > > assertion "instruction->stack_and_local_map->stack_size >= 0" failed: file "prepare_code.c", line 1088 > > Abort(core dumped) > ??? > > Any ideas appreciated... > > This *should* only happen if you were trying to execute unverifiable bytecode (a > verifier would reject the code). Could you find out exactly which method is > executing, then send us the > javap -c -l -private -s -verbose > output for that method? The JavaP output is below. The offending method is the second constructor: JAssignStmt$LinkedVariableBox.<init>(JAssignStmt, JAssignStmt$2, Value) Thanks, -Archie __________________________________________________________________________ Archie Cobbs * Packet Design * http://www.packetdesign.com Compiled from JAssignStmt.java private class soot.jimple.internal.JAssignStmt. LinkedVariableBox extends soot.jimple.internal.VariableBox /* ACC_SUPER bit NOT set */ { private final soot.jimple.internal.JAssignStmt this$0; /* Lsoot/jimple/internal/JAssignStmt; */ soot.ValueBox otherBox; /* Lsoot/ValueBox; */ private soot.jimple.internal.JAssignStmt.LinkedVariableBox(soot.jimple.internal.JAssignStmt,soot.Value); /* (Lsoot/jimple/internal/JAssignStmt;Lsoot/Value;)V */ /* Stack=2, Locals=3, Args_size=3 */ soot.jimple.internal.JAssignStmt.LinkedVariableBox(soot.jimple.internal.JAssignStmt,soot.jimple.internal.JAssignStmt$2,soot.Value); /* (Lsoot/jimple/internal/JAssignStmt;Lsoot/jimple/internal/JAssignStmt$2;Lsoot/Value;)V */ /* Stack=3, Locals=4, Args_size=4 */ public boolean canContainValue(soot.Value); /* (Lsoot/Value;)Z */ /* Stack=2, Locals=3, Args_size=2 */ public void setOtherBox(soot.ValueBox); /* (Lsoot/ValueBox;)V */ /* Stack=2, Locals=2, Args_size=2 */ } Method soot.jimple.internal.JAssignStmt. LinkedVariableBox(soot.jimple.internal.JAssignStmt,soot.Value) 0 aload_0 1 aload_2 2 invokespecial #7 <Method soot.jimple.internal.VariableBox(soot.Value)> 5 aload_0 6 aload_1 7 putfield #12 <Field soot.jimple.internal.JAssignStmt this$0> 10 aload_0 11 aconst_null 12 putfield #11 <Field soot.ValueBox otherBox> 15 return Line numbers for method soot.jimple.internal.JAssignStmt. LinkedVariableBox(soot.jimple.internal.JAssignStmt,soot.Value) line 51: 0 line 42: 5 line 51: 6 line 42: 7 line 47: 10 line 49: 15 Method soot.jimple.internal.JAssignStmt. LinkedVariableBox(soot.jimple.internal.JAssignStmt,soot.jimple.internal.JAssignStmt$2,soot.Value) 0 aload_0 1 aload_1 2 aload_3 3 invokespecial #8 <Method soot.jimple.internal.JAssignStmt. LinkedVariableBox(soot.jimple.internal.JAssignStmt,soot.Value)> 6 return Line numbers for method soot.jimple.internal.JAssignStmt. LinkedVariableBox(soot.jimple.internal.JAssignStmt,soot.jimple.internal.JAssignStmt$2,soot.Value) line 49: 0 Method boolean canContainValue(soot.Value) 0 aload_0 1 getfield #11 <Field soot.ValueBox otherBox> 4 ifnonnull 13 7 aload_0 8 aload_1 9 invokespecial #9 <Method boolean canContainValue(soot.Value)> 12 ireturn 13 aload_0 14 getfield #11 <Field soot.ValueBox otherBox> 17 invokeinterface (args 1) #10 <InterfaceMethod soot.Value getValue()> 22 astore_2 23 aload_0 24 aload_1 25 invokespecial #9 <Method boolean canContainValue(soot.Value)> 28 ifeq 59 31 aload_1 32 instanceof #1 <Class soot.Local> 35 ifne 63 38 aload_1 39 instanceof #3 <Class soot.jimple.Constant> 42 ifne 63 45 aload_2 46 instanceof #1 <Class soot.Local> 49 ifne 63 52 aload_2 53 instanceof #3 <Class soot.jimple.Constant> 56 ifne 63 59 iconst_0 60 goto 64 63 iconst_1 64 ireturn Line numbers for method boolean canContainValue(soot.Value) line 58: 0 line 59: 13 line 60: 23 line 61: 31 line 60: 59 Method void setOtherBox(soot.ValueBox) 0 aload_0 1 aload_1 2 putfield #11 <Field soot.ValueBox otherBox> 5 return Line numbers for method void setOtherBox(soot.ValueBox) line 54: 0 |