[Dwarf-discuss] Referring to the stdin 'file' in .debug_macinfo sections

Ron 603-884-2088 brender
Fri Apr 22 14:55:19 GMT 2005


Matthew.Gretton-Dann at arm.com wrote:
>Section 6.3.2 of the DWARF3 standard states:
>
>       ...If the base source file for a compilation is submitted to the
>        compiler via some means other than via a named disk file (e.g.
>        via the standard input stream on a UNIX system) the the compiler
>        should still produce this matched pair of DW_MACINFO_start_file
>        and DW_MACINFO_end_file entries for the base source file,
>        however, the file name indicated (indirectly) by the
>        DW_MACINFO_start_file entry of the pair should designate a line
>        number information file name entry consisting of a null string.
>
>What does the DWARF standard mean by the phrase 'a null string'?
>
>My initial interpretation is that this means a string of length zero. 
>However, section 6.2.4 item 11 (file_names) indicates that
>for the table of files:
>        
>        ...The last entry is followed by a single byte.
>
>This means that my interpretation of 'a null string' means that the
>file_names entry will get misinterpreted as the end of the file_names
>array and confuse the .debug_line state machine.
>
>If my understanding is correct above then there are three options open
>to us:
>
>     1. Use File ID 0 as a 'special' ID representing stdin
>     2. Use File ID (last + 1) as a 'special' ID representing stdin
>     3. Use DW_LNE_define_file to define a file with a zero-length null
>        name.
>
>Of these the third option is (the only?) one which meets with the
>current specification's requirements.
>
>Have I interpreted the standard correctly?  If so should option 1 or 2
>be made legal (I would suggest not)?  In any event does the standard
>need some clarification?

I believe you have interpreted the standard correctly.

I have confirmed that GEM-based compilers on Alpha Linux do fall into
the trap of generating a null file name that gets misinterpreted as the
end of list marker.

It would be interesting to hear how other implementations handle this.

Recommending use of DW_LNE_define_file feels like a very heavyweight
solution. But I don't have a good alternative to suggest at the moment.
A not so good alternative is

      4. Specify that a null byte that is not the last byte of the
         prologue according to the length field at the beginning of
	 the prologue is a null file name rather than an end-of-list
	 marker. [Probably makes it very hard to ever extend the
	 contents of the prologue...]

Hmmm, mumble, grumble...

Ron





More information about the Dwarf-discuss mailing list