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