PUBLIC COMMENTS
Problem:
Part of these changes are from Tom's SA disassembler work.
Dumping nmethods with scalar replaced objects results in
exceptions from the SA since it was not implemented.
Solution:
Implement scalar replaced objects debug info dump in SA.
Fix PrintOptoAssembly output for such info since it was not correct.
Add missing NULL checks in SA dump code.
Reformat SA debug info output to easy read.
Add "dumpcodecache" instruction to SA to dump all nmethods in codecache.
Here is OptoAssembly output:
177 CALL,static java.lang.Object::wait
# sleep::test @ bci:126 L[0]=#ScObj0 L[1]=#ScObj1 L[2]=#ScObj2 L[3]=#ScObj3 L[4]=#ScObj4 L[5]=#Ptr0x080cffd8 L[6]=_ MON-BOX0=esp+32 MON-OBJ[0]=#Ptr0x080cffd8
# ScObj0 sleep={ [iii :0]=#12 }
# ScObj1 int[2]={ [0]=#0 , [1]=#34 }
# ScObj2 sleep[2]={ [0]=#ScObj0 , [1]=esp + #12 }
# ScObj3 int[2][]={ [0]=esp + #16 , [1]=#ScObj1 }
# ScObj4 sleep[2][]={ [0]=esp + #8 , [1]=#ScObj2 }
# OopMap{[8]=Oop [12]=Oop [16]=Oop [20]=Derived_oop_[8] off=380}
here is SA:
0xfa4d24b7: call 0xfa4d0dd0
static int test() @0xb61b3228 of public class sleep @0xb61b3278 @ bci = 126, line = 31
locals ([0], #ScObj0) ([1], #ScObj1) ([2], #ScObj2) ([3], #ScObj3) ([4], #ScObj4) ([5], oop 0xb61b33c8) ([6], illegal)
monitors (owner = oop 0xb61b33c8, lock = stack[32], normal)
ScObj0 sleep={ [iii :0]=(#int 12) }
ScObj1 int[2]={ [0]=(#int 0) [1]=(#int 34) }
ScObj2 sleep[2]={ [0]=(##ScObj0) [1]=(#stack[12], oop) }
ScObj3 int[2][]={ [0]=(#stack[16], oop) [1]=(##ScObj1) }
ScObj4 sleep[2][]={ [0]=(#stack[8], oop) [1]=(##ScObj2) }
OopMap:
Oops:[8] [12] [16]
Derived oops:[20] = [8]
and here the java source:
sleep sl = new sleep();
sl.iii = 12;
int[] ia = new int[2];
ia[1] = 34;
sleep[] sa = new sleep[2];
sa[0] = sl;
sa[1] = new sleep();
sa[1].iii = 56;
int[][] ia2 = new int[2][];
ia2[0] = new int[1];
ia2[1] = ia;
ia2[0][0] = 78;
sleep[][] sa2 = new sleep[2][];
sa2[0] = new sleep[1];
sa2[1] = sa;
sa2[0][0] = new sleep();
sa2[0][0].iii = 90;
synchronized (sleep.class) {
sleep.class.wait(1);
}
|