/* Copyright (C) 2011-2021 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")

/* This is no longer used anywhere, but it's kept because it's exposed
   to Python.  This is how GDB used to indicate end of stack.  We've
   now migrated to a model where frames always have a valid ID.  */
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")

/* There was an error accessing memory while unwinding this frame.  */
SET (UNWIND_MEMORY_ERROR, "memory error while unwinding")

#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_MEMORY_ERROR)
#endif
