Bug 27636 - Debugedit doesn't handle compressed debug ELF sections
Summary: Debugedit doesn't handle compressed debug ELF sections
Status: NEW
Alias: None
Product: debugedit
Classification: Unclassified
Component: debugedit (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-03-23 14:19 UTC by Mark Wielaard
Modified: 2024-06-27 07:56 UTC (History)
3 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 Mark Wielaard 2021-03-23 14:19:55 UTC
When seeing compressed debug ELF sections debugedit gets confused:

debugedit: ./foo.o: DWARF version 0 unhandled

This is a somewhat useless error message.

We should at least detect SHF_COMPRESSED (or .zdebug...) and explicitly say we don't handle compressed sections.

If we do decide to handle compressed sections there are a couple of ways:
- Do we simply always uncompress and leave it that way?
- Do we recompress afterwards?
- Do we require an explicit flag to (de/re)compress?
Comment 2 Mark Wielaard 2023-12-11 13:59:22 UTC
commit 3e7aeeab4f744ad15108775685db68d3a35b0735
Author: Mark Wielaard <mark@klomp.org>
Date:   Thu Mar 23 18:07:40 2023 +0100

    debugedit: Add support for .debug_str_offsets (DW_FORM_strx)
    
    In theory supporting strx .debug_str_offsets is easy, the strings in
    .debug_str are just read through an indirection table. When the
    strings are updated in .debug_str we just need to rewrite the
    indirection table.
    
    The tricky part is the ET_REL (object files or kernel modules)
    support. Relocation reading is "global" per section and we expect to
    read a relocation only once. But we need to read the
    DW_AT_str_offsets_base before reading any strx form attributes. So we
    read that first, then reset the relptr. And when we read from the
    .debug_str_offsets section we need to save and restore the .debug_info
    relptr.
    
            * tools/debugedit.c (do_read_24): New function.
            (str_offsets_base): New static variable.
            (buf_read_ule24): New function.
            (buf_read_ube24): Likewise.
            (setup_relbuf): Handle .debug_str_offsets.
            (do_read_uleb128): New function.
            (do_read_str_form_relocated): Likewise.
            (read_abbrev): Handle DW_FORM_strx[1234].
            (edit_strp): Take the actual string form as argument.
            Use do_read_str_form_relocated.
            (read_dwarf5_line_entries): Pass form to edit_strp.
            (edit_attributes_str_comp_dir): Take the actual string
            form as argument. Use do_read_str_form_relocated.
            (edit_attributes): Handle DW_FORM_strx[1234].
            (edit_info): Read DW_AT_str_offsets_base first.
            (update_str_offsets): New function.
            (edit_dwarf2): Setup do_read_24. Call update_str_offsets.
    
    https://sourceware.org/bugzilla/show_bug.cgi?id=28728
    
    Signed-off-by: Mark Wielaard <mark@klomp.org>
Comment 3 Mark Wielaard 2023-12-11 14:01:31 UTC
Sorry, wrong bug. sigh.