diff options
author | Kevin Pouget <kpouget@sourceware.org> | 2011-10-27 11:04:27 +0000 |
---|---|---|
committer | Kevin Pouget <kpouget@sourceware.org> | 2011-10-27 11:04:27 +0000 |
commit | 2231f1fb609de30056ec5d3f526b39ee146efcab (patch) | |
tree | c7f513cc242b04a687017f406ba7507fca657df7 /gdb/unwind_stop_reasons.def | |
parent | f77b9a5df0dca976e9fa9c8731c313d5b54befe1 (diff) | |
download | gdb-2231f1fb609de30056ec5d3f526b39ee146efcab.zip gdb-2231f1fb609de30056ec5d3f526b39ee146efcab.tar.gz gdb-2231f1fb609de30056ec5d3f526b39ee146efcab.tar.bz2 |
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.def | 80 |
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 0000000..9a34feb --- /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 |