[llvm-dev] yaml2obj support for COFF debug directories

Pavel Labath via llvm-dev llvm-dev at lists.llvm.org
Wed Mar 4 05:36:52 PST 2020


I also don't know much about COFF, but I am always interested in using
yaml2obj to generate "interesting" test cases for lldb. So, if you're
looking for a use case, this sounds like it could be very useful there.

cheers,
pavel

On 04/03/2020 10:25, James Henderson via llvm-dev wrote:
> I'm not sure I know enough about COFF and debug directories to know how
> useful this feature will be, but I do have some thoughts on the syntax,
> based on my experience working with the ELF part of yaml2obj. From
> reading the spec you linked, I would think it might look something like
> the following:
> 
> DebugDirectory:
>   - Characteristics: 1234 # Optional, defaults to 0. Contains value to
> write in Characteristics field.
>     TimeDateStamp: 4321 # Optional, defaults to 0(?).
>     MajorVersion: 1 # Optional, defaults to 0.
>     MinorVersion: 2 # Optional, defaults to 0.
>     Data: # Required
>     - Type: 12 # Required, contains the value of the Type field, can be
> written as raw number or enum value (see how ELF works for various fields).
>       Size: 1111 # Optional, derives size from data field, if not specified.
>       Address: 2222 # Optional, defaults to 0(?)
>       Pointer: 3333 # Optional, defaults to wherever yaml2obj chooses to
> place the data.
>       RawData: '12345678abcdef0' # Optional byte string (see 'Content'
> fields for ELF sections). Defaults to empty if not specified.
>       ## The following fields are all defined based on the Type value
> (for unrecognised values, by default only RawData is allowed). Cannot be
> mixed with RawData field. Only those actually required need to be
> implemented up front.
>       ExtendedDLLCharacteristics: # Used for
> IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS
>         - ... # Fields related to DLL Characteristics
>       FPOInfo: # Used for IMAGE_DEBUG_TYPE_FP
>         - ...
>         - ... # FPO Information array
>       ...
> 
> Does this make sense? It's somewhat similar to how Sections are defined
> in ELF yaml2obj.
> 
> James
> 
> On Wed, 4 Mar 2020 at 03:10, Penzin, Petr <petr.penzin at intel.com
> <mailto:petr.penzin at intel.com>> wrote:
> 
>     /Spoiler:/ the following only applies to Windows binary format
>     handling.____
> 
>     Potential for extending yaml2obj to support COFF debug directories
>     <https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#debug-directory-image-only>
>     recently came up during a code review
>     <https://reviews.llvm.org/D70606#1873185>. Currently, its COFF
>     syntax <http://llvm.org/docs/yaml2obj.html#coff-syntax> allows for
>     specifying section data, but not debug directories, that's why
>     llvm-readobj tests which depend on debug directory contents use
>     pre-built executable images instead of yaml2obj.____
> 
>     It is possible to extend the tool, but first I would be interested
>     in gathering feedback on usability of this, especially on potential
>     uses of this change. It looks like porting llvm-readobj tests for
>     codeview would depend on this and also D70606
>     <https://reviews.llvm.org/D70606> is introducing another possible
>     use. But I am not sure how trivial would the codeview effort, would
>     it be worth it or is it easier to leave things as they are for now?____
> 
>     In case this is interesting, base Yaml syntax for COFF debug
>     directory may look like this (enum values representing COFF Debug
>     Types
>     <https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#debug-type>):____
> 
>     DebugDirectory:
>       - Type: [ {type: str, enum: [...]}, {type: int} ]
>       - DebugDirectoryData: {type: str}____
> 
>     This may have to be further specialized for sub-categories,
>     specifically codeview.____
> 
>     __ __
> 
>     Best,____
> 
>     Petr____
> 
>     __ __
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> 



More information about the llvm-dev mailing list