Messages in this thread | | | Date | Thu, 03 Sep 2015 18:19:04 +0200 | From | Jan Stancek <> | Subject | Re: [PATCH v3 2/4] perf tests: make objdump disassemble zero blocks |
| |
On 09/03/2015 05:14 PM, Arnaldo Carvalho de Melo wrote: > Em Thu, Sep 03, 2015 at 02:35:55PM +0300, Adrian Hunter escreveu: >> On 03/09/15 14:23, Jan Stancek wrote: >>> Add -z parameter to avoid skipping zero blocks: >>> >>> ffffffff816704fe <sysret_check+0x4b>: >>> ffffffff816704fe: 7b 34 jnp ffffffff81670534 <sysret_signal+0x1c> >>> ... >>> ffffffff81670501 <sysret_careful>: >>> ffffffff81670501: 0f ba e2 03 bt $0x3,%edx >>> ffffffff81670505: 73 11 jae ffffffff81670518 <sysret_signal> >> >> Acked-by: Adrian Hunter <adrian.hunter@intel.com> > > Ok, I am applying this, but it would be nice to know in which systems, > with which objdump/binutils versions which 'perf test' entry fails, with > the output of such failure. > > Jan, can you please provide this info?
Since my original report last year [1], I've seen it fail many times on various HW (we run perf tests daily on RHEL). I haven't noticed any pattern regarding HW it fails on.
Binutils versions go from binutils-2.23.52 to current latest from git.
It was always about "object code reading", from times it was perf test 21, until now, when it's perf test 23.
I'm attaching examples of test output along with objdump output, that I just ran on a random system using kernel 4.2.0.
HTH, regards, Jan
[1] https://lkml.org/lkml/2014/12/11/222
HP ProLiant DL360p G8 Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz kernel 4.2.0
Example 1, binutils-2.23.52 ----------------------------
# perf test 23 -v 23: Test object code reading : --- start --- test child forked, pid 31014 Looking at the vmlinux_path (7 entries long) Using /lib/modules/4.2.0/build/vmlinux for symbols Parsing event 'cycles' mmap size 528384B <snip> Reading object code for memory address: 0xffffffffa001c010 File is: /lib/modules/4.2.0/kernel/lib/libcrc32c.ko On file address is: 0x80 dso open failed: No such file or directory Objdump command is: objdump -d --start-address=0x10 --stop-address=0x90 /lib/modules/4.2.0/kernel/lib/libcrc32c.ko objdump read too few bytes Reducing len to 120 Bytes read differ from those read by objdump test child finished with -1 ---- end ---- Test object code reading: FAILED!
# objdump -d --start-address=0x10 --stop-address=0x90 /lib/modules/4.2.0/kernel/lib/libcrc32c.ko
/lib/modules/4.2.0/kernel/lib/libcrc32c.ko: file format elf64-x86-64
Disassembly of section .text:
0000000000000010 <crc32c+0x10>: 10: 8b 01 mov (%rcx),%eax 12: 48 83 c0 26 add $0x26,%rax 16: 48 c1 e8 04 shr $0x4,%rax 1a: 48 c1 e0 04 shl $0x4,%rax 1e: 48 29 c4 sub %rax,%rsp 21: 48 8d 5c 24 07 lea 0x7(%rsp),%rbx 26: 48 c1 eb 03 shr $0x3,%rbx 2a: 48 8d 04 dd 00 00 00 lea 0x0(,%rbx,8),%rax 31: 00 32: 89 3c dd 10 00 00 00 mov %edi,0x10(,%rbx,8) 39: 48 89 0c dd 00 00 00 mov %rcx,0x0(,%rbx,8) 40: 00 41: c7 04 dd 08 00 00 00 movl $0x0,0x8(,%rbx,8) 48: 00 00 00 00 4c: 48 89 c7 mov %rax,%rdi 4f: e8 00 00 00 00 callq 54 <crc32c+0x54> 54: 85 c0 test %eax,%eax 56: 75 0d jne 65 <crc32c+0x65> 58: 8b 04 dd 10 00 00 00 mov 0x10(,%rbx,8),%eax 5f: 48 8b 5d f8 mov -0x8(%rbp),%rbx 63: c9 leaveq 64: c3 retq 65: 0f 0b ud2 67: 90 nop
Disassembly of section .init.text:
0000000000000010 <init_module+0x10>: 10: 00 00 add %al,(%rax) 12: 00 00 add %al,(%rax) 14: 31 d2 xor %edx,%edx 16: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax 1c: 48 89 05 00 00 00 00 mov %rax,0x0(%rip) # 23 <init_module+0x23> 23: 0f 43 d0 cmovae %eax,%edx 26: 89 d0 mov %edx,%eax 28: 5d pop %rbp 29: c3 retq
Disassembly of section .exit.text:
0000000000000010 <cleanup_module+0x10>: 10: 00 00 add %al,(%rax) 12: 00 00 add %al,(%rax) 14: 5d pop %rbp 15: c3 retq
Example 2, binutils-2.23.52 ----------------------------
# perf test 23 -v 23: Test object code reading : --- start --- test child forked, pid 34729 Looking at the vmlinux_path (7 entries long) Using /lib/modules/4.2.0/build/vmlinux for symbols Parsing event 'cycles' mmap size 528384B <snip> Reading object code for memory address: 0xffffffff816829ac File is: /lib/modules/4.2.0/build/vmlinux On file address is: 0x8829ac Objdump command is: objdump -d --start-address=0xffffffff816829ac --stop-address=0xffffffff81682a2c /lib/modules/4.2.0/build/vmlinux Bytes read differ from those read by objdump test child finished with -1 ---- end ---- Test object code reading: FAILED!
# objdump -d --start-address=0xffffffff816829ac --stop-address=0xffffffff81682a2c /lib/modules/4.2.0/build/vmlinux
/lib/modules/4.2.0/build/vmlinux: file format elf64-x86-64
Disassembly of section .text:
ffffffff816829ac <syscall_return_via_sysret+0x2e>: ffffffff816829ac: 8c 35 00 ff 15 2b mov %?,0x2b15ff00(%rip) # ffffffffac7e28b2 <__brk_limit+0x2a7e38b2>
ffffffff816829af <opportunistic_sysret_failed>: ffffffff816829af: ff 15 2b 8c 35 00 callq *0x358c2b(%rip) # ffffffff819db5e0 <pv_cpu_ops+0x120> ffffffff816829b5: e9 fe 08 00 00 jmpq ffffffff816832b8 <restore_c_regs_and_iret> ffffffff816829ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ffffffff816829c0 <stub_clone>: ffffffff816829c0: 4c 89 7c 24 08 mov %r15,0x8(%rsp) ffffffff816829c5: 4c 89 74 24 10 mov %r14,0x10(%rsp) ffffffff816829ca: 4c 89 6c 24 18 mov %r13,0x18(%rsp) ffffffff816829cf: 4c 89 64 24 20 mov %r12,0x20(%rsp) ffffffff816829d4: 48 89 6c 24 28 mov %rbp,0x28(%rsp) ffffffff816829d9: 48 89 5c 24 30 mov %rbx,0x30(%rsp) ffffffff816829de: e9 3d e7 9f ff jmpq ffffffff81081120 <SyS_clone> ffffffff816829e3: 66 66 66 66 2e 0f 1f data32 data32 data32 nopw %cs:0x0(%rax,%rax,1) ffffffff816829ea: 84 00 00 00 00 00
ffffffff816829f0 <stub_fork>: ffffffff816829f0: 4c 89 7c 24 08 mov %r15,0x8(%rsp) ffffffff816829f5: 4c 89 74 24 10 mov %r14,0x10(%rsp) ffffffff816829fa: 4c 89 6c 24 18 mov %r13,0x18(%rsp) ffffffff816829ff: 4c 89 64 24 20 mov %r12,0x20(%rsp) ffffffff81682a04: 48 89 6c 24 28 mov %rbp,0x28(%rsp) ffffffff81682a09: 48 89 5c 24 30 mov %rbx,0x30(%rsp) ffffffff81682a0e: e9 ad e6 9f ff jmpq ffffffff810810c0 <sys_fork> ffffffff81682a13: 66 66 66 66 2e 0f 1f data32 data32 data32 nopw %cs:0x0(%rax,%rax,1) ffffffff81682a1a: 84 00 00 00 00 00
ffffffff81682a20 <stub_vfork>: ffffffff81682a20: 4c 89 7c 24 08 mov %r15,0x8(%rsp) ffffffff81682a25: 4c 89 74 24 10 mov %r14,0x10(%rsp) ffffffff81682a2a: 4c 89 6c 24 18 mov %r13,0x18(%rsp)
Example 3, latest objdump from git://sourceware.org/git/binutils-gdb.git HEAD == 1a91555 Fix seg-fault in readelf when scanniing a corrupt binary. over same data as previous example --------------------------------------------------------------------------
# ./binutils/objdump -d --start-address=0xffffffff816829ac --stop-address=0xffffffff81682a2c /lib/modules/4.2.0/build/vmlinux
/lib/modules/4.2.0/build/vmlinux: file format elf64-x86-64
Disassembly of section .text:
ffffffff816829ac <syscall_return_via_sysret+0x2e>: ffffffff816829ac: 8c .byte 0x8c ffffffff816829ad: 35 .byte 0x35 ...
ffffffff816829af <opportunistic_sysret_failed>: ffffffff816829af: ff 15 2b 8c 35 00 callq *0x358c2b(%rip) # ffffffff819db5e0 <pv_cpu_ops+0x120> ffffffff816829b5: e9 fe 08 00 00 jmpq ffffffff816832b8 <restore_c_regs_and_iret> ffffffff816829ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ffffffff816829c0 <stub_clone>: ffffffff816829c0: 4c 89 7c 24 08 mov %r15,0x8(%rsp) ffffffff816829c5: 4c 89 74 24 10 mov %r14,0x10(%rsp) ffffffff816829ca: 4c 89 6c 24 18 mov %r13,0x18(%rsp) ffffffff816829cf: 4c 89 64 24 20 mov %r12,0x20(%rsp) ffffffff816829d4: 48 89 6c 24 28 mov %rbp,0x28(%rsp) ffffffff816829d9: 48 89 5c 24 30 mov %rbx,0x30(%rsp) ffffffff816829de: e9 3d e7 9f ff jmpq ffffffff81081120 <SyS_clone> ffffffff816829e3: 66 66 66 66 2e 0f 1f data16 data16 data16 nopw %cs:0x0(%rax,%rax,1) ffffffff816829ea: 84 00 00 00 00 00
ffffffff816829f0 <stub_fork>: ffffffff816829f0: 4c 89 7c 24 08 mov %r15,0x8(%rsp) ffffffff816829f5: 4c 89 74 24 10 mov %r14,0x10(%rsp) ffffffff816829fa: 4c 89 6c 24 18 mov %r13,0x18(%rsp) ffffffff816829ff: 4c 89 64 24 20 mov %r12,0x20(%rsp) ffffffff81682a04: 48 89 6c 24 28 mov %rbp,0x28(%rsp) ffffffff81682a09: 48 89 5c 24 30 mov %rbx,0x30(%rsp) ffffffff81682a0e: e9 ad e6 9f ff jmpq ffffffff810810c0 <sys_fork> ffffffff81682a13: 66 66 66 66 2e 0f 1f data16 data16 data16 nopw %cs:0x0(%rax,%rax,1) ffffffff81682a1a: 84 00 00 00 00 00
ffffffff81682a20 <stub_vfork>: ffffffff81682a20: 4c 89 7c 24 08 mov %r15,0x8(%rsp) ffffffff81682a25: 4c 89 74 24 10 mov %r14,0x10(%rsp) ffffffff81682a2a: 4c rex.WR ffffffff81682a2b: 89 .byte 0x89
| |