Stop backtrace when we make no more progress.

This commit is contained in:
Ulrich Drepper 2009-07-30 16:53:52 -07:00
parent 78c4ef475d
commit 2dec6007d1
2 changed files with 13 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2009-07-30 Ulrich Drepper <drepper@redhat.com>
* sysdeps/ia64/backtrace.c (backtrace_helper): Stop backtrace when
we make no more progress.
2009-07-29 Ulrich Drepper <drepper@redhat.com>
* math/s_fma.c: Don't define alias if __fma is a macro.

View File

@ -1,5 +1,5 @@
/* Return backtrace of current program state.
Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
Copyright (C) 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
@ -61,7 +61,13 @@ backtrace_helper (struct _Unwind_Context *ctx, void *a)
/* We are first called with address in the __backtrace function.
Skip it. */
if (arg->cnt != -1)
arg->array[arg->cnt] = (void *) unwind_getip (ctx);
{
arg->array[arg->cnt] = (void *) unwind_getip (ctx);
/* Check whether we make any progress. */
if (arg->cnt > 0 && arg->array[arg->cnt - 1] == arg->array[arg->cnt])
return _URC_END_OF_STACK;
}
if (++arg->cnt == arg->size)
return _URC_END_OF_STACK;
return _URC_NO_REASON;