[Crash-utility] crash cannot read the symbols
Dave Anderson
anderson at redhat.com
Tue Sep 20 20:54:23 UTC 2011
----- Original Message -----
> Hi Dave, thanks for your answer.
> The basic procedure forgotten, I assumed -g would be included.
> Never mind, I compile the kernel with -g.
> However, crash still doesn't like it:
It seems to be having a problem reading /dev/mem. I don't know if
2.4.37.9 allows the restriction of /dev/mem to the first 256 pages
of memory when the kernel is configured with CONFIG_STRICT_DEVMEM.
What is the output of:
$ sudo crash -d8 vmlinux System.map
Dave
>
> einoud at superchi:~/Pretoria/pretoria/kernel2.4/build/emPC/GREYHOUND/linux-2.4.37.9$
>
>
> crash 5.1.8
> Copyright (C) 2002-2011 Red Hat, Inc.
> Copyright (C) 2004, 2005, 2006 IBM Corporation
> Copyright (C) 1999-2006 Hewlett-Packard Co
> Copyright (C) 2005, 2006 Fujitsu Limited
> Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.
> Copyright (C) 2005 NEC Corporation
> Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.
> Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
> This program is free software, covered by the GNU General Public
> License,
> and you are welcome to change it and/or distribute copies of it under
> certain conditions. Enter "help copying" to see the conditions.
> This program has absolutely no warranty. Enter "help warranty" for
> details.
>
> GNU gdb (GDB) 7.0
> Copyright (C) 2009 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law. Type "show
> copying"
> and "show warranty" for details.
> This GDB was configured as "i686-pc-linux-gnu"...
>
> crash: read error: kernel virtual address: c032e840 type: "xtime"
>
> I did some stepping through crash, maybe that'll be helpful as to see
> what happened?
>
> crash 5.1.8
> Copyright (C) 2002-2011 Red Hat, Inc.
> Copyright (C) 2004, 2005, 2006 IBM Corporation
> Copyright (C) 1999-2006 Hewlett-Packard Co
> Copyright (C) 2005, 2006 Fujitsu Limited
> Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.
> Copyright (C) 2005 NEC Corporation
> Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.
> Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
> This program is free software, covered by the GNU General Public
> License,
> and you are welcome to change it and/or distribute copies of it under
> certain conditions. Enter "help copying" to see the conditions.
> This program has absolutely no warranty. Enter "help warranty" for
> details.
>
> GNU gdb (GDB) 7.0
> Copyright (C) 2009 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law. Type "show
> copying"
> and "show warranty" for details.
> This GDB was configured as "i686-pc-linux-gnu"...
>
> please wait... (patching 13083 gdb minimal_symbol values)
> Breakpoint 1, readmem (addr=3224561728, memtype=1, buffer=0x851c5d8,
> size=8, type=0x840c9c6 "xtime", error_handle=1)
> at memory.c:1849
> 1849 {
> (gdb) step
> 1856 if (CRASHDEBUG(4))
> (gdb) step
> 1849 {
> (gdb) step
> 1856 if (CRASHDEBUG(4))
> (gdb) step
> 1863 if (size <= 0) {
> (gdb) step
> 1861 bufptr = (char *)buffer;
> (gdb) step
> 1863 if (size <= 0) {
> (gdb) step
> 1870 fd = REMOTE_MEMSRC() ? pc->sockfd : (ACTIVE() ?
> pc->mfd : pc->dfd);
> (gdb) step
> 1875 switch (memtype)
> (gdb) p fd
> $1 = 6
> (gdb) step
> 1891 if (LKCD_DUMPFILE())
> (gdb) step
> 1894 if (!IS_KVADDR(addr)) {
> (gdb) step
> generic_is_kvaddr (addr=3224561728) at memory.c:1739
> 1739 {
> (gdb) step
> 1741 }
> (gdb) step
> generic_is_kvaddr (addr=3224561728) at memory.c:1739
> 1739 {
> (gdb) step
> generic_is_kvaddr (addr=3224561728) at memory.c:1741
> 1741 }
> (gdb) step
> readmem (addr=3224561728, memtype=1, buffer=0x851c5d8, size=8,
> type=0x840c9c6 "xtime", error_handle=1)
> at memory.c:1921
> 1921 if (!kvtop(CURRENT_CONTEXT(), addr,
> &paddr, 0)) {
> (gdb) step
> 1910 switch (memtype)
> (gdb) step
> 1921 if (!kvtop(CURRENT_CONTEXT(), addr,
> &paddr, 0)) {
> (gdb) step
> kvtop (tc=0x0, kvaddr=3224561728, paddr=0xbfffdc20, verbose=0) at
> memory.c:2615
> 2615 {
> (gdb) step
> 2618 return (machdep->kvtop(tc ? tc : CURRENT_CONTEXT(),
> kvaddr,
> (gdb) step
> 2615 {
> (gdb) step
> 2618 return (machdep->kvtop(tc ? tc : CURRENT_CONTEXT(),
> kvaddr,
> (gdb) step
> x86_kvtop (tc=0x0, kvaddr=3224561728, paddr=0xbfffdc20, verbose=0) at
> x86.c:2753
> 2753 if (!IS_KVADDR(kvaddr))
> (gdb) step
> 2743 {
> (gdb) step
> 2753 if (!IS_KVADDR(kvaddr))
> (gdb) step
> generic_is_kvaddr (addr=3224561728) at memory.c:1739
> 1739 {
> (gdb) step
> 1741 }
> (gdb) step
> generic_is_kvaddr (addr=0) at memory.c:1739
> 1739 {
> (gdb) step
> generic_is_kvaddr (addr=0) at memory.c:1741
> 1741 }
> (gdb) step
> x86_kvtop (tc=0x0, kvaddr=3224561728, paddr=0xbfffdc20, verbose=0) at
> x86.c:2756
> 2756 if (XEN_HYPER_MODE()) {
> (gdb) step
> 2763 if (!vt->vmalloc_start) {
> (gdb) step
> 2764 *paddr = VTOP(kvaddr);
> (gdb) step
> 2765 return TRUE;
> (gdb) step
> 2862 }
> (gdb) step
> kvtop (tc=0x0, kvaddr=3224561728, paddr=0xbfffdc20, verbose=0) at
> memory.c:2620
> 2620 }
> (gdb) step
> readmem (addr=3336256, memtype=1, buffer=0x851c5d8, size=8,
> type=0x840c9c6 "xtime", error_handle=1) at memory.c:1947
> 1947 cnt = PAGESIZE() - PAGEOFFSET(paddr);
> (gdb) step
> 1952 if (CRASHDEBUG(8))
> (gdb) step
> 1956 if (memtype == KVADDR)
> (gdb) step
> 1957 pc->curcmd_flags |= MEMTYPE_KVADDR;
> (gdb) step
> 1961 switch (READMEM(fd, bufptr, cnt,
> (gdb) step
> read_dev_mem (fd=6, bufptr=0x851c5d8, cnt=8, addr=3224561728,
> paddr=3336256) at memory.c:2027
> 2027 {
> (gdb) step
> 2030 if (!machdep->verify_paddr(paddr)) {
> (gdb) step
> generic_verify_paddr (paddr=3336256) at memory.c:2020
> 2020 }
> (gdb) step
> read_dev_mem (fd=6, bufptr=0x851c5d8, cnt=8, addr=3224561728,
> paddr=3336256) at memory.c:2043
> 2043 if (vt->high_memory && (paddr >=
> (physaddr_t)(VTOP(vt->high_memory)))) {
> (gdb) step
> 2049 if (lseek(fd, (off_t)paddr, SEEK_SET) == -1)
> (gdb) step
> 2026 read_dev_mem(int fd, void *bufptr, int cnt, ulong addr,
> physaddr_t paddr)
> (gdb) step
> 2053 errno = 0;
> (gdb) step
> 2054 readcnt = read(fd, bufptr, cnt);
> (gdb) step
> read (fd=6, bufptr=0x851c5d8, cnt=8, addr=3224561728, paddr=3336256)
> at /usr/include/bits/unistd.h:45
> 45 return __read_alias (__fd, __buf, __nbytes);
> (gdb) step
> read_dev_mem (fd=6, bufptr=0x851c5d8, cnt=8, addr=3224561728,
> paddr=3336256) at memory.c:2056
> 2056 if ((readcnt != cnt) && CRASHDEBUG(4)) {
> (gdb) step
> 2054 readcnt = read(fd, bufptr, cnt);
> (gdb) step
> read (fd=6, bufptr=0x851c5d8, cnt=8, addr=3224561728, paddr=3336256)
> at /usr/include/bits/unistd.h:45
> 45 return __read_alias (__fd, __buf, __nbytes);
> (gdb) step
> read_dev_mem (fd=6, bufptr=0x851c5d8, cnt=8, addr=3224561728,
> paddr=3336256) at memory.c:2056
> 2056 if ((readcnt != cnt) && CRASHDEBUG(4)) {
> (gdb) step
> 2089 if (readcnt != cnt)
> (gdb) step
> 2079 if ((readcnt != cnt) && readcnt && (machdep->flags &
> DEVMEMRD) &&
> (gdb) step
> 2093 }
> (gdb) step
> readmem (addr=<value optimized out>, memtype=1, buffer=0x851c5d8,
> size=8, type=0x840c9c6 "xtime", error_handle=1)
> at memory.c:1962
> 1962 (memtype == PHYSADDR) || (memtype ==
> XENMACHADDR) ? 0 : addr, paddr))
> (gdb) step
> 1970 if (PRINT_ERROR_MESSAGE)
> (gdb) step
> 1971 error(INFO, READ_ERRMSG,
> memtype_string(memtype, 0), addr, type);
> (gdb) step
> memtype_string (memtype=1, debug=0) at memory.c:2325
> 2325 switch (memtype)
> (gdb) step
> 2331 sprintf(membuf, debug ? "KVADDR" : "kernel
> virtual");
> (gdb) step
> 2340 sprintf(membuf, debug ? "FILEADDR" :
> "dumpfile");
> (gdb) step
> sprintf (memtype=<value optimized out>, debug=0) at
> /usr/include/bits/stdio2.h:34
> 34 return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL -
> 1,
> (gdb) step
> memtype_string (memtype=<value optimized out>, debug=<value optimized
> out>) at memory.c:2351
> 2351 }
> (gdb) step
> __error (type=1, fmt=0x83c90d8 "read error: %s address: %llx type:
> \"%s\"\n") at tools.c:41
> 41 {
> (gdb) step
> 48 if (CRASHDEBUG(1) || (pc->flags & DROP_CORE)) {
> (gdb) step
> 41 {
> (gdb) step
> 45 void *retaddr[NUMBER_STACKFRAMES] = { 0 };
> (gdb) step
> 48 if (CRASHDEBUG(1) || (pc->flags & DROP_CORE)) {
> (gdb) step
> 45 void *retaddr[NUMBER_STACKFRAMES] = { 0 };
> (gdb) step
> 48 if (CRASHDEBUG(1) || (pc->flags & DROP_CORE)) {
> (gdb) step
> 40 __error(int type, char *fmt, ...)
> (gdb) step
> 55 (void)vsnprintf(buf, BUFSIZE, fmt, ap);
> (gdb) step
> vsnprintf (type=1, fmt=0x83c90d8 "read error: %s address: %llx type:
> \"%s\"\n") at /usr/include/bits/stdio2.h:78
> 78 return __builtin___vsnprintf_chk (__s, __n,
> __USE_FORTIFY_LEVEL - 1,
> (gdb) step
> __error (type=1, fmt=0x83c90d8 "read error: %s address: %llx type:
> \"%s\"\n") at tools.c:58
> 58 if (!fmt && FATAL_ERROR(type)) {
> (gdb) step
> 63 end_of_line = FATAL_ERROR(type) && !(pc->flags &
> RUNTIME);
> (gdb) step
> 65 if ((new_line = (buf[0] == '\n')))
> (gdb) step
> 67 else if (pc->flags & PLEASE_WAIT)
> (gdb) step
> 70 if (type == CONT)
> (gdb) step
> 67 else if (pc->flags & PLEASE_WAIT)
> (gdb) step
> 70 if (type == CONT)
> (gdb) step
> 75 if (pc->stdpipe) {
> (gdb) step
> 85 fprintf(stdout, "%s%s%s %s%s",
> (gdb) step
> fprintf (type=1, fmt=0x83c90d8 "read error: %s address: %llx type:
> \"%s\"\n") at /usr/include/bits/stdio2.h:98
> 98 return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1,
> __fmt,
> (gdb) step
> crash: read error: kernel virtual address: c032e840 type: "xtime"
> __error (type=1, fmt=0x83c90d8 "read error: %s address: %llx type:
> \"%s\"\n") at tools.c:92
> 92 fflush(stdout);
> (gdb) step
> 95 if ((fp != stdout) && (fp != pc->stdpipe)) {
> (gdb) step
> 105 if ((pc->flags & DROP_CORE) && (type != NOTE)) {
> (gdb) step
> 111 switch (type)
> (gdb) step
> 133 }
> (gdb) step
> readmem (addr=3224561728, memtype=1, buffer=0x851c5d8, size=8,
> type=0x840c9c6 "xtime",
> error_handle=<value optimized out>) at memory.c:1992
> 1992 switch (error_handle)
> (gdb) step
> 1995 if ((pc->flags & DEVMEM) && (kt->flags &
> PRE_KERNEL_INIT) &&
> (gdb) step
> 1996 devmem_is_restricted() &&
> switch_to_proc_kcore())
> (gdb) step
> devmem_is_restricted (addr=3224561728, memtype=1, buffer=0x851c5d8,
> size=8, type=0x840c9c6 "xtime", error_handle=1)
> at memory.c:2137
> 2137 if (STREQ(pc->live_memsrc, "/dev/mem") &&
> (gdb) step
> readmem (addr=3224561728, memtype=1, buffer=0x851c5d8, size=8,
> type=0x840c9c6 "xtime", error_handle=1)
> at memory.c:1996
> 1996 devmem_is_restricted() &&
> switch_to_proc_kcore())
> (gdb) step
> devmem_is_restricted (addr=3224561728, memtype=1, buffer=0x851c5d8,
> size=8, type=0x840c9c6 "xtime", error_handle=1)
> at memory.c:2138
> 2138 kernel_symbol_exists("devmem_is_allowed") &&
> (gdb) step
> kernel_symbol_exists (symbol=0x83c63dc "devmem_is_allowed") at
> symbols.c:4722
> 4722 if ((sp = symname_hash_search(symbol)))
> (gdb) step
> symname_hash_search (name=0x83c63dc "devmem_is_allowed") at
> symbols.c:889
> 889 sp = st->symname_hash[SYMNAME_HASH_INDEX(name)];
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step
> 892 if (STREQ(sp->name, name))
> (gdb) step
> 894 sp = sp->name_hash_next;
> (gdb) step 10
> 891 while (sp) {
> (gdb) step 20
> 894 sp = sp->name_hash_next;
> (gdb) step
> 891 while (sp) {
> (gdb) step 100
>
> Program exited with code 01.
> Thanks,
>
> Reinoud.
>
> -----Original Message-----
> From: crash-utility-bounces at redhat.com
> [mailto:crash-utility-bounces at redhat.com] On Behalf Of Dave Anderson
> Sent: Thursday, September 15, 2011 6:07 AM
> To: Discussion list for crash utility usage, maintenance and
> development
> Subject: Re: [Crash-utility] crash cannot read the symbols
>
>
>
> ----- Original Message -----
> > Hi Everyone,
> >
> > I am just trying load a kernel and System.map file into crash.
> >
> > crash vmlinux System.map
> >
> > I get:
> >
> > crash 5.1.7
> > Copyright (C) 2002-2011 Red Hat, Inc.
> > Copyright (C) 2004, 2005, 2006 IBM Corporation Copyright (C)
> > 1999-2006
> > Hewlett-Packard Co Copyright (C) 2005, 2006 Fujitsu Limited
> > Copyright
> > (C) 2006, 2007 VA Linux Systems Japan K.K.
> > Copyright (C) 2005 NEC Corporation
> > Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.
> > Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
> > This program is free software, covered by the GNU General Public
> > License, and you are welcome to change it and/or distribute copies
> > of
> > it under certain conditions. Enter "help copying" to see the
> > conditions.
> > This program has absolutely no warranty. Enter "help warranty" for
> > details.
> >
> > GNU gdb (GDB) 7.0
> > Copyright (C) 2009 Free Software Foundation, Inc.
> > License GPLv3+: GNU GPL version 3 or later
> > <http://gnu.org/licenses/gpl.html>
> > This is free software: you are free to change and redistribute it.
> > There is NO WARRANTY, to the extent permitted by law. Type "show
> > copying"
> > and "show warranty" for details.
> > This GDB was configured as "i686-pc-linux-gnu"...
> >
> > crash: vmlinux: no debugging data available
> >
> > However, the System.map file reads fine and “nm vmlinux” shows the
> > symbols as well.
> >
> > A side note that this is a linux 2.4 kernel.
> > Is linux 2.4 not supported or what am I doing wrong?
>
> Linux 2.4 is supported, but either the vmlinux file was not
> originally built with the -g CFLAG, or it had the debuginfo data
> stripped.
> Without the debuginfo data, the vmlinux is useless.
>
> If by chance it is a RHEL3 2-4-based kernel, there is an associated
> vmlinux.debug file that comes with the separate kernel-debuginfo rpm
> package, so for example, you'd end up with two files:
>
> vmlinux-2.4.21-47.EL and vmlinux-2.4.21-47.EL.debug
>
> that would be installed here:
>
> /boot/vmlinux-2.4.21-47.EL
> /usr/lib/debug/boot/vmlinux-2.4.21-47.EL.debug
>
> If the files are found in locations above, running on a live system
> they would be found automatically when you enter:
>
> $ crash
>
> Alternatively you could just throw both files on the command line:
>
> $ crash <path-to>/vmlinux-2.4.21-47.EL
> <path-to>/vmlinux-2.4.21-47.EL.debug
>
> That all being said, since you are trying "crash vmlinux" I'm
> guessing that you are using a vmlinux file from another distro, or
> perhaps building your own kernel.
>
> If building your own kernel, the CFLAGS in the top-level Makefile
> needs to contain -g. In linux 2.4, I don't believe that there was a
> CONFIG_DEBUG_INFO option that could be configured to do it
> automatically, so you may have to change it manually, and then
> rebuild the kernel. Presuming that the original kernel that you're
> trying to analyze was booted from the same kernel version but was
> not built with -g, then you would also have to put the System.map
> file from the original kernel on the command line as you have done.
>
> If the vmlinux file is from another distro, mention that, and perhaps
> someone from the list can help.
>
> Dave
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
More information about the Crash-utility
mailing list