Bug 27354 - Dwarf Error: wrong unit_type in compilation unit header (is DW_UT_split_compile (0x05), should be DW_UT_type (0x02)
Summary: Dwarf Error: wrong unit_type in compilation unit header (is DW_UT_split_compi...
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: symtab (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: 11.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks: 27453
  Show dependency treegraph
 
Reported: 2021-02-05 15:50 UTC by Tom de Vries
Modified: 2021-08-24 17:51 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2021-02-05 15:50:29 UTC
When running test-case gdb.dwarf2/fission-mix.exp using gcc-11 (and using the tentative fix for PR27353), I run into:
...
(gdb) file /home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.dwarf2/fission-mix/fission-mix^M
Reading symbols from /home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.dwarf2/fission-mix/fission-mix...^M
Dwarf Error: wrong unit_type in compilation unit header (is DW_UT_split_compile (0x05), should be DW_UT_type (0x02)) [in module /home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.dwarf2/fission-mix/fission-mix2.dwo]^M
(No debugging symbols found in /home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.dwarf2/fission-mix/fission-mix)^M
(gdb) break -q main^M
...

This seems to fix it:
...
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index dd308ca7ba3..f9c058bdf17 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -12952,7 +12952,7 @@ open_and_init_dwo_file (dwarf2_cu *cu, const char *dwo_name,
     {
       create_debug_type_hash_table (per_objfile, dwo_file.get (),
                                    &dwo_file->sections.info, dwo_file->tus,
-                                   rcuh_kind::TYPE);
+                                   rcuh_kind::COMPILE);
     }
 
   dwarf_read_debug_printf ("DWO file found: %s", dwo_name);
...
Comment 2 Sourceware Commits 2021-02-25 14:41:53 UTC
The master branch has been updated by Tom de Vries <vries@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=30c80d8833c037f25dd144a64f7f8b7b3ab19027

commit 30c80d8833c037f25dd144a64f7f8b7b3ab19027
Author: Tom de Vries <tdevries@suse.de>
Date:   Thu Feb 25 15:41:49 2021 +0100

    [gdb/symtab] Fix wrong unit_type Dwarf Error
    
    When running test-case gdb.dwarf2/fission-mix.exp using gcc-11 (and using the
    tentative fix for PR27353 to get past that assertion failure), I run into:
    ...
    (gdb) file fission-mix^M
    Reading symbols from fission-mix...^M
    Dwarf Error: wrong unit_type in compilation unit header \
      (is DW_UT_split_compile (0x05), should be DW_UT_type (0x02)) \
      [in module fission-mix2.dwo]^M
    (No debugging symbols found in fission-mix)^M
    ...
    
    The compilation unit that is complained about is:
    ...
    Contents of the .debug_info.dwo section (loaded from fission-mix2.dwo):
    
      Compilation Unit @ offset 0x0:
       Length:        0x57 (32-bit)
       Version:       5
       Unit Type:     DW_UT_split_compile (5)
       Abbrev Offset: 0x0
       Pointer Size:  8
       DWO ID:        0x3e3930d3cc1805df
     <0><14>: Abbrev Number: 1 (DW_TAG_compile_unit)
    ...
    
    And the dwarf error is triggered here in read_comp_unit_head:
    ...
            case DW_UT_split_compile:
              if (section_kind != rcuh_kind::COMPILE)
                error (_("Dwarf Error: wrong unit_type in compilation unit header "
                       "(is %s, should be %s) [in module %s]"),
                       dwarf_unit_type_name (cu_header->unit_type),
                       dwarf_unit_type_name (DW_UT_type), filename);
              break;
    ...
    due to passing rcuh_kind::TYPE here in open_and_init_dwo_file:
    ...
          create_debug_type_hash_table (per_objfile, dwo_file.get (),
                                        &dwo_file->sections.info, dwo_file->tus,
                                        rcuh_kind::TYPE);
    ...
    
    Fix this by changing the section_kind argument to create_debug_type_hash_table
    to rcuh_kind::COMPILE, to reflect that we're passing &dwo_file->sections.info
    rather than &dwo_file->sections.types.
    
    Tested on x86_64-linux.
    
    gdb/ChangeLog:
    
    2021-02-25  Tom de Vries  <tdevries@suse.de>
    
            PR symtab/27354
            * dwarf2/read.c (open_and_init_dwo_file): Use rcuh_kind::COMPILE as
            section_kind for &dwo_file->sections.info.
Comment 3 Tom de Vries 2021-02-25 14:43:06 UTC
Patch committed, marking resolved-fixed.
Comment 4 ryan9999 2021-08-24 17:51:22 UTC Comment hidden (spam)