[Dwarf-Discuss] DWARF and source text embedding
scott@scottlinder.com
scott
Thu Feb 1 20:01:58 GMT 2018
Hi Paul,
My intention was to support an empty source string; I want to be
explicit about the presence of embedded source for each file.
When reading the spec I did notice places where an empty string can
indicate the absence of the attribute (e.g. DW_AT_name), but I would
prefer to be explicit here.
Scott
On 2018-02-01 11:19, paul.robinson at sony.com wrote:
>> -----Original Message-----
>> From: Dwarf-Discuss [mailto:dwarf-discuss-bounces at lists.dwarfstd.org]
>> On
>> Behalf Of scott at scottlinder.com
>> Sent: Wednesday, January 31, 2018 2:05 PM
>> To: dwarf-discuss at lists.dwarfstd.org
>> Subject: [Dwarf-Discuss] DWARF and source text embedding
>>
>> Hello all,
>>
>> I am a compiler engineer at AMD, working on tools for debugging
>> online-compiled
>> programs. The problem I am attempting to solve was brought up
>> previously
>> in the
>> DWARF Standard issue 161018.1 titled "DWARF-embedded source for
>> online-compiled
>> programs", and is the result of runtimes like OpenCL doing online
>> compilation
>> in an environment where it is not desireable (or even feasible) to
>> write
>> sources to disk. In these cases, it would be useful to support
>> embedding
>> the
>> source directly in the resulting DWARF. I would like to propose a
>> similar
>> solution to the one outlined in the above issue, but without
>> structural
>> changes
>> to the specification.
>>
>> ====
>>
>> Add two new optional fields to the file_names prologue of the line
>> table.
>>
>> Section 6.2.4.1:
>> Add two bullets after "5. DW_LNCT_MD5"
>> 6. DW_LNCT_has_source
>> DW_LNCT_has_source indicates that the value is a boolean which
>> affects the
>> interpretation of an accompanying DW_LNCT_source value. When
>> present
>> there
>> must be an accompanying DW_LNCT_source value. When true,
>> consumers
>> may use
>> the embedded source instead of attempting to discover the source
>> on
>> disk.
>> When false, consumers will ignore the DW_LNCT_source value. This
>> code point
>> is always paired with a flag form (e.g. DW_FORM_flag or
>> DW_FORM_flag_present).
>> 7. DW_LNCT_source
>> DW_LNCT_source indicates that the value is a null-terminated
>> string
>> which
>> is the original source text of the file. When present there must
>> be
>> an
>> accompanying DW_LNCT_has_source value. The string will contain
>> the
>> UTF-8
>> encoded source text with '\n' line endings. When the accompanying
>> DW_LNCT_has_source value is false, the value of DW_LNCT_source
>> will
>> be the
>> empty string. This code point is always paired with a string form
>> (e.g.
>> DW_FORM_string, DW_FORM_line_strp, DW_FORM_strp).
>
> Would a zero-length string indicate something other than
> "has_source=false"?
> If not, then a separate has_source flag seems redundant.
> --paulr
>
>>
>> New type codes can be allocated for them in a backwards-compatible
>> way,
>> or
>> codes for these new content types can be added in the range of
>> [DW_LNCT_lo_user, DW_LNCT_hi_user] to avoid changing the spec itself.
>>
>> Table 7.27:
>> Add DW_LNCT_has_source 0x6
>> Add DW_LNCT_source 0x7
>>
>> Any DWARFv5 consumer which is unaware of this extension would continue
>> to
>> operate as before, ignoring the new fields. Any consumer which is
>> aware
>> of the
>> extension would know to check DW_LNCT_has_source for each file_name
>> entry in
>> order to determine whether the embedded source field (DW_LNCT_source)
>> contains
>> the source text of the corresponding file.
>>
>> ====
>>
>> My team and I believe this simplifies the design by removing the need
>> for
>> changes to the compile unit sections, and by avoiding the addition of
>> multiple
>> file_name_entry_formats in a single program, all without sacrificing
>> any
>> information. We have a preliminary implementation in LLVM/Clang, which
>> supports
>> embedding source (clang -gdwarf-5 -gembed-source) and inspecting it
>> via
>> llvm-dwarfdump and llvm-objdump (with the -source flag). The patches
>> are
>> available at https://reviews.llvm.org/D42765 (LLVM) and
>> https://reviews.llvm.org/D42766 (Clang).
>>
>> I would like any and all feedback on the design, and want to see about
>> the
>> possibility of adding the new content type codes outside of the "user"
>> range
>> (i.e. adding new entries for them in Table 7.27) in the next version
>> of
>> the
>> specification.
>>
>> Regards,
>> Scott Linder
>>
>> _______________________________________________
>> Dwarf-Discuss mailing list
>> Dwarf-Discuss at lists.dwarfstd.org
>> http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org
More information about the Dwarf-discuss
mailing list