<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>