
We discovered that the Ada support in gdb depends on the order of the DW_AT_name and DW_AT_linkage_name attributes in the DWARF. In particular, if they are emitted in the "wrong" order for some system symbols, "catch exception" will not work. This patch fixes this problem by arranging to always prefer the linkage name if both exist. This seems to be what the full symbol reader already does -- that is, this is another bug arising from having two different DWARF readers. Another possible issue here is that gdb still doesn't really preserve mangled names properly. There's a PR open about this. However, this seems to be somewhat involved to fix, which is why this patch continues to work around the bigger issue. gdb/ChangeLog 2019-06-28 Tom Tromey <tromey@adacore.com> * dwarf2read.c (partial_die_info::read): Prefer the linkage name for Ada. gdb/testsuite/ChangeLog 2019-06-28 Tom Tromey <tromey@adacore.com> * gdb.dwarf2/ada-linkage-name.c: New file. * gdb.dwarf2/ada-linkage-name.exp: New file.
41 lines
1 KiB
C
41 lines
1 KiB
C
/* This testcase is part of GDB, the GNU debugger.
|
|
|
|
Copyright 2019 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 <http://www.gnu.org/licenses/>. */
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
asm ("main_label: .globl main_label");
|
|
return 0;
|
|
}
|
|
|
|
/* First dummy function. */
|
|
|
|
int
|
|
first (char *x)
|
|
{
|
|
asm ("first_label: .globl first_label");
|
|
return 0;
|
|
}
|
|
|
|
/* Second dummy function. */
|
|
|
|
int
|
|
second (char *x)
|
|
{
|
|
asm ("second_label: .globl second_label");
|
|
return 0;
|
|
}
|