<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Hi, <br></span></div><div><span><br></span></div><div><span>here is the log which I m trying from gdb now.</span></div><div><span>hope this stack trace helps.<br></span></div><div><br><span></span></div><div><span>./gdb --args ./crash ./vmlinux ./System.map <<br>GNU gdb (GDB) 7.3.1<br>Copyright (C) 2011 Free Software Foundation, Inc.<br>License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html><br>This is free software: you are free to change and redistribute it.<br>There is NO WARRANTY, to the extent permitted by law. Type "show copying"<br>and "show warranty"
for details.<br>This GDB was configured as "arm-none-linux-gnueabi".<br>For bug reporting instructions, please see:<br><http://www.gnu.org/software/gdb/bugs/>...<br>Reading symbols from /system/crash...done.<br>(gdb) start<br>Temporary breakpoint 1 at 0x8224: file main.c, line 78.<br>Starting program: /system/crash ./vmlinux ./System.map<br><br>Temporary breakpoint 1, main (argc=3, argv=0xbefffba4) at main.c:78<br>78 main.c: No such file or directory.<br> in main.c<br>(gdb) bt<br>#0 main (argc=3, argv=0xbefffba4) at main.c:78<br>(gdb) b open_tmpfile2<br>Breakpoint 2 at 0x6d46c: file filesys.c, line 1126.<br>(gdb) c<br>Continuing.<br><br>crash 6.0.8<br>Copyright (C) 2002-2012 Red Hat, Inc.<br>Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation<br>Copyright (C) 1999-2006 Hewlett-Packard Co<br>Copyright (C) 2005, 2006, 2011, 2012 Fujitsu
Limited<br>Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.<br>Copyright (C) 2005, 2011 NEC Corporation<br>Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.<br>Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.<br>This program is free software, covered by the GNU General Public License,<br>and you are welcome to change it and/or distribute copies of it under<br>certain conditions. Enter "help copying" to see the conditions.<br>This program has absolutely no warranty. Enter "help warranty" for details.<br><br>GNU gdb (GDB) 7.3.1<br>Copyright (C) 2011 Free Software Foundation, Inc.<br>License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html><br>This is free software: you are free to change and redistribute it.<br>There is NO WARRANTY, to the extent permitted by law. Type "show copying"<br>and "show warranty" for details.<br>This GDB was configured as
"arm-none-linux-gnueabi"...<br><br>WARNING: kernels compiled by different gcc versions:<br> ./vmlinux: (unknown)<br> live system kernel: 4.4.3<br><br><br>Breakpoint 2, open_tmpfile2 () at filesys.c:1126<br>1126 filesys.c: No such file or directory.<br> in filesys.c<br>(gdb) bt<br>#0 open_tmpfile2 () at filesys.c:1126<br>#1 0x000f324c in anon_member_offset (name=0x433604 "page",<br> member=0x433680 "mapping") at symbols.c:5104<br>#2 0x000f2c4c in datatype_info (name=0x433604 "page",<br> member=0x433680 "mapping", dm=0xfffffffe) at symbols.c:4930<br>#3 0x000260f0 in vm_init () at memory.c:383<br>#4 0x0000b1a0 in main_loop () at main.c:644<br>#5 0x00173050 in current_interp_command_loop () at interps.c:288<br>#6 0x001749b0 in captured_command_loop (data=0x24) at ./main.c:228<br>#7 0x00172a50 in
catch_errors (func=0x1749a8 <captured_command_loop>,<br> func_args=0x0, errstring=0x506b88 "", mask=<optimized out>)<br> at exceptions.c:531<br>#8 0x0017431c in captured_main (data=<optimized out>) at ./main.c:958<br>#9 0x00172a50 in catch_errors (func=0x173818 <captured_main>,<br> func_args=0xbefff9d8, errstring=0x506b88 "", mask=<optimized out>)<br> at exceptions.c:531<br>#10 0x00173628 in gdb_main (args=<optimized out>) at ./main.c:973<br>#11 gdb_main_entry (argc=<optimized out>, argv=<optimized out>)<br> at ./main.c:993<br>#12 0x000bed6c in gdb_main_loop (argc=2, argv=0xbefffba4)<br> at gdb_interface.c:76<br>#13 0x0000b014 in main (argc=3, argv=0xbefffba4) at main.c:604<br>(gdb) n<br>1129 in filesys.c<br>(gdb) c<br>Continuing.<br>tmpfile: No such file or
directory<br>error no is 2<br>crash: cannot open secondary temporary file<br><br>[/system/crash] error trace: f2c4c => f324c => 6d508 => 13138<br>crash: /usr/bin/nm: no such file<br>DROP_CORE flag set: forcing a segmentation fault<br><br>Program received signal SIGQUIT, Quit.<br>0x003be42c in kill ()<br>(gdb)</span></div><div><br><span></span></div><div>PS: I am pretty sure that I am taking vmlinux from the same build and System.map as well, but that should not be a problem as long as crash had gone ahead.</div><div><br>Regards,</div><div>Oza.<br><span></span></div><div><span></span></div><div><br></div> <div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"> <div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> <hr size="1"> <b><span style="font-weight: bold;">From:</span></b> Dave Anderson <anderson@redhat.com><br> <b><span
style="font-weight: bold;">To:</span></b> paawan oza <paawan1982@yahoo.com> <br><b><span style="font-weight: bold;">Cc:</span></b> "Discussion list for crash utility usage, maintenance and development" <crash-utility@redhat.com> <br> <b><span style="font-weight: bold;">Sent:</span></b> Friday, 10 August 2012 10:01 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [Crash-utility] using crash for ARM<br> </font> </div> <br><br><br>----- Original Message -----<br>> <br>> Hi,<br>> <br>> please find the logs attached for crash -d8 vmlinux System.map.<br>> <br>> crash -d8 vmlinux doesnt work. it gives<br>> <br>> crash 6.0.8<br>> Copyright (C) 2002-2012 Red Hat, Inc.<br>> Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation<br>> Copyright (C) 1999-2006 Hewlett-Packard Co<br>> Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited<br>> Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.<br>>
Copyright (C) 2005, 2011 NEC Corporation<br>> Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc.<br>> Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.<br>> This program is free software, covered by the GNU General Public License,<br>> and you are welcome to change it and/or distribute copies of it under<br>> certain conditions. Enter "help copying" to see the conditions.<br>> This program has absolutely no warranty. Enter "help warranty" for<br>> details.<br>> <br>> get_live_memory_source: /dev/mem<br>> WARNING: ./vmlinux and /proc/version do not match!<br>> <br>> WARNING: /proc/version indicates kernel version: 3.0.15+<br>> <br>> crash: please use the vmlinux file for that kernel version, or try using<br>> the System.map for that kernel version as an additional argument.<br>> <br>> Regards,<br>> Oza.<br><br>For starters, as Mika suggested, you should try your best to use
the<br>actual vmlinux file that is being run on the live system. If the running<br>kernel's vmlinux file does not have debuginfo data, and you are using a<br>similar kernel along with the running kernel's System.map file, then you<br>must be sure that the "other" vmlinux that you are using is as close as<br>possible to the running kernel. There are no guarantees that using a<br>System.map file will work.<br><br>Anyway, looking at the log file, I'm not sure why there's non-crash related<br>data intermingled with the crash -d8 output, i.e., like this:<br><br> ...<br> c00dfc08 clk_enable<br> c00dfc50 clk_debug_set_enable<br> c00dfcac clk_[ 1866.844757] ##> wifi_suspend<br> [ 1866.856903] i2c i2c-1: mpu_dev_suspend, called regulator_disable. Status: 0<br> [ 1866.856933] mpu_dev_suspend: Suspend handler executed<br> [ 1866.872528] PM: suspend of devices complete after 27.886 msecs<br> [
1866.872558] PM: suspend devices took 0.030 seconds<br> [ 1866.873077] PM: late suspend of devices complete after 0.457 msecs<br> [ 1866.873535] PM: early resume of devices complete after 0.183 msecs<br> [ 1866.874481] i2c i2c-1: mpu_dev_resume, called regulator_enable. Status: 0<br> [ 1866.874511] mpu_dev_resume: Resume handler executed<br> [ 1866.874572] wakeup wake lock: bcmpmu_i2c<br> [ 1866.874908] get_update_rate: rate = 112000<br> [ 1866.874938] get_update_rate: rate = 112000<br> [ 1866.876434] ##> wifi_resume<br> [ 1866.892822] PM: resume of devices complete after 19.007 msecs<br> [ 1866.893676] PM: resume devices took 0.020 seconds<br> reset<br> c00dfd4c clk_debug_reset<br> c00dfd90 clk_init<br> c00dfe10 clk_register<br> ...<br><br>Regardless of that, I was looking for a readmem() call, or other debug statement<br>that might help pinpoint the failure
location. The best that can be inferred from<br>the log data are the GNU_GET_DATATYPE debug statements at the end:<br><br> $ grep GNU_GET_DATATYPE teraterm.log<br> GNU_GET_DATATYPE[runqueue]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[prio_array]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[prio_array]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[prio_array]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[irq_desc_t]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[hw_interrupt_type]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[timer_vec_root]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[timer_vec]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[tvec_root_s]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[softirq_state]: returned via gdb_error_hook (1
buffer in use)<br> GNU_GET_DATATYPE[desc_struct]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[kallsyms_header]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[mem_section]: returned via gdb_error_hook (1 buffer in use)<br> GNU_GET_DATATYPE[note_buf_t]: returned via gdb_error_hook (1 buffer in use)<br> $ <br> <br>From those it's evident that you've successfully made it through kernel_init(),<br>and have called machdep_init(POST_GDB) from here in main.c:main_loop()<br><br> } else if (!(pc->flags & MINIMAL_MODE)) {<br> read_in_kernel_config(IKCFG_INIT);<br> kernel_init();<br> =====> machdep_init(POST_GDB);<br>
vm_init();<br> machdep_init(POST_VM);<br> module_init();<br> help_init();<br> task_init();<br> vfs_init();<br> net_init();<br> dev_init();<br> machdep_init(POST_INIT);<br>
}<br><br>which calls into arm.c:arm_init(POST_GDB). That function has successfully made<br>it past the STRUCT_SIZE_INIT(note_buf, "note_buf_t") call:<br><br> /*<br> * We need to have information about note_buf_t which is used to<br> * hold ELF note containing registers and status of the thread<br> * that panic'd.<br> */<br> =====> STRUCT_SIZE_INIT(note_buf, "note_buf_t");<br><br> STRUCT_SIZE_INIT(elf_prstatus, "elf_prstatus");<br> MEMBER_OFFSET_INIT(elf_prstatus_pr_pid, "elf_prstatus",<br>
"pr_pid");<br> MEMBER_OFFSET_INIT(elf_prstatus_pr_reg, "elf_prstatus",<br> "pr_reg");<br> break;<br><br>But the next STRUCT_SIZE_INIT() for "elf_prstatus" apparently never got completed. <br><br>In any case, it ended up in open_tmpfile2():<br><br> $ tail teraterm.log<br> GETBUF(128 -> 0)<br> FREEBUF(0)<br> GETBUF(128 -> 0)<br> FREEBUF(0)<br> GETBUF(128 -> 0)<br> FREEBUF(0)<br> <br> crash: cannot open secondary temporary file<br> <br> 1|shell@android:/system # <br> $ <br><br><br>Although it's not clear how it's ending up in open_tmpfile2(), <br>it's certainly of interest
that the tmpfile() call is failing:<br> <br> void<br> open_tmpfile2(void)<br> {<br> if (pc->tmpfile2)<br> error(FATAL, "recursive secondary temporary file usage\n");<br> <br> if ((pc->tmpfile2 = tmpfile()) == NULL)<br> error(FATAL, "cannot open secondary temporary file\n");<br> <br> rewind(pc->tmpfile2);<br> }<br><br>The man page for tmpfile() shows these reasons:<br> <br> RETURN VALUE<br> The tmpfile() function returns a stream descriptor, or NULL if a unique<br> filename cannot be generated or the unique file cannot be opened. In<br> the latter case, errno is set to
indicate the error.<br> <br> ERRORS<br> EACCES Search permission denied for directory in file’s path prefix.<br> <br> EEXIST Unable to generate a unique filename.<br> <br> EINTR The call was interrupted by a signal.<br> <br> EMFILE Too many file descriptors in use by the process.<br> <br> ENFILE Too many files open in the system.<br> <br> ENOSPC There was no room in the directory to add the new filename.<br> <br> EROFS Read-only filesystem.<br> <br>A couple things you might try:<br><br> (1) Put a perror() after the tmpfile() call to determine which errno <br> is being returned.<br> (2) Set "pc->flags |= DROP_CORE;" prior to the tmpfile() call.<br><br>Like
this:<br><br> void<br> open_tmpfile2(void)<br> {<br> if (pc->tmpfile2)<br> error(FATAL, "recursive secondary temporary file usage\n");<br><br>+ pc->flags |= DROP_CORE;<br>- if ((pc->tmpfile2 = tmpfile()) == NULL)<br>+ if ((pc->tmpfile2 = tmpfile()) == NULL) {<br>+ perror("tmpfile");<br> error(FATAL, "cannot open secondary temporary file\n");<br>+ }<br> pc->flags &= ~DROP_CORE;<br><br> rewind(pc->tmpfile2);<br> }<br><br>Then get a backtrace by running gdb on the resultant core file, or just<br>run the whole session from
gdb.<br><br>Dave<br><br><br><br> <br><br><br><br> </div> </div> </div></body></html>