From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 64517 invoked by alias); 19 Mar 2018 21:22:07 -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 64508 invoked by uid 89); 19 Mar 2018 21:22:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=UD:gdb.ada, gdb.ada, gdbada, UD:ada 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 ESMTP; Mon, 19 Mar 2018 21:22:01 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 3A05D56116 for ; Mon, 19 Mar 2018 17:22:00 -0400 (EDT) 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 TWlvxOIzwdt0 for ; Mon, 19 Mar 2018 17:22:00 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id DF39056112 for ; Mon, 19 Mar 2018 17:21:59 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id 3C3CE809B7; Mon, 19 Mar 2018 14:21:58 -0700 (PDT) Date: Mon, 19 Mar 2018 21:22:00 -0000 From: Joel Brobecker To: gdb-patches@sourceware.org Subject: PING^2: [RFA/RFC] fix PR gdb/22670 (pb looking up some symbols when they have a linkage name) (was: "Re: [RFC] regresssion(internal-error) printing subprogram argument") Message-ID: <20180319212158.narawyklbdhitd6i@adacore.com> References: <832dbb30-7c2b-40ed-c03c-654bd1e2ea32@redhat.com> <20180117091332.z7bqu4aljudq33sw@adacore.com> <20180126035055.vbjtowj6q5ftbwiz@adacore.com> <21bfbb6a-bb10-812b-c34a-d367321e8d5e@redhat.com> <20180129103841.kdkomcjbuwiat5b4@adacore.com> <250976c6-6e7a-6a8e-b9f2-a57f5b92b965@redhat.com> <20180130035612.xghiskhiweftijxi@adacore.com> <20180205095659.y5jzjj2e5bx6pjyf@adacore.com> <20180209090919.lmwjll72hccopjsk@adacore.com> <20180221030210.xzthyal2cysn5s72@adacore.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180221030210.xzthyal2cysn5s72@adacore.com> User-Agent: NeoMutt/20170113 (1.7.2) X-SW-Source: 2018-03/txt/msg00364.txt.bz2 On Wed, Feb 21, 2018 at 07:02:11AM +0400, Joel Brobecker wrote: > > > All in all, I think a better solution would be to put that information > > > directly in the language_defn itself, via a new "attribute". > > > Something like a... > > > > I ended up choosing this approach. lookup names is still a bit > > foggy for me, so the comments I wrote and/or the name of the > > new language_defn attribute might be a bit off. As always, I am > > grateful for suggestions :). > > > > gdb/ChangeLog: > > > > PR gdb/22670 > > * dwarf2read.c (dwarf2_physname): Do not return the demangled > > symbol name is the CU's language stores symbol names in linkage > > format. > > * language.h (struct language_defn) > > : New field. Adjust > > all instances of this struct. > > > > gdb/testsuite/ChangeLog: > > > > * gdb.ada/maint_with_ada.exp: Remove PR gdb/22670 setup_kfail. > > > > * gdb.ada/notcplusplus: New testcase. > > > > * gdb.base/c-linkage-name.c: New file. > > * gdb.base/c-linkage-name.exp: New testcase. > > > > Tested on x86_64-linux. > > This also passes AdaCore's internal GDB testsuite. I'm thinking of pushing this patch at some point, since it has been waiting for a review for a quite a while, now. If it's lack of time and you'd like a little more time before I push, please let me know! > Any comment on this patch? > > Thanks! > > > >From c22aef84cc86097d6d8b654b0586a3fbc1ff6af3 Mon Sep 17 00:00:00 2001 > > From: Joel Brobecker > > Date: Fri, 9 Feb 2018 02:13:34 -0500 > > Subject: [PATCH] problem looking up some symbols when they have a linkage name > > > > This patch fixes a known failure in gdb.ada/maint_with_ada.exp > > (maintenance check-psymtabs). Another way to witness the same > > issue is by considering the following Ada declarations... > > > > type Wrapper is record > > A : Integer; > > end record; > > u00045 : constant Wrapper := (A => 16#060287af#); > > pragma Export (C, u00045, "symada__cS"); > > > > ... which declares a variable name "u00045" but with a linkage > > name which is "symada__cS". This variable is a record with one > > component, the Ada equivalent of a struct with one field in C. > > Trying to print that variable's value currently yields: > > > > (gdb) p /x > > 'symada(char, signed)' has unknown type; cast it to its declared type > > > > This indicates that GDB was only able to find the minimal symbol, > > but not the full symbol. The expected output is: > > > > (gdb) print /x > > $1 = (a => 0x60287af) > > > > The error message gives a hint about what's happening: We processed > > the symbol through gdb_demangle, which in the case of this particular > > symbol name, ends up matching the C++ naming scheme. As a result, > > the demangler transforms our symbol name into 'symada(char, signed)', > > thus breaking Ada lookups. > > > > This patch fixes the issue by first introducing a new language_defn > > attribute called la_store_sym_names_in_linkage_form_p, which is a boolean > > to be set to true for the few languages that do not want their symbols > > to have their names stored in demangled form, and false otherwise. > > We then use this language attribute to skip the call to gdb_demangle > > for all languages whose la_store_sym_names_in_linkage_form_p is true. > > > > In terms of the selection of languages for which the new attribute > > is set to true, the selection errs on the side of preserving the > > existing behavior, and only changes the behavior for the languages > > where we are certain storing symbol names in demangling form is not > > needed. It is conceivable that other languages might be in the same > > situation, but I not knowing in detail the symbol name enconding > > strategy, I decided to play it safe and let other language maintainers > > potentially adjust their language if it makes sense to do so. > > > > gdb/ChangeLog: > > > > PR gdb/22670 > > * dwarf2read.c (dwarf2_physname): Do not return the demangled > > symbol name is the CU's language stores symbol names in linkage > > format. > > * language.h (struct language_defn) > > : New field. Adjust > > all instances of this struct. > > > > gdb/testsuite/ChangeLog: > > > > * gdb.ada/maint_with_ada.exp: Remove PR gdb/22670 setup_kfail. > > > > * gdb.ada/notcplusplus: New testcase. > > > > * gdb.base/c-linkage-name.c: New file. > > * gdb.base/c-linkage-name.exp: New testcase. > > > > Tested on x86_64-linux. > > This also passes AdaCore's internal GDB testsuite. > > --- > > gdb/ada-lang.c | 1 + > > gdb/c-lang.c | 4 +++ > > gdb/d-lang.c | 1 + > > gdb/dwarf2read.c | 6 +++- > > gdb/f-lang.c | 1 + > > gdb/go-lang.c | 1 + > > gdb/language.c | 2 ++ > > gdb/language.h | 20 +++++++++++++ > > gdb/m2-lang.c | 1 + > > gdb/objc-lang.c | 1 + > > gdb/opencl-lang.c | 1 + > > gdb/p-lang.c | 1 + > > gdb/rust-lang.c | 1 + > > gdb/testsuite/gdb.ada/maint_with_ada.exp | 1 - > > gdb/testsuite/gdb.ada/notcplusplus.exp | 45 ++++++++++++++++++++++++++++ > > gdb/testsuite/gdb.ada/notcplusplus/foo.adb | 21 +++++++++++++ > > gdb/testsuite/gdb.ada/notcplusplus/pck.adb | 21 +++++++++++++ > > gdb/testsuite/gdb.ada/notcplusplus/pck.ads | 19 ++++++++++++ > > gdb/testsuite/gdb.ada/notcplusplus/ver.ads | 22 ++++++++++++++ > > gdb/testsuite/gdb.base/c-linkage-name.c | 44 ++++++++++++++++++++++++++++ > > gdb/testsuite/gdb.base/c-linkage-name.exp | 47 ++++++++++++++++++++++++++++++ > > 21 files changed, 259 insertions(+), 2 deletions(-) > > create mode 100644 gdb/testsuite/gdb.ada/notcplusplus.exp > > create mode 100644 gdb/testsuite/gdb.ada/notcplusplus/foo.adb > > create mode 100644 gdb/testsuite/gdb.ada/notcplusplus/pck.adb > > create mode 100644 gdb/testsuite/gdb.ada/notcplusplus/pck.ads > > create mode 100644 gdb/testsuite/gdb.ada/notcplusplus/ver.ads > > create mode 100644 gdb/testsuite/gdb.base/c-linkage-name.c > > create mode 100644 gdb/testsuite/gdb.base/c-linkage-name.exp > > > > diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c > > index 0da58d9..7f99a2e 100644 > > --- a/gdb/ada-lang.c > > +++ b/gdb/ada-lang.c > > @@ -14521,6 +14521,7 @@ extern const struct language_defn ada_language_defn = { > > ada_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + true, /* la_store_sym_names_in_linkage_form_p */ > > ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */ > > basic_lookup_transparent_type, /* lookup_transparent_type */ > > ada_la_decode, /* Language specific symbol demangler */ > > diff --git a/gdb/c-lang.c b/gdb/c-lang.c > > index a0b553e..658c7f7 100644 > > --- a/gdb/c-lang.c > > +++ b/gdb/c-lang.c > > @@ -853,6 +853,7 @@ extern const struct language_defn c_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + true, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > NULL, /* Language specific symbol demangler */ > > @@ -998,6 +999,7 @@ extern const struct language_defn cplus_language_defn = > > default_read_var_value, /* la_read_var_value */ > > cplus_skip_trampoline, /* Language specific skip_trampoline */ > > "this", /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > cp_lookup_transparent_type, /* lookup_transparent_type */ > > gdb_demangle, /* Language specific symbol demangler */ > > @@ -1052,6 +1054,7 @@ extern const struct language_defn asm_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + true, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > NULL, /* Language specific symbol demangler */ > > @@ -1106,6 +1109,7 @@ extern const struct language_defn minimal_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + true, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > NULL, /* Language specific symbol demangler */ > > diff --git a/gdb/d-lang.c b/gdb/d-lang.c > > index e0afe48..688ae98 100644 > > --- a/gdb/d-lang.c > > +++ b/gdb/d-lang.c > > @@ -229,6 +229,7 @@ extern const struct language_defn d_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline. */ > > "this", > > + false, /* la_store_sym_names_in_linkage_form_p */ > > d_lookup_symbol_nonlocal, > > basic_lookup_transparent_type, > > d_demangle, /* Language specific symbol demangler. */ > > diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c > > index d651725..b4c087f 100644 > > --- a/gdb/dwarf2read.c > > +++ b/gdb/dwarf2read.c > > @@ -11142,7 +11142,11 @@ dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu) > > if (mangled != NULL) > > { > > > > - if (cu->language == language_go) > > + if (language_def (cu->language)->la_store_sym_names_in_linkage_form_p) > > + { > > + /* Do nothing (do not demangle the symbol name). */ > > + } > > + else if (cu->language == language_go) > > { > > /* This is a lie, but we already lie to the caller new_symbol. > > new_symbol assumes we return the mangled name. > > diff --git a/gdb/f-lang.c b/gdb/f-lang.c > > index 74f5622..81922f7 100644 > > --- a/gdb/f-lang.c > > +++ b/gdb/f-lang.c > > @@ -269,6 +269,7 @@ extern const struct language_defn f_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > > > diff --git a/gdb/go-lang.c b/gdb/go-lang.c > > index 022b8de..e9cba77 100644 > > --- a/gdb/go-lang.c > > +++ b/gdb/go-lang.c > > @@ -590,6 +590,7 @@ extern const struct language_defn go_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline. */ > > NULL, /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, > > basic_lookup_transparent_type, > > go_demangle, /* Language specific symbol demangler. */ > > diff --git a/gdb/language.c b/gdb/language.c > > index 0d8604b..22199e0 100644 > > --- a/gdb/language.c > > +++ b/gdb/language.c > > @@ -864,6 +864,7 @@ const struct language_defn unknown_language_defn = > > default_read_var_value, /* la_read_var_value */ > > unk_lang_trampoline, /* Language specific skip_trampoline */ > > "this", /* name_of_this */ > > + true, /* store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > unk_lang_demangle, /* Language specific symbol demangler */ > > @@ -915,6 +916,7 @@ const struct language_defn auto_language_defn = > > default_read_var_value, /* la_read_var_value */ > > unk_lang_trampoline, /* Language specific skip_trampoline */ > > "this", /* name_of_this */ > > + false, /* store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > unk_lang_demangle, /* Language specific symbol demangler */ > > diff --git a/gdb/language.h b/gdb/language.h > > index 06b42ae..029de4a 100644 > > --- a/gdb/language.h > > +++ b/gdb/language.h > > @@ -264,6 +264,26 @@ struct language_defn > > > > const char *la_name_of_this; > > > > + /* True if the symbols names should be stored in GDB's data structures > > + for minimal/partial/full symbols using their linkage (aka mangled) > > + form; false if the symbol names should be demangled first. > > + > > + Most languages implement symbol lookup by comparing the demangled > > + names, in which case it is advantageous to store that information > > + already demangled, and so would set this field to false. > > + > > + On the other hand, some languages have opted for doing symbol > > + lookups by comparing mangled names instead, for reasons usually > > + specific to the language. Those languages should set this field > > + to true. > > + > > + And finally, other languages such as C or Asm do not have > > + the concept of mangled vs demangled name, so those languages > > + should set this field to true as well, to prevent any accidental > > + demangling through an unrelated language's demangler. */ > > + > > + const bool la_store_sym_names_in_linkage_form_p; > > + > > /* This is a function that lookup_symbol will call when it gets to > > the part of symbol lookup where C looks up static and global > > variables. */ > > diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c > > index 11ccab3..6e6434b 100644 > > --- a/gdb/m2-lang.c > > +++ b/gdb/m2-lang.c > > @@ -377,6 +377,7 @@ extern const struct language_defn m2_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > NULL, /* Language specific symbol demangler */ > > diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c > > index c714ec3..4f7dc36 100644 > > --- a/gdb/objc-lang.c > > +++ b/gdb/objc-lang.c > > @@ -389,6 +389,7 @@ extern const struct language_defn objc_language_defn = { > > default_read_var_value, /* la_read_var_value */ > > objc_skip_trampoline, /* Language specific skip_trampoline */ > > "self", /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > objc_demangle, /* Language specific symbol demangler */ > > diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c > > index 268c3c5..9c5b90c 100644 > > --- a/gdb/opencl-lang.c > > +++ b/gdb/opencl-lang.c > > @@ -1065,6 +1065,7 @@ extern const struct language_defn opencl_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > NULL, /* Language specific symbol demangler */ > > diff --git a/gdb/p-lang.c b/gdb/p-lang.c > > index 03db2df..3ff7f56 100644 > > --- a/gdb/p-lang.c > > +++ b/gdb/p-lang.c > > @@ -439,6 +439,7 @@ extern const struct language_defn pascal_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > "this", /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > NULL, /* Language specific symbol demangler */ > > diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c > > index 5ff80b2..2d7c1f7 100644 > > --- a/gdb/rust-lang.c > > +++ b/gdb/rust-lang.c > > @@ -2290,6 +2290,7 @@ extern const struct language_defn rust_language_defn = > > default_read_var_value, /* la_read_var_value */ > > NULL, /* Language specific skip_trampoline */ > > NULL, /* name_of_this */ > > + false, /* la_store_sym_names_in_linkage_form_p */ > > rust_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ > > basic_lookup_transparent_type,/* lookup_transparent_type */ > > gdb_demangle, /* Language specific symbol demangler */ > > diff --git a/gdb/testsuite/gdb.ada/maint_with_ada.exp b/gdb/testsuite/gdb.ada/maint_with_ada.exp > > index 73da613..9ede035 100644 > > --- a/gdb/testsuite/gdb.ada/maint_with_ada.exp > > +++ b/gdb/testsuite/gdb.ada/maint_with_ada.exp > > @@ -32,7 +32,6 @@ gdb_breakpoint "adainit" > > gdb_breakpoint "Var_Arr_Typedef" > > gdb_breakpoint "Do_Nothing" > > > > -setup_kfail gdb/22670 "*-*-*" > > gdb_test_no_output "maintenance check-psymtabs" > > > > gdb_test_no_output "maintenance check-symtabs" > > diff --git a/gdb/testsuite/gdb.ada/notcplusplus.exp b/gdb/testsuite/gdb.ada/notcplusplus.exp > > new file mode 100644 > > index 0000000..b2a24e8 > > --- /dev/null > > +++ b/gdb/testsuite/gdb.ada/notcplusplus.exp > > @@ -0,0 +1,45 @@ > > +# Copyright 2018 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 . > > + > > +load_lib "ada.exp" > > + > > +if { [skip_ada_tests] } { return -1 } > > + > > +standard_ada_testfile foo > > + > > +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} { > > + return -1 > > +} > > + > > +clean_restart ${testfile} > > + > > +gdb_test "print /x " \ > > + "= \\(a => 0x60287af\\)" \ > > + "print before loading symbols from ver.ads" > > + > > +# Force the partial symbosl from ver.ads to be expanded into full symbols. > > + > > +gdb_test \ > > + "list ver.ads:16" \ > > + [multi_line ".*" \ > > + "16\\s+package Ver is" \ > > + "17\\s+type Wrapper is record" \ > > + "18\\s+A : Integer;" \ > > + "19\\s+end record;" \ > > + "20\\s+u00045 : constant Wrapper := \\(A => 16#060287af#\\);"] > > + > > +gdb_test "print /x " \ > > + "= \\(a => 0x60287af\\)" \ > > + "print after loading symbols from ver.ads" > > diff --git a/gdb/testsuite/gdb.ada/notcplusplus/foo.adb b/gdb/testsuite/gdb.ada/notcplusplus/foo.adb > > new file mode 100644 > > index 0000000..89e42f9 > > --- /dev/null > > +++ b/gdb/testsuite/gdb.ada/notcplusplus/foo.adb > > @@ -0,0 +1,21 @@ > > +-- Copyright 2018 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 . > > + > > +with Pck; use Pck; > > +with Ver; use Ver; > > +procedure Foo is > > +begin > > + Do_Nothing (u00045'Address); > > +end Foo; > > diff --git a/gdb/testsuite/gdb.ada/notcplusplus/pck.adb b/gdb/testsuite/gdb.ada/notcplusplus/pck.adb > > new file mode 100644 > > index 0000000..dcfb306 > > --- /dev/null > > +++ b/gdb/testsuite/gdb.ada/notcplusplus/pck.adb > > @@ -0,0 +1,21 @@ > > +-- Copyright 2018 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 . > > + > > +package body Pck is > > + procedure Do_Nothing (A : System.Address) is > > + begin > > + null; > > + end Do_Nothing; > > +end Pck; > > diff --git a/gdb/testsuite/gdb.ada/notcplusplus/pck.ads b/gdb/testsuite/gdb.ada/notcplusplus/pck.ads > > new file mode 100644 > > index 0000000..33e369e > > --- /dev/null > > +++ b/gdb/testsuite/gdb.ada/notcplusplus/pck.ads > > @@ -0,0 +1,19 @@ > > +-- Copyright 2018 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 . > > + > > +with System; > > +package Pck is > > + procedure Do_Nothing (A : System.Address); > > +end Pck; > > diff --git a/gdb/testsuite/gdb.ada/notcplusplus/ver.ads b/gdb/testsuite/gdb.ada/notcplusplus/ver.ads > > new file mode 100644 > > index 0000000..8f264d0 > > --- /dev/null > > +++ b/gdb/testsuite/gdb.ada/notcplusplus/ver.ads > > @@ -0,0 +1,22 @@ > > +-- Copyright 2018 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 . > > + > > +package Ver is > > + type Wrapper is record > > + A : Integer; > > + end record; > > + u00045 : constant Wrapper := (A => 16#060287af#); > > + pragma Export (C, u00045, "symada__cS"); > > +end Ver; > > diff --git a/gdb/testsuite/gdb.base/c-linkage-name.c b/gdb/testsuite/gdb.base/c-linkage-name.c > > new file mode 100644 > > index 0000000..925004c > > --- /dev/null > > +++ b/gdb/testsuite/gdb.base/c-linkage-name.c > > @@ -0,0 +1,44 @@ > > +/* This testcase is part of GDB, the GNU debugger. > > + > > + Copyright 2018 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 . */ > > + > > +struct wrapper > > +{ > > + int a; > > +}; > > + > > +/* Create a global variable whose name in the assembly code > > + (aka the "linkage name") is different from the name in > > + the source code. The goal is to create a symbol described > > + in DWARF using a DW_AT_linkage_name attribute, with a name > > + which follows the C++ mangling. > > + > > + In this particular case, we chose "symada__cS" which, if it were > > + demangled, would translate to "symada (char, signed)". */ > > +struct wrapper mundane asm ("symada__cS") = {0x060287af}; > > + > > +void > > +do_something (struct wrapper *w) > > +{ > > + w->a++; > > +} > > + > > +int > > +main (void) > > +{ > > + do_something (&mundane); > > + return 0; > > +} > > diff --git a/gdb/testsuite/gdb.base/c-linkage-name.exp b/gdb/testsuite/gdb.base/c-linkage-name.exp > > new file mode 100644 > > index 0000000..c80a530 > > --- /dev/null > > +++ b/gdb/testsuite/gdb.base/c-linkage-name.exp > > @@ -0,0 +1,47 @@ > > +# Copyright 2018 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 is intended to test that > > +# gdb can correctly print arrays with indexes for each element of the > > +# array. > > + > > +standard_testfile .c > > + > > +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { > > + untested "failed to compile" > > + return -1 > > +} > > + > > +clean_restart ${binfile} > > + > > +# Try to print MUNDANE, but using its linkage name. > > + > > +gdb_test "print symada__cS" \ > > + " = {a = 100829103}" \ > > + "print symada__cS before partial symtab expansion" > > + > > +# Force the symbols to be expanded for the unit that contains > > +# our symada__cS symbol by, e.g. inserting a breakpoint on one > > +# of the founction also provided by the same using. > > + > > +gdb_test "break main" \ > > + "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal\\." > > + > > +# Try to print MUNDANE using its linkage name again, after partial > > +# symtab expansion. > > + > > +gdb_test "print symada__cS" \ > > + " = {a = 100829103}" \ > > + "print symada__cS after partial symtab expansion" > > -- > > 2.1.4 > > > > > -- > Joel -- Joel