Bug 30838 - [gdb/symtab] Support .debug_types section in .gnu_debugaltlink file
Summary: [gdb/symtab] Support .debug_types section in .gnu_debugaltlink file
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: symtab (show other bugs)
Version: HEAD
: P2 enhancement
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-09-11 15:04 UTC by Tom de Vries
Modified: 2023-09-20 14:05 UTC (History)
0 users

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


Attachments
partial patch (3.18 KB, patch)
2023-09-11 15:08 UTC, Tom de Vries
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2023-09-11 15:04:46 UTC
There are two methods to factor out type information in a dwarf4 executable:
- use -fdebug-info-types to generate type units in a .debug_types section, and
- use dwz to create partial units.

The dwz method has an extra benefit: it also allows to factor out information
between executables into a newly created .dwz file, pointed to by a
.gnu_debugaltlink section.

There is nothing prohibiting a .gnu_debugaltlink file to contain a
.debug_types section.

It's just not generated by dwz atm, and consequently gdb has no support for it.
Comment 1 Tom de Vries 2023-09-11 15:08:52 UTC
Created attachment 15107 [details]
partial patch

The patch contains a test-case, and some fixes in the dwarf reader, which allow the test-case to pass.

It doesn't fix the target board cc-with-gdb-index case though.  The test-case passes, but the .gdb_index section in the exec is quietly ignored, because there's no .gdb_index section in the dwz file.
Comment 2 Tom de Vries 2023-09-11 15:16:51 UTC
I'm not sure it makes sense at this point to explore this further, given that there's no regular way to generate dwarf like this, but I'd like this PR to stay open, such that I can reference it from the source code when throwing an error to say this is unsupported.
Comment 3 Tom de Vries 2023-09-12 08:44:35 UTC
(In reply to Tom de Vries from comment #2)
> when
> throwing an error to say this is unsupported.

https://sourceware.org/pipermail/gdb-patches/2023-September/202354.html
Comment 4 Sourceware Commits 2023-09-20 14:05:52 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=973db6fae304c2bcafff5f169610f663adc9e817

commit 973db6fae304c2bcafff5f169610f663adc9e817
Author: Tom de Vries <tdevries@suse.de>
Date:   Wed Sep 20 16:05:55 2023 +0200

    [gdb/symtab] Error out for .debug_types section in dwz file
    
    There are two methods to factor out type information in a dwarf4 executable:
    - use -fdebug-info-types to generate type units in a .debug_types section, and
    - use dwz to create partial units.
    
    The dwz method has an extra benefit: it also allows to factor out information
    between executables into a newly created .dwz file, pointed to by a
    .gnu_debugaltlink section.
    
    There is nothing prohibiting a .gnu_debugaltlink file to contain a
    .debug_types section.
    
    It's just not generated by dwz or any other tool atm, and consequently gdb has
    no support for it.  Enhancement PR symtab/30838 is open about the lack of
    support.
    
    Make the current situation explicit by emitting a dwarf error:
    ...
    (gdb) file struct-with-sig-2^M
    Reading symbols from struct-with-sig-2...^M
    Dwarf Error: .debug_types section not supported in dwz file^M
    ...
    and add an assert in write_gdbindex:
    ...
    +      /* See enhancement PR symtab/30838.  */
    +      gdb_assert (!(per_cu->is_dwz && per_cu->is_debug_types));
    ...
    to clarify why we can use:
    ...
          data_buf &cu_list = (per_cu->is_debug_types
                               ? types_cu_list
                               : per_cu->is_dwz ? dwz_cu_list : objfile_cu_list);
    ...
    
    The test-case is a modified copy from gdb.dwarf2/struct-with-sig.exp, so it
    keeps the copyright years range.
    
    Tested on x86_64-linux.
    
    Tested-By: Guinevere Larsen <blarsen@redhat.com>
    
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30838