[Soot-list] Problem with JSR conversion
Eric Bodden
bodden at st.informatik.tu-darmstadt.de
Sat Jan 9 11:40:40 EST 2010
When trying Soot on the new DaCapo version I came across this problem:
Method renameFile in class org.apache.lucene.store.FSDirectory
contains JSR instructions. Soot fails with this exception when trying
to convert them:
Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.get(Hashtable.java:334)
at soot.coffi.CFG.adjustExceptionTable(CFG.java:775)
at soot.coffi.CFG.eliminateJsrRets(CFG.java:351)
at soot.coffi.CFG.<init>(CFG.java:83)
at soot.coffi.CoffiMethodSource.getBody(CoffiMethodSource.java:87)
at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:82)
at soot.SootMethod.retrieveActiveBody(SootMethod.java:329)
at soot.PackManager.retrieveAllBodies(PackManager.java:964)
at soot.PackManager.runPacks(PackManager.java:331)
at soot.Main.run(Main.java:202)
at soot.Main.main(Main.java:145)
Unfortunately I know nothing about this code and don't quite seem to
be able to fix it. Feng Qian seems to be the last one who did
significant work on this code. Do you have any ideas what may be wrong
there?
javap output of the method is below...
Cheers,
Eric
--
Eric Bodden
Software Technology Group, Technische Universität Darmstadt, Germany
Tel: +49 6151 16-5478 Fax: +49 6151 16-5410
Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt
public synchronized void renameFile(java.lang.String,
java.lang.String) throws java.io.IOException;
Code:
0: aload_0
1: invokevirtual #75; //Method ensureOpen:()V
4: new #7; //class java/io/File
7: dup
8: aload_0
9: getfield #40; //Field directory:Ljava/io/File;
12: aload_1
13: invokespecial #46; //Method
java/io/File."<init>":(Ljava/io/File;Ljava/lang/String;)V
16: astore_3
17: new #7; //class java/io/File
20: dup
21: aload_0
22: getfield #40; //Field directory:Ljava/io/File;
25: aload_2
26: invokespecial #46; //Method
java/io/File."<init>":(Ljava/io/File;Ljava/lang/String;)V
29: astore 4
31: aload 4
33: invokevirtual #11; //Method java/io/File.exists:()Z
36: ifeq 75
39: aload 4
41: invokevirtual #47; //Method java/io/File.delete:()Z
44: ifne 75
47: new #13; //class java/io/IOException
50: dup
51: new #14; //class java/lang/StringBuffer
54: dup
55: invokespecial #15; //Method java/lang/StringBuffer."<init>":()V
58: ldc #48; //String Cannot delete
60: invokevirtual #18; //Method
java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
63: aload 4
65: invokevirtual #16; //Method
java/lang/StringBuffer.append:(Ljava/lang/Object;)Ljava/lang/StringBuffer;
68: invokevirtual #19; //Method
java/lang/StringBuffer.toString:()Ljava/lang/String;
71: invokespecial #20; //Method
java/io/IOException."<init>":(Ljava/lang/String;)V
74: athrow
75: aload_3
76: aload 4
78: invokevirtual #80; //Method java/io/File.renameTo:(Ljava/io/File;)Z
81: ifne 345
84: aconst_null
85: astore 5
87: aconst_null
88: astore 6
90: new #81; //class java/io/FileInputStream
93: dup
94: aload_3
95: invokespecial #82; //Method
java/io/FileInputStream."<init>":(Ljava/io/File;)V
98: astore 5
100: new #83; //class java/io/FileOutputStream
103: dup
104: aload 4
106: invokespecial #84; //Method
java/io/FileOutputStream."<init>":(Ljava/io/File;)V
109: astore 6
111: aload_0
112: getfield #53; //Field buffer:[B
115: ifnonnull 127
118: aload_0
119: sipush 1024
122: newarray byte
124: putfield #53; //Field buffer:[B
127: aload 5
129: aload_0
130: getfield #53; //Field buffer:[B
133: invokevirtual #85; //Method java/io/InputStream.read:([B)I
136: dup
137: istore 7
139: iflt 157
142: aload 6
144: aload_0
145: getfield #53; //Field buffer:[B
148: iconst_0
149: iload 7
151: invokevirtual #86; //Method java/io/OutputStream.write:([BII)V
154: goto 127
157: aload_3
158: invokevirtual #47; //Method java/io/File.delete:()Z
161: pop
162: jsr 227
165: goto 345
168: astore 7
170: new #13; //class java/io/IOException
173: dup
174: new #14; //class java/lang/StringBuffer
177: dup
178: invokespecial #15; //Method java/lang/StringBuffer."<init>":()V
181: ldc #87; //String Cannot rename
183: invokevirtual #18; //Method
java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
186: aload_3
187: invokevirtual #16; //Method
java/lang/StringBuffer.append:(Ljava/lang/Object;)Ljava/lang/StringBuffer;
190: ldc #88; //String to
192: invokevirtual #18; //Method
java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
195: aload 4
197: invokevirtual #16; //Method
java/lang/StringBuffer.append:(Ljava/lang/Object;)Ljava/lang/StringBuffer;
200: invokevirtual #19; //Method
java/lang/StringBuffer.toString:()Ljava/lang/String;
203: invokespecial #20; //Method
java/io/IOException."<init>":(Ljava/lang/String;)V
206: astore 8
208: aload 8
210: aload 7
212: invokevirtual #89; //Method
java/io/IOException.initCause:(Ljava/lang/Throwable;)Ljava/lang/Throwable;
215: pop
216: aload 8
218: athrow
219: astore 9
221: jsr 227
224: aload 9
226: athrow
227: astore 10
229: aload 5
231: ifnull 277
234: aload 5
236: invokevirtual #90; //Method java/io/InputStream.close:()V
239: goto 277
242: astore 11
244: new #29; //class java/lang/RuntimeException
247: dup
248: new #14; //class java/lang/StringBuffer
251: dup
252: invokespecial #15; //Method java/lang/StringBuffer."<init>":()V
255: ldc #91; //String Cannot close input stream:
257: invokevirtual #18; //Method
java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
260: aload 11
262: invokevirtual #92; //Method
java/io/IOException.toString:()Ljava/lang/String;
265: invokevirtual #18; //Method
java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
268: invokevirtual #19; //Method
java/lang/StringBuffer.toString:()Ljava/lang/String;
271: aload 11
273: invokespecial #32; //Method
java/lang/RuntimeException."<init>":(Ljava/lang/String;Ljava/lang/Throwable;)V
276: athrow
277: jsr 291
280: goto 343
283: astore 12
285: jsr 291
288: aload 12
290: athrow
291: astore 13
293: aload 6
295: ifnull 341
298: aload 6
300: invokevirtual #93; //Method java/io/OutputStream.close:()V
303: goto 341
306: astore 14
308: new #29; //class java/lang/RuntimeException
311: dup
312: new #14; //class java/lang/StringBuffer
315: dup
316: invokespecial #15; //Method java/lang/StringBuffer."<init>":()V
319: ldc #94; //String Cannot close output stream:
321: invokevirtual #18; //Method
java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
324: aload 14
326: invokevirtual #92; //Method
java/io/IOException.toString:()Ljava/lang/String;
329: invokevirtual #18; //Method
java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
332: invokevirtual #19; //Method
java/lang/StringBuffer.toString:()Ljava/lang/String;
335: aload 14
337: invokespecial #32; //Method
java/lang/RuntimeException."<init>":(Ljava/lang/String;Ljava/lang/Throwable;)V
340: athrow
341: ret 13
343: ret 10
345: return
Exception table:
from to target type
90 162 168 Class java/io/IOException
90 165 219 any
168 224 219 any
234 239 242 Class java/io/IOException
229 280 283 any
283 288 283 any
298 303 306 Class java/io/IOException
More information about the Soot-list
mailing list