[kevin@se129 kernel-debuginfo]$ rpm2cpio kernel-debuginfo-3.10.0-693.11.1.el7.es.9.x86_64.rpm | cpio -idm
[kevin@se129 bcache]$ gdb escache.ko.debug
(gdb) l *(read_dirty+0x3e5)
0x23ef5 is in read_dirty (drivers/md/bcache/writeback.c:235).
230 in drivers/md/bcache/writeback.c
drivers/md/bcache/writeback.c
235 BUG_ON(ptr_stale(dc->disk.c, &w->key, 0));
比較怪的是,從gdb看到的read_dirty addr跟objdump看到的不一樣:
(gdb) p read_dirty
$1 = {void (struct cached_dev *)} 0x23b10 <read_dirty>
objdump -d escache.ko | grep "\<read_dirty\>"
0000000000023ae0 <read_dirty>:
23ae0: e8 00 00 00 00 callq 23ae5 <read_dirty+0x5>
23ec5: 0f 0b ud2
一開始看0x23ae0+0x3e5=0x23ec5的位置"ud2"看不出來發生什麼事,後來才直接用gdb l*(read_dirty+0x3e5)才找到writeback:235.
