Rachita,
Just started playing with this. I think something will need to be done
to the make system to make this work properly on ia32. I just tried to
compile a patched version crash and I got:
cc -c -g -DX86 -D_FILE_OFFSET_BITS=64 x86_64.c
In file included from x86_64.c:17:
unwind_x86_64.h:1:1: warning: "BITS_PER_LONG" redefined
In file included from x86_64.c:16:
defs.h:2509:1: warning: this is the location of the previous definition
In file included from x86_64.c:17:
unwind_x86_64.h:5: error: conflicting types for 'size_t'
/usr/lib/gcc/i386-redhat-linux/3.4.6/include/stddef.h:213: error:
previous declaration of 'size_t' was here
make[4]: *** [x86_64.o] Error 1
make[3]: *** [gdb] Error 2
make[2]: *** [all-gdb] Error 2
make[1]: *** [gdb_merge] Error 2
make: *** [all] Error 2
Obviously, we shouldn't be compiling the x86_64 stuff for ia32 so that
is why I'm thinking that some makefile tweaks are necessary.
BTW the customer site that I'm working at LLNL is VERY VERY interested
in this and basically made it my top priority to put it through its
paces. As you update the patch please keep me in the loop.
-ben
Rachita Kothiyal wrote:
Hi Dave
The following patch adds support for DWARF CFI based stack unwinding
for crash. Since this method uses the call frame instructions for
unwinding, it generates better backtraces than the existing backtrace
mechanism. So when we have the unwind info available, this new method
will be called, else we fall back to the existing mechanism.
There still are a couple of things which need to be done, viz
1. Extend to obtaining unwind info from modules as well(currently
doing only for the kernel)
2. Currently reading the unwind info from eh_frame section only(ie
__start_unwind to __end_unwind). Need to add facility to read from
the .debug_frame(if .debug_frame is present in cases where .eh_frame
is absent. Will have to read from the vmlinux if we want to read the
.debug_frame info)
3. Add FRAME_POINTER support.
Please provide your suggestions and comments.
Thanks
Rachita