[LLVMdev] Adding line table debug information to LLVM on Windows

Timur Iskhodzhanov timurrrr at google.com
Fri Nov 15 08:39:59 PST 2013


2013/11/14 Timur Iskhodzhanov <timurrrr at google.com>:
> Hi David, Eric, LLVM devs,
>
> You've probably heard about AddressSanitizer (ASan) and other
> sanitizers based on LLVM. One of the things that makes ASan
> not as awesome on Windows as it is on Linux
> is the symbolization of the stacks.
>
> Currently, ASan runtime on Windows uses
> CaptureStackBackTrace/SymFromAddr/SymGetLineFromAddr64
> to unwind and symbolize stacks.  This works like a charm
> in-process for stack frames built with CL, but yields
> "function+0x0ff537" for frames built with Clang.
>
> I came up with a prototype which emits "old-style debug info" COFF
> sections that are sufficient to get function name / filename /
> linenumber information.  That's pretty much everything that's required
> for ASan to work beautifully in terms of the completeness of error
> reports.
>
> Attached is a prototype patch which I've tried on some simple tests,
> including some more complex ones with weird #line constructions.
> It also works just great on ASan/Win tests without any link/run-time
> warnings (I had a bunch of those during development, so I can tell it
> works rather than fails silently).
>
> I didn't have time to work on threading the command-line flags into
> the AsmPrinter yet, so currently it just replaces DWARF entirely.
> Of course, this should be fixed before this lands into trunk.
> Currently, one can try this patch by using "clang-cl -Xclang -g ...".
> Eventually we should have some dedicated flag for clang-cl.
>
> Can you please take a look at the patch and suggest a good path forward?
>
> I'm very unfamiliar with LLVM CodeGen/MC, so I'm pretty sure I made a
> few weird things in the code...  I've also put a few TODOs with
> questions and suggestions.
>
> Some general questions:
> 1) Threading flags from the driver down to CodeGen.
>   How do we do that? Should we support all 4 combinations
>   of no-info/DWARF/CVLT/both?
>   How about "-Zmlt" as the clang-cl flag name? ("minimal line tables")
>
> 2) Am I right that DWARF is pretty much the only debug info format
>   supported by LLVM/AsmPrinter right now?  Do we want to take
>   an effort to come up with a generic debuginfogenerator interface
>   to share between DwarfDebug and WinCodeViewLineTables?
>   Then AsmPrinter should just hold a SmallVector<DebugInfoEmitter*>
>   rather than a pair of DD/DE pointers.
>
> 3) How would you suggest to write WinCodeViewLineTables tests
>   given that dumpbin is not available everywhere except Windows?
>   // Yeah, I should have looked at the DwarfDebug LIT tests and
>   // written some; but the prototype development went faster
>   // than I expected...

I found the MCAsmStreamer being used by llc which gives a decent text format.
I wrote a simple x86+x86_64 .ll test and FileCheck expectations for
the llc asm output.
Is this the right approach to write tests?
If so, I'll convert my remaining C program test cases into such an
.ll+llc tests.

> Can you suggest ways to split this patch so it's easier
> to review part-by-part before this hits trunk?

Attached is an updated patch with a new test and a few minor things improved.
I also removed the "TODO: test on X64" as I did try it on x64 and no
changes were required.

Looking forward to your feedback!

> Thanks!
> --
> Timur Iskhodzhanov,
> Google
-------------- next part --------------
A non-text attachment was scrubbed...
Name: codeview_linetables.patch
Type: application/octet-stream
Size: 43569 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131115/31b4cee0/attachment.obj>


More information about the llvm-dev mailing list