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