From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1718 invoked by alias); 13 Jan 2015 09:44:36 -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 1708 invoked by uid 89); 13 Jan 2015 09:44:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.2 X-HELO: rock.gnat.com Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Tue, 13 Jan 2015 09:44:33 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id C686511641E; Tue, 13 Jan 2015 04:44:31 -0500 (EST) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id HPWY05Y5WEur; Tue, 13 Jan 2015 04:44:31 -0500 (EST) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 415F811641D; Tue, 13 Jan 2015 04:44:31 -0500 (EST) Received: by joel.gnat.com (Postfix, from userid 1000) id B437D48E8B; Tue, 13 Jan 2015 13:44:26 +0400 (RET) Date: Tue, 13 Jan 2015 09:44:00 -0000 From: Joel Brobecker To: Doug Evans Cc: gdb-patches Subject: Re: FYI: [python/Ada] gdb.lookup_type fails to looking primitive type Message-ID: <20150113094426.GE8167@adacore.com> References: <1421083588-927-1-git-send-email-brobecker@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0OAP2g/MAC+5xKAE" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-SW-Source: 2015-01/txt/msg00327.txt.bz2 --0OAP2g/MAC+5xKAE Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 1875 > > gdb/ChangeLog: > > > > * ada-lang.c (ada_lookup_symbol_nonlocal): If name not found > > in static block, then try searching for primitive types. > > > > gdb/testsuite/ChangeLog: > > > > * gdb.python/py-lkup_type.exp: New file. > > > > Tested on x86_64-linux, no regression. It's getting late, here, > > so I will push tomorrow, as I'd like to have the fix before we > > branch. > > Awesome, thanks. You are welcome. > Nit: py-lkup-tupe.exp instead of py-lkup_type.exp? > Or even py-lookup-type.exp. OK, I changed it to py-lookup-type.exp. > > +proc test_lookup_type { lang type_name } { > > + gdb_test_no_output "set language ${lang}" > > + gdb_test_no_output "python gdb.lookup_type('${type_name}')" \ > > + "lookup type ${type_name} using language ${lang}" > > +} > > I wouldn't have expected gdb_test_no_output to work here > for python.lookup_type, though I can see that it does. > This is no different than "python 1+1": it doesn't print anything either. And I actually believe that this is the expected behavior of a python "script", even if the "script" is passed on the command line. I am guessing that you are thinking of the case where you are inside the interactive interpreter, in which case, yes, we expect it to print the returned value each time. But this is not a test where we use the interactive interpreter here, hence I would not expect any output. If I wanted some output, I'd have used "print". As a result, a "clarifying" comment would have actually confused things more, IMO, and so I elected to not add one. Attached is what I ended up checking in: gdb/ChangeLog: * ada-lang.c (ada_lookup_symbol_nonlocal): If name not found in static block, then try searching for primitive types. gdb/testsuite/ChangeLog: * gdb.python/py-lookup-type.exp: New file. Thank you, -- Joel --0OAP2g/MAC+5xKAE Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0001-python-Ada-gdb.lookup_type-fails-to-looking-primitiv.patch" Content-length: 6012 >From 04dccad086aa9974fb66f8b5d1c1fb32d5a6ae0e Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Mon, 12 Jan 2015 15:46:34 +0400 Subject: [PATCH] [python/Ada] gdb.lookup_type fails to looking primitive type The following change... commit 1994afbf19892c9e614a034fbf1a5233e9addce3 Date: Tue Dec 23 07:55:39 2014 -0800 Subject: Look up primitive types as symbols. ... caused the following regression: % gdb (gdb) set lang ada (gdb) python print gdb.lookup_type('character') Traceback (most recent call last): File "", line 1, in gdb.error: No type named character. Error while executing Python code. This is because the language_lookup_primitive_type_as_symbol call was moved to the la_lookup_symbol_nonlocal hook. A couple of implementations have been upated accordingly, but the Ada version has not. This patch fixes this omission. gdb/ChangeLog: * ada-lang.c (ada_lookup_symbol_nonlocal): If name not found in static block, then try searching for primitive types. gdb/testsuite/ChangeLog: * gdb.python/py-lookup-type.exp: New file. --- gdb/ChangeLog | 5 +++ gdb/ada-lang.c | 33 +++++++++++++++- gdb/testsuite/ChangeLog | 4 ++ gdb/testsuite/gdb.python/py-lookup-type.exp | 59 +++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 gdb/testsuite/gdb.python/py-lookup-type.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index acbea15..6610b77 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2015-01-13 Joel Brobecker + + * ada-lang.c (ada_lookup_symbol_nonlocal): If name not found + in static block, then try searching for primitive types. + 2015-01-12 Patrick Palka * top.h (gdb_add_history): Declare. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 71c3b3a..ec06693 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -5598,7 +5598,38 @@ ada_lookup_symbol_nonlocal (const struct language_defn *langdef, const struct block *block, const domain_enum domain) { - return ada_lookup_symbol (name, block_static_block (block), domain, NULL); + struct symbol *sym; + + sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL); + if (sym != NULL) + return sym; + + /* If we haven't found a match at this point, try the primitive + types. In other languages, this search is performed before + searching for global symbols in order to short-circuit that + global-symbol search if it happens that the name corresponds + to a primitive type. But we cannot do the same in Ada, because + it is perfectly legitimate for a program to declare a type which + has the same name as a standard type. If looking up a type in + that situation, we have traditionally ignored the primitive type + in favor of user-defined types. This is why, unlike most other + languages, we search the primitive types this late and only after + having searched the global symbols without success. */ + + if (domain == VAR_DOMAIN) + { + struct gdbarch *gdbarch; + + if (block == NULL) + gdbarch = target_gdbarch (); + else + gdbarch = block_gdbarch (block); + sym = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name); + if (sym != NULL) + return sym; + } + + return NULL; } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index db1f521..868339c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-01-13 Joel Brobecker + + * gdb.python/py-lookup-type.exp: New file. + 2015-01-12 Pedro Alves * gdb.python/py-prompt.exp: When the board can't spawn for attach, diff --git a/gdb/testsuite/gdb.python/py-lookup-type.exp b/gdb/testsuite/gdb.python/py-lookup-type.exp new file mode 100644 index 0000000..d8fb9e7 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-lookup-type.exp @@ -0,0 +1,59 @@ +# Copyright (C) 2015 Free Software Foundation, Inc. + +# 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 . + +# This file is part of the GDB testsuite. It tests the mechanism +# of exposing types to Python. + +load_lib gdb-python.exp + +# Note that the purpose of this testcase is to test the behavior +# of gdb.lookup_type searching for the primitive types internally +# created by each language since GDB. So, we must start GDB without +# loading any symbol in. + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +proc test_lookup_type { lang type_name } { + gdb_test_no_output "set language ${lang}" + gdb_test_no_output "python gdb.lookup_type('${type_name}')" \ + "lookup type ${type_name} using language ${lang}" +} + +test_lookup_type "ada" "character" + +test_lookup_type "c" "char" + +test_lookup_type "d" "ucent" + +test_lookup_type "fortran" "character" + +test_lookup_type "go" "int32" + +test_lookup_type "java" "byte" + +test_lookup_type "modula-2" "CARDINAL" + +test_lookup_type "opencl" "ushort" + +test_lookup_type "objective-c" "char" + +test_lookup_type "opencl" "ushort" + +test_lookup_type "pascal" "char" -- 1.9.1 --0OAP2g/MAC+5xKAE--