public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
From: Keith Owens <kaos@sgi.com>
To: linux-ia64@vger.kernel.org
Subject: Backtrace problems from a signal handler
Date: Mon, 25 Jul 2005 05:29:12 +0000	[thread overview]
Message-ID: <13701.1122269352@kao2.melbourne.sgi.com> (raw)

gdb with libunwind support does not unwind correctly if a signal
handler calls another function which then takes a core dump.

SuSE SLES9 SP2.  gdb-6.3-16.4.  libunwind-0.98.5-3.2.  gcc 3.3.3.

% cat signal-test.c
#include <signal.h>

void foo(void)
{
	*(char *)0 = 1;
}

static void handler(int sig)
{
	foo();
}

int main(void)
{
	signal(SIGALRM, handler);
	kill(0, SIGALRM);
	return 0;
}

% make CFLAGS="-Wall -g" signal-test
% ulimit -c unlimited
% ./signal-test
% gdb signal-test core
(gdb) bt
#0  foo () at signal-test.c:5
#1  0x40000000000006e0 in handler (sig\x14) at signal-test.c:10
#2  <signal handler called>
Previous frame inner to this frame (corrupt stack?)

Running under gdb and setting a breakpoint on foo() has exactly the
same problem.  IOW, this is not being caused by the core dump, it is
purely an unwind problem.

If the handler does '*(char *)0 = 1;' directly instead of calling foo()
then the backtrace works.

(gdb) bt
#0  handler (sig\x14) at signal-test.c:10
#1  <signal handler called>
#2  0xa000000000010640 in ?? ()
#3  0x20000000000a8a80 in kill () from /lib/tls/libc.so.6.1
#4  0x4000000000000780 in main () at signal-test.c:17

This problem tends to be reported against abort() because that is
usually the function that starts the core dump, but my tests show that
abort() is innocent.  Calling any function from a signal handler stuffs
up the backtrace.


             reply	other threads:[~2005-07-25  5:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-25  5:29 Keith Owens [this message]
2005-07-27  1:09 ` Backtrace problems from a signal handler Keith Owens

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=13701.1122269352@kao2.melbourne.sgi.com \
    --to=kaos@sgi.com \
    --cc=linux-ia64@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox