Messages in this thread | | | Subject | Re: [PATCH][GIT PULL] tracing: Fix compile issue for trace_sched_wakeup.c | From | Peter Zijlstra <> | Date | Mon, 25 Oct 2010 19:45:46 +0200 |
| |
On Mon, 2010-10-25 at 17:47 +0200, Peter Zijlstra wrote:
> NOP'ed vs JMP'ed >
> 56: 6a 00 push $0x0 6a 00 push $0x0 > 58: e8 b7 fe ff ff call 0xffffff14 e8 b7 fe ff ff call 0xffffff14 > 5d: 8b 43 1c mov 0x1c(%ebx),%eax 8b 43 1c mov 0x1c(%ebx),%eax > 60: 89 44 24 04 mov %eax,0x4(%esp) 89 44 24 04 mov %eax,0x4(%esp) > 64: f0 fe 07 lock incb (%edi) f0 fe 07 lock incb (%edi) > 67:* 0f 1f 44 00 00 nopl 0x0(%eax,%eax,1) e9 03 00 00 00 jmp 0x6f <--- PATCHED INSN > 6c: 58 pop %eax 58 pop %eax > 6d: eb 1d jmp 0x8c eb 1d jmp 0x8c > 6f: 8b 35 70 ad 40 c1 mov 0xc140ad70,%esi 8b 35 70 ad 40 c1 mov 0xc140ad70,%esi > 75: 85 f6 test %esi,%esi 85 f6 test %esi,%esi > 77: 74 13 je 0x8c 74 13 je 0x8c > 79: 8b 46 04 mov 0x4(%esi),%eax 8b 46 04 mov 0x4(%esi),%eax > 7c: 89 da mov %ebx,%edx 89 da mov %ebx,%edx > 7e: 8b 4c 24 04 mov 0x4(%esp),%ecx 8b 4c 24 04 mov 0x4(%esp),%ecx > 82: ff 16 call *(%esi) ff 16 call *(%esi) > 84: 83 c6 08 add $0x8,%esi 83 c6 08 add $0x8,%esi > 87: 83 3e 00 cmpl $0x0,(%esi) 83 3e 00 cmpl $0x0,(%esi) > 8a: eb eb jmp 0x77 eb eb jmp 0x77 > 8c: 89 d8 mov %ebx,%eax 89 d8 mov %ebx,%eax > 8e: ff 14 24 call *(%esp) ff 14 24 call *(%esp)
OK, new theory..
56 pushl 0 67 nopl jmp 0x6f popl jmp 0x8c
6f mov test je 0x8c
8c mov call *(%esp)
So in the jumped path we miss a popl which pop's the 0 pushed before, which is the exact address call is failing on..
Looks like gcc got its branches confused or something..
Am I reading this right?
| |