From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11340 invoked by alias); 10 Dec 2013 18:14:45 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 11324 invoked by uid 89); 10 Dec 2013 18:14:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,MISSING_HEADERS,SPF_HELO_PASS,SPF_PASS autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from Unknown (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 10 Dec 2013 18:14:42 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rBAIEV5L004876 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 10 Dec 2013 13:14:31 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id rBAIETsl017868; Tue, 10 Dec 2013 13:14:30 -0500 Message-ID: <52A75A05.60006@redhat.com> Date: Tue, 10 Dec 2013 18:14:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 MIME-Version: 1.0 CC: Doug Evans , Hui Zhu , gdb-patches ml Subject: [PATCH] Eliminate UNSUPPORTED_ERROR. References: <5265022F.8060203@mentor.com> <52654A2C.9010202@redhat.com> <529707C7.4040504@mentor.com> <5298AE7C.6020607@redhat.com> <529C80D2.2080608@mentor.com> <529C9B42.20600@redhat.com> <529D62F7.80701@mentor.com> <52A22582.8040509@redhat.com> <52A40015.207@mentor.com> <52A61E86.3020005@redhat.com> <52A750AA.1080807@redhat.com> In-Reply-To: <52A750AA.1080807@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-SW-Source: 2013-12/txt/msg00385.txt.bz2 On 12/10/2013 05:34 PM, Pedro Alves wrote: > On 12/09/2013 09:07 PM, Doug Evans wrote: >>>> --- a/gdb/cli/cli-cmds.c >>>> +++ b/gdb/cli/cli-cmds.c >>>> @@ -527,24 +527,16 @@ source_script_from_stream (FILE *stream, const char *file) >>>> { >>>> volatile struct gdb_exception e; >>>> >>>> - TRY_CATCH (e, RETURN_MASK_ERROR) >>>> - { >>>> - source_python_script (stream, file); >>>> - } >>>> - if (e.reason < 0) >>>> + if (!source_python_script (stream, file)) >> If we must change things, I would prefer having a predicate >> and call that first. > > I can try that. OK? ---------- Subject: [PATCH] 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-10 Pedro Alves * 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. --- gdb/cli/cli-cmds.c | 27 ++++++++------------------- gdb/exceptions.h | 3 --- gdb/python/python.c | 5 +++-- gdb/python/python.h | 13 +++++++++++++ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 52a6bc9..a0586ff 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -525,27 +525,16 @@ source_script_from_stream (FILE *stream, const char *file) if (script_ext_mode != script_ext_off && strlen (file) > 3 && !strcmp (&file[strlen (file) - 3], ".py")) { - volatile struct gdb_exception e; - - TRY_CATCH (e, RETURN_MASK_ERROR) + if (have_python ()) + source_python_script (stream, file); + else if (script_ext_mode == script_ext_soft) { - source_python_script (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); - } + /* Fallback to GDB script mode. */ + fseek (stream, 0, SEEK_SET); + script_from_file (stream, (char*) file); } + else + error (_("Python scripting is not supported in this copy of GDB.")); } else script_from_file (stream, file); diff --git a/gdb/exceptions.h b/gdb/exceptions.h index 705f1a1..2cb8242 100644 --- a/gdb/exceptions.h +++ b/gdb/exceptions.h @@ -79,9 +79,6 @@ enum errors { /* Error accessing memory. */ 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 traceframe. */ NOT_AVAILABLE_ERROR, diff --git a/gdb/python/python.c b/gdb/python/python.c index 1873936..55bb6cf 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1390,8 +1390,9 @@ eval_python_from_control_command (struct command_line *cmd) void source_python_script (FILE *file, const char *filename) { - throw_error (UNSUPPORTED_ERROR, - _("Python scripting is not supported in this copy of GDB.")); + internal_error (__FILE__, __LINE__, + _("source_python_script called when Python scripting is " + "not supported.")); } int diff --git a/gdb/python/python.h b/gdb/python/python.h index c07b2aa..abbb581 100644 --- a/gdb/python/python.h +++ b/gdb/python/python.h @@ -89,6 +89,19 @@ typedef enum py_frame_args CLI_ALL_VALUES } 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); void eval_python_from_control_command (struct command_line *); -- 1.7.11.7