ksyms, objdump et. al.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello

I need help understanding problems with a driver I'm modifying.  When used,
it will produce a Kernel panic because
of "Kernel access of bad area" and gives register / stack dump.  I think
its because another driver is giving me bad
pointer address's and sizes.  However I don't know so I'm trying to track
down the address's of the exported globals.

 I've read that you can use ksymoops to decode  the dumps.  However, when I
run ksymoops I get a warning message about proc/ksyms entry differs from
module.  Here's the message:
mismatch on symbol sizeOfD6Mem, module says c906 5308,
/opt/npref/bin/modules/pci_rethdd.o says c906 5ab0.

I examined /proc/ksyms and it is indeed located at c906 5308.

 I did a objdump on the pci_rethdd.o module and.  Here's what I found:
000 006c     g     o     .sdata      0000 0004    sizeOfD6Mem

pci_rethdd.c defines the variable like this:
size_t const sizeOfD6Mem = 0x0400 0000


So how do I interpet these values?  Is objdump saying that sizeOfD6Mem is a
global (g), which uses 4 bytes (0000 0004) and is located at offset 0000
006c?   How do I determine the base address to add to this offset?
Shouldn't the sum be the value shown
in the ksyms file?  Where is ksymoops getting the value c906 5ab0?

JD

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
IRC Channel:   irc.openprojects.net / #kernelnewbies
Web Page:      http://www.kernelnewbies.org/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux