Mika, On Fri, Mar 22, 2013 at 9:03 PM, Mika Westerberg <mika.westerberg@xxxxxx> wrote: > On Thu, Mar 21, 2013 at 03:02:54PM -0400, Dave Anderson wrote: >> If for some reason you can't get them, I can make them available to you. >> And Lei Wen can also give you a sample dumpfile from his environment. > > Got them from Luc. > >> > Are you able to access module symbols on ARM dump (the one that Luc provided)? >> > Or is it failing completely? >> >> I *think* so... >> >> This module text disassembly looks right: >> >> crash> dis usbnet_suspend >> 0xbf000ae8 <usbnet_suspend>: push {r3, r4, r5, lr} >> 0xbf000aec <usbnet_suspend+4>: add r0, r0, #32 >> 0xbf000af0 <usbnet_suspend+8>: mov r5, r1 >> 0xbf000af4 <usbnet_suspend+12>: bl 0xc01b8264 <dev_get_drvdata> >> 0xbf000af8 <usbnet_suspend+16>: ldrb r3, [r0, #36] ; 0x24 >> 0xbf000afc <usbnet_suspend+20>: mov r4, r0 >> 0xbf000b00 <usbnet_suspend+24>: add r2, r3, #1 >> 0xbf000b04 <usbnet_suspend+28>: cmp r3, #0 >> 0xbf000b08 <usbnet_suspend+32>: strb r2, [r0, #36] ; 0x24 >> 0xbf000b0c <usbnet_suspend+36>: bne 0xbf000bdc <usbnet_suspend+244> >> 0xbf000b10 <usbnet_suspend+40>: mrs r3, CPSR >> 0xbf000b14 <usbnet_suspend+44>: orr r3, r3, #128 ; 0x80 >> 0xbf000b18 <usbnet_suspend+48>: msr CPSR_c, r3 >> 0xbf000b1c <usbnet_suspend+52>: mov r0, #1 >> 0xbf000b20 <usbnet_suspend+56>: bl 0xc0015f40 <add_preempt_count> >> 0xbf000b24 <usbnet_suspend+60>: ldr r3, [r4, #200] ; 0xc8 >> 0xbf000b28 <usbnet_suspend+64>: cmp r3, #0 >> 0xbf000b2c <usbnet_suspend+68>: beq 0xbf000b70 <usbnet_suspend+136> >> 0xbf000b30 <usbnet_suspend+72>: tst r5, #1024 ; 0x400 >> 0xbf000b34 <usbnet_suspend+76>: beq 0xbf000b70 <usbnet_suspend+136> >> 0xbf000b38 <usbnet_suspend+80>: mrs r3, CPSR >> ... >> >> This (r) data looks OK: >> >> crash> p smsc95xx_netdev_ops >> smsc95xx_netdev_ops = $8 = { >> ndo_init = 0, >> ndo_uninit = 0, >> ndo_open = 0xbf000514 <usbnet_open>, >> ndo_stop = 0xbf000bec <usbnet_stop>, >> ndo_start_xmit = 0xbf001a60 <usbnet_start_xmit>, >> ndo_select_queue = 0, >> ndo_change_rx_flags = 0, >> ndo_set_rx_mode = 0, >> ndo_set_multicast_list = 0xbf008abc <smsc95xx_set_multicast>, >> ndo_set_mac_address = 0xc025d854 <eth_mac_addr>, >> ndo_validate_addr = 0xc025d6f8 <eth_validate_addr>, >> ndo_do_ioctl = 0xbf00926c <smsc95xx_ioctl>, >> ndo_set_config = 0, >> ndo_change_mtu = 0xbf000de0 <usbnet_change_mtu>, >> ndo_neigh_setup = 0, >> ndo_tx_timeout = 0xbf000d4c <usbnet_tx_timeout>, >> ndo_get_stats64 = 0, >> ndo_get_stats = 0, >> ndo_vlan_rx_add_vid = 0, >> ndo_vlan_rx_kill_vid = 0, >> ndo_set_vf_mac = 0, >> ndo_set_vf_vlan = 0, >> ndo_set_vf_tx_rate = 0, >> ndo_get_vf_config = 0, >> ndo_set_vf_port = 0, >> ndo_get_vf_port = 0, >> ndo_setup_tc = 0, >> ndo_add_slave = 0, >> ndo_del_slave = 0, >> ndo_fix_features = 0, >> crash> > > I'm able to see the same. > > Setting suitable debug level reveals: > > bf00f040 (bf00f000): scsi_wait_scan syms: 0 gplsyms: 0 ksyms: 1 > bf00a1f8 (bf008000): smsc95xx syms: 0 gplsyms: 0 ksyms: 60 > bf002a40 (bf000000): usbnet syms: 0 gplsyms: 24 ksyms: 65 > > The ksyms comes from KALLSYMS and by default it only includes text and > inittext symbols. This explains why Lei is not able to see data etc. symbols > when he runs 'sym -m <module>'. Yep, that is my case. For data symbol would only be included in core section if CONFIG_KALLSYMS_ALL option is defined, so crash fail to extract the data symbol since it fail to see the data section is included in the dump image. But what I am confused is that since mod -S would reload all module image, which already include all symbols. So why we should confine us to only extract those symbol in the core section defined by the dump image? I mean even with CONFIG_KALLSYMS be defined, I think it maybe doable to extract all data symbol. What are your guys' opinion here? :) Thanks, Lei > > So I believe crash on ARM works as it should in this case. > >> But the user-space vtop is clearly wrong: >> >> crash> vm >> PID: 1495 TASK: c1ef1380 CPU: 0 COMMAND: "bash" >> MM PGD RSS TOTAL_VM >> c30cd1e0 c1de4000 1484k 2940k >> VMA START END FLAGS FILE >> c1e9ae90 8000 c2000 8001875 /bin/bash >> c1e9aee8 c9000 ce000 8101877 /bin/bash >> c1e9af40 ce000 d3000 100077 >> c2fc27b0 1247000 1268000 100077 >> c2fc2650 4001c000 4001d000 100077 >> c1e9af98 40038000 40055000 8000875 /lib/ld-linux.so.3 >> c2fc20d0 4005c000 4005d000 8100875 /lib/ld-linux.so.3 >> c2fc2758 4005d000 4005e000 8100877 /lib/ld-linux.so.3 >> ... >> >> >> crash> vtop 8000 >> VIRTUAL PHYSICAL >> 8000 8000 >> >> PAGE DIRECTORY: c1de4000 >> PGD: c1de4000 => 412 >> PMD: c1de4000 => 412 >> PAGE: 0 (1MB) >> >> >> VMA START END FLAGS FILE >> c1e9ae90 8000 c2000 8001875 /bin/bash >> >> crash> vtop 4005d000 >> VIRTUAL PHYSICAL >> 4005d000 4005d000 >> >> PAGE DIRECTORY: c1de4000 >> PGD: c1de5000 => 40000412 >> PMD: c1de5000 => 40000412 >> PAGE: 40000000 (1MB) >> >> >> VMA START END FLAGS FILE >> c2fc2758 4005d000 4005e000 8100877 /lib/ld-linux.so.3 > > This is actually a known issue on ARM (just remembered that). When the crash > happens it identity maps the whole address space of the running process. This > has been fixed by upstream commit: > > commit 2c8951ab0c337cb198236df07ad55f9dd4892c26 > Author: Will Deacon <will.deacon@xxxxxxx> > Date: Wed Jun 8 15:53:34 2011 +0100 > > ARM: idmap: use idmap_pgd when setting up mm for reboot > > For soft-rebooting a system, it is necessary to map the MMU-off code > with an identity mapping so that execution can continue safely once the > MMU has been switched off. > > Currently, switch_mm_for_reboot takes out a 1:1 mapping from 0x0 to > TASK_SIZE during reboot in the hope that the reset code lives at a > physical address corresponding to a userspace virtual address. > > This patch modifies the code so that we switch to the idmap_pgd tables, > which contain a 1:1 mapping of the cpu_reset code. This has the > advantage of only remapping the code that we need and also means we > don't need to worry about allocating a pgd from an atomic context in the > case that the physical address of the cpu_reset code aliases with the > virtual space used by the kernel. > > It went in for 3.2 and Luc's kernel is v3.1.1 which explains this. > > If you select any other task vtop should work fine. For example cron daemon: > > crash> vm > PID: 316 TASK: c2a7c160 CPU: 0 COMMAND: "crond" > MM PGD RSS TOTAL_VM > c30cd060 c0a70000 836k 2916k > VMA START END FLAGS FILE > c1cdd860 8000 15000 8001875 /usr/sbin/crond > c1cddcd8 1c000 1d000 8101875 /usr/sbin/crond > c1d7d758 1d000 1e000 8101877 /usr/sbin/crond > c1cddd88 1e000 9e000 100077 > c1d7d5a0 9a4000 9c5000 100077 > ... > > crash> vtop 8000 > VIRTUAL PHYSICAL > 8000 c1030000 > > PAGE DIRECTORY: c0a70000 > PGD: c0a70000 => c2b3d831 > PMD: c0a70000 => c2b3d831 > PTE: c2b3d020 => c103018f > > PAGE: c1030000 > > PTE PHYSICAL FLAGS > c103018f c1030000 (PRESENT|YOUNG|EXEC) > > VMA START END FLAGS FILE > c1cdd860 8000 15000 8001875 /usr/sbin/crond > > PAGE PHYSICAL MAPPING INDEX CNT FLAGS > c047d600 c1030000 c09b1590 0 2 228 > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility