[PATCH] Fix POP2 opcode handling bug with two category 1 values at the stack top.

This commit is contained in:
Maxim Degtyarev
2017-10-18 09:43:38 +03:00
committed by Egor Ushakov
parent faaab500e3
commit e7854376b8
14 changed files with 254 additions and 31 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,27 @@
package pkg;
public class TestPop2OneDoublePop2 {
public static void main(String... var0) {
double var10002 = 3.14159265358D;// 24
System.out.println(1234567890);// 22 23 26
}// 27
}
class 'pkg/TestPop2OneDoublePop2' {
method 'main ([Ljava/lang/String;)V' {
0 5
3 5
5 4
9 5
c 6
}
}
Lines mapping:
22 <-> 6
23 <-> 6
24 <-> 5
26 <-> 6
27 <-> 7
Not mapped:
25

View File

@@ -0,0 +1,27 @@
package pkg;
public class TestPop2OneLongPop2 {
public static void main(String... var0) {
long var10002 = -889275714L;// 24
System.out.println(1234567890);// 22 23 26
}// 27
}
class 'pkg/TestPop2OneLongPop2' {
method 'main ([Ljava/lang/String;)V' {
0 5
3 5
5 4
9 5
c 6
}
}
Lines mapping:
22 <-> 6
23 <-> 6
24 <-> 5
26 <-> 6
27 <-> 7
Not mapped:
25

View File

@@ -0,0 +1,30 @@
package pkg;
public class TestPop2TwoIntPop2 {
public static void main(String... var0) {
char var10002 = '쫾';// 24
char var10003 = '몾';// 25
System.out.println(1234567890);// 22 23 27
}// 28
}
class 'pkg/TestPop2TwoIntPop2' {
method 'main ([Ljava/lang/String;)V' {
0 6
3 6
5 4
7 5
a 6
d 7
}
}
Lines mapping:
22 <-> 7
23 <-> 7
24 <-> 5
25 <-> 6
27 <-> 7
28 <-> 8
Not mapped:
26

View File

@@ -0,0 +1,31 @@
package pkg;
public class TestPop2TwoIntTwoPop {
public static void main(String... var0) {
char var10002 = '쫾';// 24
char var10003 = '몾';// 25
System.out.println(1234567890);// 22 23 28
}// 29
}
class 'pkg/TestPop2TwoIntTwoPop' {
method 'main ([Ljava/lang/String;)V' {
0 6
3 6
5 4
7 5
b 6
e 7
}
}
Lines mapping:
22 <-> 7
23 <-> 7
24 <-> 5
25 <-> 6
28 <-> 7
29 <-> 8
Not mapped:
26
27

View File

@@ -0,0 +1,30 @@
/**
* This code can be assembled with <a href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a>
* using <code>asmtools jasm -g *.jasm</code> command line.
*/
package pkg;
super public class TestPop2OneDoublePop2
version 52:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
public static varargs Method main:"([Ljava/lang/String;)V"
stack 4 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
ldc int 1234567890;
ldc2_w double 3.14159265358D;
pop2;
invokevirtual Method java/io/PrintStream.println:"(I)V";
return;
}
} // end Class TestPop2OneDoublePop2

View File

@@ -0,0 +1,30 @@
/**
* This code can be assembled with <a href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a>
* using <code>asmtools jasm -g *.jasm</code> command line.
*/
package pkg;
super public class TestPop2OneLongPop2
version 52:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
public static varargs Method main:"([Ljava/lang/String;)V"
stack 4 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
ldc int 1234567890;
ldc2_w long 0xCAFEBABE;
pop2;
invokevirtual Method java/io/PrintStream.println:"(I)V";
return;
}
} // end Class TestPop2OneLongPop2

View File

@@ -0,0 +1,31 @@
/**
* This code can be assembled with <a href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a>
* using <code>asmtools jasm -g *.jasm</code> command line.
*/
package pkg;
super public class TestPop2TwoIntPop2
version 52:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
public static varargs Method main:"([Ljava/lang/String;)V"
stack 4 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
ldc int 1234567890;
ldc int 0xCAFE;
ldc int 0xBABE;
pop2;
invokevirtual Method java/io/PrintStream.println:"(I)V";
return;
}
} // end Class TestPop2TwoIntPop2

View File

@@ -0,0 +1,32 @@
/**
* This code can be assembled with <a href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a>
* using <code>asmtools jasm -g *.jasm</code> command line.
*/
package pkg;
super public class TestPop2TwoIntTwoPop
version 52:0
{
public Method "<init>":"()V"
stack 1 locals 1
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
public static varargs Method main:"([Ljava/lang/String;)V"
stack 4 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
ldc int 1234567890;
ldc int 0xCAFE;
ldc int 0xBABE;
pop;
pop;
invokevirtual Method java/io/PrintStream.println:"(I)V";
return;
}
} // end Class TestPop2TwoIntTwoPop