summaryrefslogtreecommitdiff
path: root/gdb/unwind_stop_reasons.def
diff options
context:
space:
mode:
authorKevin Pouget <kpouget@sourceware.org>2011-10-27 11:04:27 +0000
committerKevin Pouget <kpouget@sourceware.org>2011-10-27 11:04:27 +0000
commit2231f1fb609de30056ec5d3f526b39ee146efcab (patch)
treec7f513cc242b04a687017f406ba7507fca657df7 /gdb/unwind_stop_reasons.def
parentf77b9a5df0dca976e9fa9c8731c313d5b54befe1 (diff)
downloadbinutils-gdb-2231f1fb609de30056ec5d3f526b39ee146efcab.tar.gz
Move unwind reasons to an external .def file
gdb/ * frame.c (frame_stop_reason_string): Rewrite using unwind_stop_reasons.def. * frame.h (enum unwind_stop_reason): Likewise. * python/py-frame.c (gdbpy_initialize_frames): Likewise. (gdbpy_frame_stop_reason_string): Use new enum unwind_stop_reason constants for bound-checking. * unwind_stop_reasons.def: New file. * stack.c (backtrace_command_1): Handle UNWIND_FIRST_ERROR as an alias instead of a distinct value. doc/ * gdb.texinfo ((Frames In Python): Document gdb.FRAME_UNWIND_FIRST_ERROR contant.
Diffstat (limited to 'gdb/unwind_stop_reasons.def')
-rw-r--r--gdb/unwind_stop_reasons.def80
1 files changed, 80 insertions, 0 deletions
diff --git a/gdb/unwind_stop_reasons.def b/gdb/unwind_stop_reasons.def
new file mode 100644
index 00000000000..9a34feb77c3
--- /dev/null
+++ b/gdb/unwind_stop_reasons.def
@@ -0,0 +1,80 @@
+/* Copyright 2011 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