|
From: Jenny L. <jli...@pi...> - 2003-09-05 14:52:35
|
Hi valgrind gurus,
My program has recently stopped working with valgrind (again for those =
of you who remember my pselect/select problem).
I get "Illegal instruction (core dumped)" if I let the program run =
beyond block 1311986.
Using "valgrind --stop-after=3D1311986 myprogram" produces the following =
output. Can anyone help me interpret what this means so that I can =
identify a c/c++ source file to blame the breakage on?
Thanks in advance.
-------------------------
disInstr: unhandled instruction bytes: 0x66 0xF 0x0 0xC8
=3D=3D=3D=3D=3D=3Dvvvvvvvv=3D=3D=3D=3D=3D=3D LAST TRANSLATION =
=3D=3D=3D=3D=3D=3Dvvvvvvvv=3D=3D=3D=3D=3D=3D
Original x86 code to UCode:
0x84C5F6C: movzwl -20(%ebp),%edx
0: GETL %EBP, t2
1: LEA1L -20(t2), t0
2: LDW (t0), t0
3: WIDENL _Wzt0
4: PUTL t0, %EDX
5: INCEIPo $4
0x84C5F70: disInstr: unhandled instruction bytes: 0x66 0xF 0x0 =
0xC8
6: CALLM_So
7: CALLMo $0xE5
8: CALLM_Eo
9: JMPo $0x84C5F73
Improvements:
Improved UCode:
0: GETL %EBP, t2
1: LEA1L -20(t2), t0
2: LDW (t0), t0
3: WIDENL _Wzt0
4: PUTL t0, %EDX
5: INCEIPo $4
6: CALLM_So
7: CALLMo $0xE5
8: CALLM_Eo
9: JMPo $0x84C5F73 ($3)
Unimproved instrumented UCode:
0: GETVL %EBP, q2
1: GETL %EBP, t2
2: MOVL q2, q0
3: TAG1o q0 =3D Left4 ( q0 )
4: LEA1L -20(t2), t0
5: TESTVL q0
6: SETVL q0
7: LOADVW (t0), q0
8: LDW (t0), t0
9: TAG1o q0 =3D ZWiden24 ( q0 )
10: WIDENL _Wzt0
11: PUTVL q0, %EDX
12: PUTL t0, %EDX
13: INCEIPo $4
14: CALLM_So
15: SETVo q4
16: TESTVo q4
17: SETVo q4
18: CALLMo $0xE5
19: CALLM_Eo
20: JMPo $0x84C5F73 ($3)
Instrumentation improvements:
at 16: delete TESTV on defd arg
at 17: delete SETV
at 15: delete SETV
at 6: delete SETV
Instrumented UCode:
0: GETVL %EBP, q2
1: GETL %EBP, t2
2: MOVL q2, q0
3: TAG1o q0 =3D Left4 ( q0 )
4: LEA1L -20(t2), t0
5: TESTVL q0
7: LOADVW (t0), q0
8: LDW (t0), t0
9: TAG1o q0 =3D ZWiden24 ( q0 )
10: WIDENL _Wzt0
11: PUTVL q0, %EDX
12: PUTL t0, %EDX
13: INCEIPo $4
14: CALLM_So
18: CALLMo $0xE5
19: CALLM_Eo
20: JMPo $0x84C5F73 ($3)
Live range assignments:
LR 0 is after 4 to before 12 spillno 0
LR 1 is after 2 to before 11 spillno 1
LR 2 is after 1 to before 4 spillno 2
LR 3 is after 0 to before 2 spillno 3
Register allocated UCode:
0: GETVL %EBP, q2
0: GETVL %EBP, %eax
1: GETL %EBP, t2
1: GETL %EBP, %ebx
2: MOVL q2, q0
2: MOVL %eax, %ecx
3: TAG1o q0 =3D Left4 ( q0 )
3: TAG1o %ecx =3D Left4 ( %ecx )
4: LEA1L -20(t2), t0
4: LEA1L -20(%ebx), %edx
5: TESTVL q0
5: TESTVL %ecx
7: LOADVW (t0), q0
6: LOADVW (%dx), %cx
8: LDW (t0), t0
7: LDW (%dx), %dx
9: TAG1o q0 =3D ZWiden24 ( q0 )
8: TAG1o %ecx =3D ZWiden24 ( %ecx )
10: WIDENL _Wzt0
9: WIDENL _Wz%edx
11: PUTVL q0, %EDX
10: PUTVL %ecx, %EDX
12: PUTL t0, %EDX
11: PUTL %edx, %EDX
13: INCEIPo $4
12: INCEIPo $4
14: CALLM_So
13: CALLM_So
18: CALLMo $0xE5
14: CALLMo $0xE5
19: CALLM_Eo
15: CALLM_Eo
20: JMPo $0x84C5F73 ($3)
16: JMPo $0x84C5F73 ($3)
Generated x86 code:
0: FF 0D 24 B2 1E 40
decl (0x401EB224)
6: 75 00
jnz-8 %eip+(7)
8: BD 1D 00 00 00
movl $0x1D, %ebp
13: C3
ret
(target to jump site 7; delta: 6)
0: GETVL %EBP, %eax [a-----]
14: 8B 45 38
movl 0x38(%ebp), %eax
1: GETL %EBP, %ebx [ab----]
17: 8B 5D 14
movl 0x14(%ebp), %ebx
2: MOVL %eax, %ecx [-bc---]
20: 89 C1
movl %eax, %ecx
3: TAG1o %ecx =3D Left4 ( %ecx ) =
[-bc---]
22: 89 C8
movl %ecx, %eax
24: F7 D8
negl %eax
26: 09 C1
orl %eax, %ecx
4: LEA1L -20(%ebx), %edx [--cd--]
28: 8D 53 EC
leal 0xFFFFFFEC(%ebx), %edx
5: TESTVL %ecx [---d--]
31: 83 F9 00
cmpl $0, %ecx
34: 74 03
jz-8 %eip+3
36: FF 55 48
call * 72(%ebp)
6: LOADVW (%dx), %cx [--cd--]
39: 52
pushl %edx
40: 89 D0
movl %edx, %eax
42: FF 95 A0 03 00 00
call * 928(%ebp)
48: 89 C1
movl %eax, %ecx
50: 5A
popl %edx
7: LDW (%dx), %dx [--cd--]
51: 0F B7 12
movzwl (%edx), %edx
8: TAG1o %ecx =3D ZWiden24 ( %ecx ) =
[--cd--]
54: 81 E1 FF FF 00 00
andl $0xFFFF, %ecx
9: WIDENL _Wz%edx [--cd--]
10: PUTVL %ecx, %EDX [---d--]
60: 89 4D 2C
movl %ecx, 0x2C(%ebp)
11: PUTL %edx, %EDX [------]
63: 89 55 08
movl %edx, 0x8(%ebp)
12: INCEIPo $4 [------]
66: C6 45 64 70
movb $0x70, 0x64(%ebp)
13: CALLM_So [------]
14: CALLMo $0xE5 [------]
70: FF 95 94 03 00 00
call * 916(%ebp)
15: CALLM_Eo [------]
16: JMPo $0x84C5F73 ($3) [------]
76: B8 73 5F 4C 08
movl $0x84C5F73, %eax
81: 89 45 64
movl %eax, 0x64(%ebp)
84: 0F 0B 0F 0B 90
ud2; ud2; nop
=3D=3D=3D=3D=3D=3D^^^^^^^^=3D=3D=3D=3D=3D=3D LAST TRANSLATION =
=3D=3D=3D=3D=3D=3D^^^^^^^^=3D=3D=3D=3D=3D=3D
=3D=3D23309=3D=3D
=3D=3D23309=3D=3D ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 =
from 0)
=3D=3D23309=3D=3D malloc/free: in use at exit: 201916 bytes in 293 =
blocks.
=3D=3D23309=3D=3D malloc/free: 294 allocs, 1 frees, 201920 bytes =
allocated.
=3D=3D23309=3D=3D For a detailed leak analysis, rerun with: =
--leak-check=3Dyes
=3D=3D23309=3D=3D For counts of detected errors, rerun with: -v
|
|
From: Nicholas N. <nj...@ca...> - 2003-09-05 15:18:01
|
On Fri, 5 Sep 2003, Jenny Lighthart wrote: > I get "Illegal instruction (core dumped)" if I let the program run > beyond block 1311986. > > Using "valgrind --stop-after=1311986 myprogram" produces the following > output. Can anyone help me interpret what this means so that I can > identify a c/c++ source file to blame the breakage on? > > ------------------------- > disInstr: unhandled instruction bytes: 0x66 0xF 0x0 0xC8 > ======vvvvvvvv====== LAST TRANSLATION ======vvvvvvvv====== > Original x86 code to UCode: > > 0x84C5F6C: movzwl -20(%ebp),%edx > > 0: GETL %EBP, t2 > 1: LEA1L -20(t2), t0 > 2: LDW (t0), t0 > 3: WIDENL _Wzt0 > 4: PUTL t0, %EDX > 5: INCEIPo $4 > > 0x84C5F70: disInstr: unhandled instruction bytes: 0x66 0xF 0x0 0xC8 > > 6: CALLM_So > 7: CALLMo $0xE5 > 8: CALLM_Eo > 9: JMPo $0x84C5F73 Instruction 0x84C5F70 looks to be in the text of 'myprogram'. If 'myprogram' is compiled with debug info (-g), do "objdump -S myprogram" and find the offending instruction. The original program text should be nearby. N |