; 0x764 1892 rip 0xa875dd 0xa875dd <kslskgs+231> (gdb) ni 0x0000000000a875df in kslskgs () (gdb) info regi r13 rip r13 0x764 1892 rip 0xa875df 0xa875df <kslskgs+233> (gdb) ni 0x0000000000a875e3 in kslskgs () (gdb) info regi r13 rip r13 0x763 1891 rip 0xa875e3 0xa875e3 <kslskgs+237>
--//可以确定循环开头在0xa875be地址.也是9条指令. (gdb) disassemble kslskgs --//反汇编看看. ... 0x0000000000a875be <kslskgs+200>: mov $0x4000000000000000,%rsi 0x0000000000a875c8 <kslskgs+210>: cmp %rsi,%rbx 0x0000000000a875cb <kslskgs+213>: je 0xa876db <kslskgs+485> 0x0000000000a875d1 <kslskgs+219>: test %rbx,%rbx 0x0000000000a875d4 <kslskgs+222>: je 0xa876db <kslskgs+485> 0x0000000000a875da <kslskgs+228>: mov (%r14),%rbx 0x0000000000a875dd <kslskgs+231>: pause 0x0000000000a875df <kslskgs+233>: add $0xffffffffffffffff,%r13d 0x0000000000a875e3 <kslskgs+237>: jne 0xa875be <kslskgs+200>
3.重复前面测试,先写出gdb脚本: $ cat spin_s.gdb break kslgetl commands silent printf "kslgetl %x, %d, %d, %d\n", $rdi, $rsi, $rdx, $rcx c end
break kslges commands silent printf "kslges %x, %d, %d, %d\n", $rdi, $rsi, $rdx, $rcx c end
break skgpwwait commands silent printf "skgpwwait %d, %d, %d, %d\n", $rdi, $rsi, $rdx, $rcx c end
break sskgpwwait commands silent printf "sskgpwwait %d, %d, %d, %d\n", $rdi, $rsi, $rdx, $rcx c end
break semop commands silent printf "semop %d, %d, %d, %d\n", $rdi, $rsi, $rdx, $rcx c end
break *0x93f9ddc commands silent printf " spin count loop: %d %d %x\n", $rax,$rcx,$rip c end
##今天加入的内容 break ksl_get_shared_latch commands silent printf "ksl_get_shared_latch laddr:%x, willing:%d, where:%d, why:%d, mode:%d\n", $rdi, $rsi, $rdx, $rcx, $r8 c end
break kslgess commands   |