On 06/17/2013 06:03 PM, Martin Milata wrote:
On Fri, Jun 14, 2013 at 13:56:51 +0200, Denys Vlasenko wrote:
Martin, can you try it? It should be working with stock gdb and kernel.
One small problem: this happens when the tool is run on coredumps with multiple threads:
abrtd: Missing separate debuginfo for the main executable file abrtd: Try: yum --disablerepo='*' --enablerepo='*-debug*' install /usr/lib/debug/.build-id/8d/e70b65a7828735a2b9eeaffdfbc1da44a36245 abrtd: [New LWP 847] abrtd: [New LWP 871] abrtd: [New LWP 873] abrtd: [New LWP 869] abrtd: [New LWP 874] abrtd: [New LWP 870] abrtd: [New LWP 875] abrtd: [New LWP 877] abrtd: [New LWP 878] abrtd: [New LWP 876] abrtd: [New LWP 872] abrtd: Core was generated by `/usr/sbin/libvirtd'. abrtd: Program terminated with signal 11, Segmentation fault. abrtd: #0 0x0000003739ae8bdf in ?? () abrtd: Python Exception <type 'exceptions.ValueError'> invalid literal for int() with base 10: '11\n11\n11\n11\n11\n11\n11\n11\n11\n11\n11': abrtd: Error occurred in Python command: invalid literal for int() with base 10: '11\n11\n11\n11\n11\n11\n11\n11\n11\n11\n11' abrtd: Error while running gdb:
Thanks! Committed this fix:
# Find "cursig: N" and extract N. # This gets used by abrt-exploitable as a fallback # if gdb and/or kernel is uncooperative. -SIGNO_OF_THE_COREDUMP=$(eu-readelf -n coredump | grep -o 'cursig: *[0-9]*' | sed 's/[^0-9]//g') +# "grep -m1": take the first match (on Linux, every thread has its own +# prstatus struct in the coredump, but the signal number which killed us +# must be the same in all these structs). +SIGNO_OF_THE_COREDUMP=$(eu-readelf -n coredump | grep -m1 -o 'cursig: *[0-9]*' | sed 's/[^0-9]//g') export SIGNO_OF_THE_COREDUMP