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.
This commit is contained in:
Kevin Pouget 2011-10-27 11:04:27 +00:00
parent f77b9a5df0
commit 2231f1fb60
8 changed files with 133 additions and 70 deletions

View file

@ -553,7 +553,7 @@ gdbpy_frame_stop_reason_string (PyObject *self, PyObject *args)
if (!PyArg_ParseTuple (args, "i", &reason))
return NULL;
if (reason < 0 || reason > UNWIND_NO_SAVED_PC)
if (reason < UNWIND_FIRST || reason > UNWIND_LAST)
{
PyErr_SetString (PyExc_ValueError,
_("Invalid frame stop reason."));
@ -610,18 +610,13 @@ gdbpy_initialize_frames (void)
PyModule_AddIntConstant (gdb_module, "SIGTRAMP_FRAME", SIGTRAMP_FRAME);
PyModule_AddIntConstant (gdb_module, "ARCH_FRAME", ARCH_FRAME);
PyModule_AddIntConstant (gdb_module, "SENTINEL_FRAME", SENTINEL_FRAME);
PyModule_AddIntConstant (gdb_module,
"FRAME_UNWIND_NO_REASON", UNWIND_NO_REASON);
PyModule_AddIntConstant (gdb_module,
"FRAME_UNWIND_NULL_ID", UNWIND_NULL_ID);
PyModule_AddIntConstant (gdb_module,
"FRAME_UNWIND_FIRST_ERROR", UNWIND_FIRST_ERROR);
PyModule_AddIntConstant (gdb_module,
"FRAME_UNWIND_INNER_ID", UNWIND_INNER_ID);
PyModule_AddIntConstant (gdb_module,
"FRAME_UNWIND_SAME_ID", UNWIND_SAME_ID);
PyModule_AddIntConstant (gdb_module,
"FRAME_UNWIND_NO_SAVED_PC", UNWIND_NO_SAVED_PC);
#define SET(name, description) \
PyModule_AddIntConstant (gdb_module, "FRAME_"#name, name);
#define FIRST_ERROR(name) \
PyModule_AddIntConstant (gdb_module, "FRAME_"#name, name);
#include "unwind_stop_reasons.def"
#undef SET
Py_INCREF (&frame_object_type);
PyModule_AddObject (gdb_module, "Frame", (PyObject *) &frame_object_type);