Eliminate UNSUPPORTED_ERROR.
I have a case that could use an exception for "unsupported feature". I found UNSUPPORTED_ERROR, but looking deeper, I think as is, reusing it for other things would be fragile. E.g., if the Python script sourced by source_script_from_stream triggers any other missing functionality that would result in UNSUPPORTED_ERROR being propagated out to source_script_from_stream, that would confuse the error for Python not being built into GDB. This patch thus redoes things a little. Instead of using an exception for the "No Python" scenario, check whether Python is configured in before actually trying to source the file. It adds a new function instead of using #ifdef HAVE_PYTHON directly, as that is better at avoiding bitrot, as both Python and !Python paths are visible to the compiler this way. Tested on Fedora 17, with and without Python. gdb/ 2013-12-12 Pedro Alves <palves@redhat.com> * cli/cli-cmds.c (source_script_from_stream) Use have_python instead of catching UNSUPPORTED_ERROR. * exceptions.h (UNSUPPORTED_ERROR): Delete. * python/python.c (source_python_script) [!HAVE_PYTHON]: Internal error if called. * python/python.h (have_python): New static inline function.
This commit is contained in:
parent
43942612f4
commit
f23981e991
5 changed files with 32 additions and 24 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2013-12-12 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* cli/cli-cmds.c (source_script_from_stream) Use have_python
|
||||||
|
instead of catching UNSUPPORTED_ERROR.
|
||||||
|
* exceptions.h (UNSUPPORTED_ERROR): Delete.
|
||||||
|
* python/python.c (source_python_script) [!HAVE_PYTHON]: Internal
|
||||||
|
error if called.
|
||||||
|
* python/python.h (have_python): New static inline function.
|
||||||
|
|
||||||
2013-12-11 Doug Evans <dje@google.com>
|
2013-12-11 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* dwarf2read.c (lookup_dwo_cutu): Include name of dwp file in
|
* dwarf2read.c (lookup_dwo_cutu): Include name of dwp file in
|
||||||
|
|
|
@ -525,27 +525,15 @@ source_script_from_stream (FILE *stream, const char *file)
|
||||||
if (script_ext_mode != script_ext_off
|
if (script_ext_mode != script_ext_off
|
||||||
&& strlen (file) > 3 && !strcmp (&file[strlen (file) - 3], ".py"))
|
&& strlen (file) > 3 && !strcmp (&file[strlen (file) - 3], ".py"))
|
||||||
{
|
{
|
||||||
volatile struct gdb_exception e;
|
if (have_python ())
|
||||||
|
source_python_script (stream, file);
|
||||||
TRY_CATCH (e, RETURN_MASK_ERROR)
|
else if (script_ext_mode == script_ext_soft)
|
||||||
{
|
{
|
||||||
source_python_script (stream, file);
|
/* Fallback to GDB script mode. */
|
||||||
}
|
script_from_file (stream, file);
|
||||||
if (e.reason < 0)
|
|
||||||
{
|
|
||||||
/* Should we fallback to ye olde GDB script mode? */
|
|
||||||
if (script_ext_mode == script_ext_soft
|
|
||||||
&& e.reason == RETURN_ERROR && e.error == UNSUPPORTED_ERROR)
|
|
||||||
{
|
|
||||||
fseek (stream, 0, SEEK_SET);
|
|
||||||
script_from_file (stream, (char*) file);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Nope, just punt. */
|
|
||||||
throw_exception (e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
error (_("Python scripting is not supported in this copy of GDB."));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
script_from_file (stream, file);
|
script_from_file (stream, file);
|
||||||
|
|
|
@ -79,9 +79,6 @@ enum errors {
|
||||||
/* Error accessing memory. */
|
/* Error accessing memory. */
|
||||||
MEMORY_ERROR,
|
MEMORY_ERROR,
|
||||||
|
|
||||||
/* Feature is not supported in this copy of GDB. */
|
|
||||||
UNSUPPORTED_ERROR,
|
|
||||||
|
|
||||||
/* Value not available. E.g., a register was not collected in a
|
/* Value not available. E.g., a register was not collected in a
|
||||||
traceframe. */
|
traceframe. */
|
||||||
NOT_AVAILABLE_ERROR,
|
NOT_AVAILABLE_ERROR,
|
||||||
|
|
|
@ -1390,8 +1390,9 @@ eval_python_from_control_command (struct command_line *cmd)
|
||||||
void
|
void
|
||||||
source_python_script (FILE *file, const char *filename)
|
source_python_script (FILE *file, const char *filename)
|
||||||
{
|
{
|
||||||
throw_error (UNSUPPORTED_ERROR,
|
internal_error (__FILE__, __LINE__,
|
||||||
_("Python scripting is not supported in this copy of GDB."));
|
_("source_python_script called when Python scripting is "
|
||||||
|
"not supported."));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -89,6 +89,19 @@ typedef enum py_frame_args
|
||||||
CLI_ALL_VALUES
|
CLI_ALL_VALUES
|
||||||
} py_frame_args;
|
} py_frame_args;
|
||||||
|
|
||||||
|
/* Returns true if Python support is built into GDB, false
|
||||||
|
otherwise. */
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
have_python (void)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
extern void finish_python_initialization (void);
|
extern void finish_python_initialization (void);
|
||||||
|
|
||||||
void eval_python_from_control_command (struct command_line *);
|
void eval_python_from_control_command (struct command_line *);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue