From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 70945 invoked by alias); 21 Feb 2018 03:02:23 -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 70934 invoked by uid 89); 21 Feb 2018 03:02:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=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= 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; Wed, 21 Feb 2018 03:02:18 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id BA3B511629C for ; Tue, 20 Feb 2018 22:02:16 -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 wzcslJPX68Sq for ; Tue, 20 Feb 2018 22:02:16 -0500 (EST) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id B8B0511629B for ; Tue, 20 Feb 2018 22:02:15 -0500 (EST) Received: by joel.gnat.com (Postfix, from userid 1000) id 0898F83054; Wed, 21 Feb 2018 07:02:11 +0400 (+04) Date: Wed, 21 Feb 2018 03:02:00 -0000 From: Joel Brobecker To: gdb-patches@sourceware.org Subject: PING: [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: <20180221030210.xzthyal2cysn5s72@adacore.com> References: <8df5cf8b-6e4e-e310-fcbd-2615334fe5b9@redhat.com> <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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180209090919.lmwjll72hccopjsk@adacore.com> User-Agent: NeoMutt/20170113 (1.7.2) X-SW-Source: 2018-02/txt/msg00274.txt.bz2 > > 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. 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