2013-02-12 19:03:57 +00:00
|
|
|
/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
|
2011-10-27 11:04:27 +00:00
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
|
|
|
|
/* Reasons why frames could not be further unwound
|
|
|
|
SET (name, description)
|
|
|
|
|
|
|
|
After this reason name, all reasons should be considered errors;
|
|
|
|
i.e.: abnormal stack termination.
|
|
|
|
FIRST_ERROR (name)
|
|
|
|
|
|
|
|
First and Last reason defined
|
|
|
|
FIRST_ENTRY (name)
|
|
|
|
LAST_ENTRY (name) */
|
|
|
|
|
|
|
|
#ifdef SET
|
|
|
|
/* No particular reason; either we haven't tried unwinding yet,
|
|
|
|
or we didn't fail. */
|
|
|
|
SET (UNWIND_NO_REASON, "no reason")
|
|
|
|
|
|
|
|
/* The previous frame's analyzer returns an invalid result
|
|
|
|
from this_id.
|
|
|
|
|
|
|
|
FIXME drow/2006-08-16: This is how GDB used to indicate end of
|
|
|
|
stack. We should migrate to a model where frames always have a
|
|
|
|
valid ID, and this becomes not just an error but an internal
|
|
|
|
error. But that's a project for another day. */
|
|
|
|
SET (UNWIND_NULL_ID, "unwinder did not report frame ID")
|
|
|
|
|
|
|
|
/* This frame is the outermost. */
|
|
|
|
SET (UNWIND_OUTERMOST, "outermost")
|
|
|
|
|
|
|
|
/* Can't unwind further, because that would require knowing the
|
|
|
|
values of registers or memory that haven't been collected. */
|
|
|
|
SET (UNWIND_UNAVAILABLE, \
|
|
|
|
"not enough registers or memory available to unwind further")
|
|
|
|
|
|
|
|
/* This frame ID looks like it ought to belong to a NEXT frame,
|
|
|
|
but we got it for a PREV frame. Normally, this is a sign of
|
|
|
|
unwinder failure. It could also indicate stack corruption. */
|
|
|
|
SET (UNWIND_INNER_ID, "previous frame inner to this frame (corrupt stack?)")
|
|
|
|
|
|
|
|
/* This frame has the same ID as the previous one. That means
|
|
|
|
that unwinding further would almost certainly give us another
|
|
|
|
frame with exactly the same ID, so break the chain. Normally,
|
|
|
|
this is a sign of unwinder failure. It could also indicate
|
|
|
|
stack corruption. */
|
|
|
|
SET (UNWIND_SAME_ID, "previous frame identical to this frame (corrupt stack?)")
|
|
|
|
|
|
|
|
/* The frame unwinder didn't find any saved PC, but we needed
|
|
|
|
one to unwind further. */
|
|
|
|
SET (UNWIND_NO_SAVED_PC, "frame did not save the PC")
|
|
|
|
|
|
|
|
#endif /* SET */
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef FIRST_ERROR
|
|
|
|
FIRST_ERROR (UNWIND_UNAVAILABLE)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef FIRST_ENTRY
|
|
|
|
FIRST_ENTRY (UNWIND_NO_REASON)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef LAST_ENTRY
|
|
|
|
LAST_ENTRY (UNWIND_NO_SAVED_PC)
|
|
|
|
#endif
|