/* Copyright (C) 2011-2013 Free Software Foundation, Inc.

   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
