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).