From: Tom de Vries <tdevries@suse.de>
To: Mark Wielaard <mark@klomp.org>
Cc: dwz@sourceware.org, jakub@redhat.com
Subject: Re: [PATCH] Fix .debug_line reference above end of section
Date: Thu, 4 Mar 2021 09:33:43 +0100 [thread overview]
Message-ID: <9bda5bfa-b2dc-84e5-df99-0c62929b934b@suse.de> (raw)
In-Reply-To: <20210304003357.GL3014@wildebeest.org>
On 3/4/21 1:33 AM, Mark Wielaard wrote:
> Hi Tom,
>
> On Tue, Mar 02, 2021 at 02:57:14PM +0100, Tom de Vries wrote:
>> Consider the file test-import-repeatedly from PR26738, combined with a trivial
>> a.out:
>> ...
>> $ cp test-import-repeatedly 1
>> $ gcc -m32 -g ~/hello.c
>> $ cp a.out 2
>> ...
>>
>> When doing multifile optimization, we run into:
>> ...
>> $ dwz -m 3 2 1
>> dwz: 3: .debug_line reference above end of section
>> ...
>>
>> Using --devel-save-temps and src/contrib/gen-dwz-debug-all.sh we get the
>> unoptimized multifile, and find there a CU:
>> ...
>> Compilation Unit @ offset 0x371:
>> Length: 0x6d (32-bit)
>> Version: 4
>> Abbrev Offset: 0x14d
>> Pointer Size: 4
>> <0><37c>: Abbrev Number: 1 (DW_TAG_compile_unit)
>> <37d> DW_AT_stmt_list : 0xda
>> <381> DW_AT_language : 0 (Unknown: 0)
>> <382> DW_AT_comp_dir : ./build-3.8
>> ...
>> which refers to a .debug_line offset 0xda, but the debug_line section only
>> contains an entry at offset 0x0.
>
> I was unable to replicate this, so it is a little harder to comment in
> this. I don't fully understand why this happens, is this because of
> something in the input file or because we move all DIEs with file
> attributes?
>
This is because all the DIEs from the input file that are written into
the unoptimized multifile don't have any attributes referring to the
file table.
> Would it be possible to attach the various temp files to the bug
> report?
>
Done.
>> This can be explained as follows. The DIEs written into the CU do not
>> contain a single DW_AT_decl_file. Consequently, htab_line will be NULL once
>> we get here in write_multifile:
>> ...
>> || (line_htab != NULL && write_multifile_line ()))
>> ...
>> and no .debug_line contribution will be added. However, the CU DIE
>> referencing the .debug_line contribution is written regardless.
>>
>> We could fix this by not writing the DW_AT_stmt_list for the CU DIE in this
>> case, but that would require changing the order in which abbreviations are
>> computed.
>>
>> Instead, fix this conservatively, by removing "line_htab != NULL &&", such we
>> get a minimal .debug_line contribution.
>
> This does look technically OK. write_multifile_line does handle line_htab == NULL
> correctly and sets up multi_line_off which will be used to write the
> DW_AT_stmt_list.
>
> But if the CU doesn't have a DW_AT_stmt_list this will produce an
> unnecessary line table (stub).
Ack. The fix is conservative.
> I cannot immediately see whether this
> is an odd corner case that normally wouldn't happen in practice or if
> that could happen more often.
I've seen this error before, so it's not completely cornercase.
Thanks,
- Tom
next prev parent reply other threads:[~2021-03-04 8:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-02 13:57 Tom de Vries
2021-03-04 0:33 ` Mark Wielaard
2021-03-04 8:33 ` Tom de Vries [this message]
2021-03-05 0:32 ` Mark Wielaard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9bda5bfa-b2dc-84e5-df99-0c62929b934b@suse.de \
--to=tdevries@suse.de \
--cc=dwz@sourceware.org \
--cc=jakub@redhat.com \
--cc=mark@klomp.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).