public inbox for gdb-prs@sourceware.org
help / color / mirror / Atom feed
* [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main
@ 2020-04-06 13:28 vries at gcc dot gnu.org
2020-04-06 13:31 ` [Bug symtab/25791] " vries at gcc dot gnu.org
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: vries at gcc dot gnu.org @ 2020-04-06 13:28 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=25791
Bug ID: 25791
Summary: [cc-with-gdb-index] Failure to run to main
Product: gdb
Version: HEAD
Status: NEW
Severity: normal
Priority: P2
Component: symtab
Assignee: unassigned at sourceware dot org
Reporter: vries at gcc dot gnu.org
Target Milestone: ---
Created attachment 12437
--> https://sourceware.org/bugzilla/attachment.cgi?id=12437&action=edit
Test-case patch
When running test-case gdb.dwarf2/imported-unit-runto-main.exp (see attached
patch) with board cc-with-gdb-index, we get:
...
(gdb) break main
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
Breakpoint 1 at 0x4004ab
(gdb) PASS: gdb.dwarf2/imported-unit-runto-main.exp: setting breakpoint at main
run
Starting program:
/data/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.dwarf2/imported-unit-runto-main/imported-unit-runto-main
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
Breakpoint 1, warning: (Internal error: pc 0x4004ab in read in CU, but not in
symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
0x00000000004004ab in main ()
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
(gdb) FAIL: gdb.dwarf2/imported-unit-runto-main.exp: running to main in runto
...
With native and boards cc-with-debug-names and readnow, there are no issues.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug symtab/25791] [cc-with-gdb-index] Failure to run to main
2020-04-06 13:28 [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main vries at gcc dot gnu.org
@ 2020-04-06 13:31 ` vries at gcc dot gnu.org
2020-04-06 13:35 ` vries at gcc dot gnu.org
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: vries at gcc dot gnu.org @ 2020-04-06 13:31 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=25791
Tom de Vries <vries at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |simark at simark dot ca
--- Comment #1 from Tom de Vries <vries at gcc dot gnu.org> ---
Using objdump, we get:
...
$ objdump --dwarf=gdb_index
outputs/gdb.dwarf2/imported-unit-runto-main/imported-unit-runto-main
outputs/gdb.dwarf2/imported-unit-runto-main/imported-unit-runto-main: file
format elf64-x86-64
Contents of the .gdb_index section:
Version 8
CU table:
[ 0] 0x0 - 0x2d
[ 1] 0x2e - 0xa4
[ 2] 0xa5 - 0xc6
[ 3] 0xf7 - 0x126
[ 4] 0x127 - 0x2de
[ 5] 0x2df - 0x300
TU table:
Address table:
00000000004003b0 00000000004003c2 2
00000000004003c2 00000000004003c7 6
00000000004003d0 00000000004003fb 0
00000000004004a7 00000000004004b2 4
00000000004004c0 0000000000400532 5
0000000000400534 0000000000400538 2
0000000000400538 000000000040053d 6
Symbol table:
[ 40] __libc_csu_fini: 5 [global, function]
[ 52] short unsigned int: 1 [static, type]
[ 68] unsigned char: 1 [static, type]
[ 94] _IO_stdin_used: 1 [global, variable]
[114] size_t: 5 [static, type]
[343] long unsigned int: 1 [static, type]
[442] short int: 1 [static, type]
[452] long double: 5 [static, type]
[454] long long int: 5 [static, type]
[489] main: 4 [global, function]
[518] char: 1 [static, type]
[689] signed char: 1 [static, type]
[732] unsigned int: 1 [static, type]
[754] int: 1 [static, type]
[802] __libc_csu_init: 5 [global, function]
[955] long int: 1 [static, type]
...
So, main is in CU 4, which is at 0x127 - 0x2de. However, that CU is:
...
Compilation Unit @ offset 0x127:
Length: 0x1b4 (32-bit)
<0><132>: Abbrev Number: 1 (DW_TAG_compile_unit)
<138> DW_AT_name : elf-init.c
...
which does not contain main.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug symtab/25791] [cc-with-gdb-index] Failure to run to main
2020-04-06 13:28 [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main vries at gcc dot gnu.org
2020-04-06 13:31 ` [Bug symtab/25791] " vries at gcc dot gnu.org
@ 2020-04-06 13:35 ` vries at gcc dot gnu.org
2020-04-06 14:13 ` vries at gcc dot gnu.org
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: vries at gcc dot gnu.org @ 2020-04-06 13:35 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=25791
--- Comment #2 from Tom de Vries <vries at gcc dot gnu.org> ---
Created attachment 12438
--> https://sourceware.org/bugzilla/attachment.cgi?id=12438&action=edit
readelf -wi output
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug symtab/25791] [cc-with-gdb-index] Failure to run to main
2020-04-06 13:28 [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main vries at gcc dot gnu.org
2020-04-06 13:31 ` [Bug symtab/25791] " vries at gcc dot gnu.org
2020-04-06 13:35 ` vries at gcc dot gnu.org
@ 2020-04-06 14:13 ` vries at gcc dot gnu.org
2020-04-07 9:47 ` vries at gcc dot gnu.org
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: vries at gcc dot gnu.org @ 2020-04-06 14:13 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=25791
--- Comment #3 from Tom de Vries <vries at gcc dot gnu.org> ---
The partial unit is ignored here
...
/* CU of a shared file from 'dwz -m' may be unused by this main file.
It may be referenced from a local scope but in such case it does not
need to be present in .gdb_index. */
if (psymtab == NULL)
continue;
...
and if, instead of continuing, we still generate a CU entry:
...
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
index 8c933dc63b..d7ad0a2c9b 100644
--- a/gdb/dwarf2/index-write.c
+++ b/gdb/dwarf2/index-write.c
@@ -1429,15 +1429,15 @@ write_gdbindex (struct dwarf2_per_objfile
*dwarf2_per_objfile, FILE *out_file,
/* CU of a shared file from 'dwz -m' may be unused by this main file.
It may be referenced from a local scope but in such case it does not
need to be present in .gdb_index. */
- if (psymtab == NULL)
- continue;
-
- if (psymtab->user == NULL)
- recursively_write_psymbols (objfile, psymtab, &symtab,
- psyms_seen, i);
+ if (psymtab != NULL
+ && psymtab->user == NULL)
+ {
+ recursively_write_psymbols (objfile, psymtab, &symtab,
+ psyms_seen, i);
- const auto insertpair = cu_index_htab.emplace (psymtab, i);
- gdb_assert (insertpair.second);
+ const auto insertpair = cu_index_htab.emplace (psymtab, i);
+ gdb_assert (insertpair.second);
+ }
/* The all_comp_units list contains CUs read from the objfile as well as
from the eventual dwz file. We need to place the entry in the
...
the test passes.
I have no clue whether the fix is correct/optimal.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug symtab/25791] [cc-with-gdb-index] Failure to run to main
2020-04-06 13:28 [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main vries at gcc dot gnu.org
` (2 preceding siblings ...)
2020-04-06 14:13 ` vries at gcc dot gnu.org
@ 2020-04-07 9:47 ` vries at gcc dot gnu.org
2020-04-16 12:56 ` cvs-commit at gcc dot gnu.org
2020-04-16 13:01 ` vries at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: vries at gcc dot gnu.org @ 2020-04-07 9:47 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=25791
--- Comment #4 from Tom de Vries <vries at gcc dot gnu.org> ---
Submitted patch:
https://sourceware.org/pipermail/gdb-patches/2020-April/167434.html
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug symtab/25791] [cc-with-gdb-index] Failure to run to main
2020-04-06 13:28 [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main vries at gcc dot gnu.org
` (3 preceding siblings ...)
2020-04-07 9:47 ` vries at gcc dot gnu.org
@ 2020-04-16 12:56 ` cvs-commit at gcc dot gnu.org
2020-04-16 13:01 ` vries at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-04-16 12:56 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=25791
--- Comment #5 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tom de Vries <vries@sourceware.org>:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=efba5c2319d6c25393e5cce9a2d30bbc0cb53123
commit efba5c2319d6c25393e5cce9a2d30bbc0cb53123
Author: Tom de Vries <tdevries@suse.de>
Date: Thu Apr 16 14:56:32 2020 +0200
[gdb/symtab] Handle PU without import in "save gdb-index"
Consider the test-case added in this patch, with resulting dwarf:
...
Compilation Unit @ offset 0xc7:
Length: 0x2c (32-bit)
Version: 4
Abbrev Offset: 0x64
Pointer Size: 8
<0><d2>: Abbrev Number: 2 (DW_TAG_partial_unit)
<d3> DW_AT_language : 2 (non-ANSI C)
<d4> DW_AT_name : imported_unit.c
<1><e4>: Abbrev Number: 3 (DW_TAG_base_type)
<e5> DW_AT_byte_size : 4
<e6> DW_AT_encoding : 5 (signed)
<e7> DW_AT_name : int
<1><eb>: Abbrev Number: 4 (DW_TAG_subprogram)
<ec> DW_AT_name : main
<f1> DW_AT_type : <0xe4>
<f5> DW_AT_external : 1
<1><f6>: Abbrev Number: 0
Compilation Unit @ offset 0xf7:
Length: 0x2c (32-bit)
Version: 4
Abbrev Offset: 0x85
Pointer Size: 8
<0><102>: Abbrev Number: 2 (DW_TAG_compile_unit)
<103> DW_AT_language : 2 (non-ANSI C)
<104> DW_AT_name : <artificial>
<1><111>: Abbrev Number: 3 (DW_TAG_subprogram)
<112> DW_AT_abstract_origin: <0xeb>
<116> DW_AT_low_pc : 0x4004a7
<11e> DW_AT_high_pc : 0x4004b2
<1><126>: Abbrev Number: 0
...
When run with target board cc-with-gdb-index, we run into:
...
(gdb) break main
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
<repeat>
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
<repeat>
Breakpoint 1 at 0x4004ab
(gdb) PASS: gdb.dwarf2/imported-unit-runto-main.exp: setting breakpoint at
main
run
Starting program:
/data/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.dwarf2/imported-unit-runto-main/imported-unit-runto-main
warning: (Internal error: pc 0x4004a7 in read in CU, but not in symtab.)
<repeat>
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
<repeat>
Breakpoint 1, warning: (Internal error: pc 0x4004ab in read in CU, but not
in symtab.)
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
<repeat>
0x00000000004004ab in main ()
warning: (Internal error: pc 0x4004ab in read in CU, but not in symtab.)
<repeat>
(gdb) FAIL: gdb.dwarf2/imported-unit-runto-main.exp: running to main in
runto
...
Looking at the .gdb_index section contents using objdump --dwarf=gdb_index,
we
have:
...
CU table:
[ 0] 0x0 - 0x2d
[ 1] 0x2e - 0xa4
[ 2] 0xa5 - 0xc6
[ 3] 0xf7 - 0x126
[ 4] 0x127 - 0x2de
[ 5] 0x2df - 0x300
Address table:
00000000004004a7 00000000004004b2 4
Symbol table:
[489] main: 4 [global, function]
...
We see that both the main symbol, and main address range map to CU 4, which
has
offset range 0x127 - 0x2de, while main actually is contained in CU 3 at
offset
range 0xf7 - 0x126.
This is caused by this continue in write_gdbindex, which triggers for the
PU:
...
/* CU of a shared file from 'dwz -m' may be unused by this main file.
It may be referenced from a local scope but in such case it does
not
need to be present in .gdb_index. */
if (psymtab == NULL)
continue;
...
The continue causes the PU to be skipped in the CU table (we can see that
the
PU offset range 0xc7-0xf6 is missing) but the references are not taking
that
into account.
I've tried fixing this in the optimal way, by updating the references, but
ran
into trouble when follow_die_offset tries to find the CU for the inter-CU
ref. Because the PU is missing from the CU table,
dwarf2_find_containing_comp_unit bisects to the wrong CU.
Fix this by not skipping the PU in the CU table.
Build and reg-tested on x86_64-linux, with native and target boards
cc-with-gdb-index, cc-with-dwz and cc-with-dwz-m.
gdb/ChangeLog:
2020-04-16 Tom de Vries <tdevries@suse.de>
PR symtab/25791
* dwarf2/index-write.c (write_gdbindex): Generate CU table entries
for
CUs without psymtab.
gdb/testsuite/ChangeLog:
2020-04-16 Tom de Vries <tdevries@suse.de>
PR symtab/25791
* gdb.dwarf2/gdb-add-index.exp (add_gdb_index): Move ...
(ensure_gdb_index): and factor out and move ...
* lib/gdb.exp (add_gdb_index, ensure_gdb_index): ... here.
* gdb.dwarf2/imported-unit-runto-main.exp: New file.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug symtab/25791] [cc-with-gdb-index] Failure to run to main
2020-04-06 13:28 [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main vries at gcc dot gnu.org
` (4 preceding siblings ...)
2020-04-16 12:56 ` cvs-commit at gcc dot gnu.org
@ 2020-04-16 13:01 ` vries at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: vries at gcc dot gnu.org @ 2020-04-16 13:01 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=25791
Tom de Vries <vries at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution|--- |FIXED
--- Comment #6 from Tom de Vries <vries at gcc dot gnu.org> ---
Patch with test-case committed, marking resolved-fixed.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-04-16 13:01 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-06 13:28 [Bug symtab/25791] New: [cc-with-gdb-index] Failure to run to main vries at gcc dot gnu.org
2020-04-06 13:31 ` [Bug symtab/25791] " vries at gcc dot gnu.org
2020-04-06 13:35 ` vries at gcc dot gnu.org
2020-04-06 14:13 ` vries at gcc dot gnu.org
2020-04-07 9:47 ` vries at gcc dot gnu.org
2020-04-16 12:56 ` cvs-commit at gcc dot gnu.org
2020-04-16 13:01 ` vries at gcc dot gnu.org
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).