<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Hi,</span></div><div><br><span></span></div><div>I just thought it might be file creation issue and permission issue.</div><div>with change as following: I am able to get to crash prompt.</div><div><br></div><div>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>       //   error(FATAL, "cannot open secondary temporary file\n");<br><br>       pc->tmpfile2 = fopen ("/system/tmp", "w"
 );<br>       if (pc->tmpfile2 == NULL) {<br>           printf("error no is %d",errno);<br>       perror("tmpfile");<br><br>       error(FATAL, "cannot open secondary temporary file\n");<br>      }<br>  //      pc->flags &= ~DROP_CORE;<br>        rewind(pc->tmpfile2);<br>}<br></div><div><br></div><div>/system is mounted as read-write filesystem, I thought read-only file-system might be the issue.<br></div><div><br></div><div>still I get some warnings</div><div><br></div><div>shell@android:/system # ./crash ./vmlinux ./System.map<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>crash: invalid size request: 0  type: "array cache array"<br>crash: unable to initialize kmem slab cache subsystem<br><br>  SYSTEM MAP: ./System.map<br>DEBUG KERNEL: ./vmlinux<br>    DUMPFILE: /dev/mem<br>        CPUS: 1<br>        DATE: Sat Jan  1 04:19:18 2000<br>      UPTIME: 01:02:54<br>LOAD AVERAGE: 1.28, 0.98, 0.76<br>       TASKS: 505<br>    NODENAME: localhost<br>     RELEASE: 3.0.15+<br>     VERSION: #4 PREEMPT Mon Aug 13 12:02:58 IST 2012<br>     MACHINE: armv7l  (unknown Mhz)<br>     
 MEMORY: 462 MB<br>         PID: 2559<br>     COMMAND: "crash"<br>        TASK: d2b2b140  [THREAD_INFO: d170c000]<br>         CPU: 0<br>       STATE: TASK_RUNNING (ACTIVE)<br><br>crash></div><div><br></div><div><br></div><div>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>