public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6758] dwarf2out: Fix -gsplit-dwarf on riscv [PR103874]
@ 2022-01-20 10:59 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2022-01-20 10:59 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:68f03ac49cb4f585dbce78dc9e4c4a9ec950e83c
commit r12-6758-g68f03ac49cb4f585dbce78dc9e4c4a9ec950e83c
Author: Jakub Jelinek <jakub@redhat.com>
Date: Thu Jan 20 11:58:20 2022 +0100
dwarf2out: Fix -gsplit-dwarf on riscv [PR103874]
riscv*-*-* are the only modern targets that !HAVE_AS_LEB128 (apparently
due to some aggressive linker optimizations).
As the following testcase shows, we mishandle in index_rnglists the
!HAVE_AS_LEB128 && !have_multiple_function_sections case.
output_rnglists does roughly:
FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
{
...
if (block_num > 0)
{
...
if (HAVE_AS_LEB128)
{
if (!have_multiple_function_sections)
{
// code not using r->*_entry
continue;
}
// code that sometimes doesn't use r->*_entry,
// sometimes r->begin_entry
}
else if (dwarf_split_debug_info)
{
// code that uses both r->begin_entry and r->end_entry
}
else
{
// code not using r->*_entry
}
}
else if (block_num < 0)
{
if (!have_multiple_function_sections)
gcc_unreachable ();
...
}
}
and index_rnglists is what sets up those r->{begin,end}_entry members.
The code did an early if (!have_multiple_function_sections) continue;
which is fine for the HAVE_AS_LEB128 case, because r->*_entry is not
used in that case, but not for !HAVE_AS_LEB128 that uses it anyway.
2022-01-20 Jakub Jelinek <jakub@redhat.com>
PR debug/103874
* dwarf2out.cc (index_rnglists): For !HAVE_AS_LEB128 and
block_num > 0, index entry even if !have_multiple_function_sections.
* gcc.dg/debug/dwarf2/pr103874.c: New test.
Diff:
---
gcc/dwarf2out.cc | 5 +++--
gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c | 12 ++++++++++++
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
index f3bd322d901..a5a7f630f9c 100644
--- a/gcc/dwarf2out.cc
+++ b/gcc/dwarf2out.cc
@@ -12094,9 +12094,10 @@ index_rnglists (void)
if (r->label && r->idx != DW_RANGES_IDX_SKELETON)
r->idx = rnglist_idx++;
- if (!have_multiple_function_sections)
- continue;
int block_num = r->num;
+ if ((HAVE_AS_LEB128 || block_num < 0)
+ && !have_multiple_function_sections)
+ continue;
if (HAVE_AS_LEB128 && (r->label || r->maybe_new_sec))
base = false;
if (block_num > 0)
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c
new file mode 100644
index 00000000000..2f0e2d44e42
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c
@@ -0,0 +1,12 @@
+/* PR debug/103874 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -g -gsplit-dwarf -dA -Wno-implicit-function-declaration" } */
+
+void
+foo (void)
+{
+ {
+ bar ();
+ baz ();
+ }
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-01-20 10:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-20 10:59 [gcc r12-6758] dwarf2out: Fix -gsplit-dwarf on riscv [PR103874] Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).