From patchwork Thu Feb 4 17:29:30 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Mahoney X-Patchwork-Id: 10734 Received: (qmail 16971 invoked by alias); 4 Feb 2016 17:29:42 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 16919 invoked by uid 89); 4 Feb 2016 17:29:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=sk:symbol_ X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Thu, 04 Feb 2016 17:29:40 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3152CAC01 for ; Thu, 4 Feb 2016 17:29:37 +0000 (UTC) Received: by starscream.home.jeffm.io (Postfix, from userid 1000) id 7D8E08998A; Thu, 4 Feb 2016 12:29:34 -0500 (EST) From: jeffm@suse.com To: gdb-patches@sourceware.org Cc: Jeff Mahoney Subject: [PATCH 4/7] py-symbol: Require a frame for lookup_symbol only when necessary Date: Thu, 4 Feb 2016 12:29:30 -0500 Message-Id: <1454606973-31017-5-git-send-email-jeffm@suse.com> In-Reply-To: <1454606973-31017-1-git-send-email-jeffm@suse.com> References: <1454606973-31017-1-git-send-email-jeffm@suse.com> X-IsSubscribed: yes From: Jeff Mahoney gdbpy_lookup_symbol requires a frame prior to doing the symbol lookup but a frame isn't necessary for many symbol types. Calling symbol_read_needs_frame will tell us if it's necessary but we need to have already looked up the symbol to use it. This patch puts the lookup first and then only resolves the frame if one is required. This allows us to lookup static symbols directly from python rather than using gdb.eval_and_parse. --- gdb/python/py-symbol.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c index cbbc9e2..c7f0ff8 100644 --- a/gdb/python/py-symbol.c +++ b/gdb/python/py-symbol.c @@ -382,14 +382,28 @@ gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw) if (block_obj) block = block_object_to_block (block_obj); - else + + TRY + { + symbol = lookup_symbol (name, block, (domain_enum) domain, + &is_a_field_of_this).symbol; + } + CATCH (except, RETURN_MASK_ALL) + { + GDB_PY_HANDLE_EXCEPTION (except); + } + END_CATCH + + if (symbol && !block) { struct frame_info *selected_frame; TRY { - selected_frame = get_selected_frame (_("No frame selected.")); - block = get_frame_block (selected_frame, NULL); + if (symbol_read_needs_frame(symbol)) { + selected_frame = get_selected_frame (_("No frame selected.")); + block = get_frame_block (selected_frame, NULL); + } } CATCH (except, RETURN_MASK_ALL) { @@ -398,17 +412,6 @@ gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw) END_CATCH } - TRY - { - symbol = lookup_symbol (name, block, (domain_enum) domain, - &is_a_field_of_this).symbol; - } - CATCH (except, RETURN_MASK_ALL) - { - GDB_PY_HANDLE_EXCEPTION (except); - } - END_CATCH - ret_tuple = PyTuple_New (2); if (!ret_tuple) return NULL;