[llvm-dev] LLD PDB Lines zero number issue

Reid Kleckner via llvm-dev llvm-dev at lists.llvm.org
Tue Jan 14 12:30:52 PST 2020


Are you using clang 9? If so, it doesn't have the fix. When I do what you
are doing locally, I see this line table in the object file:
$ llvm-pdbutil dump -l main.obj
                           Lines
============================================================
Mod 0000 | `.debug$S`:
/usr/local/google/home/rnk/llvm-project/build/t.cpp (MD5:
87CCDBA652A1F79A159CCE31252B66B1)
  0000:00000000-0000001A, line/addr entries = 3
     3 00000000 !    5 00000009 !    9 00000013 !

The zero entries are missing. This will be fixed in the next release.

On Tue, Jan 14, 2020, 4:53 AM Shi, Steven <steven.shi at intel.com> wrote:

> OK, maybe I was wrong and the “-use-unknown-locations” option is not the
> issue root cause.
>
> I'm not familiar with the LLVM codebase and I appreciate any suggestion on
> how to debug this issue. I'd like to know is it a clang issue or a lld
> issue? Is there a tool which can dump the obj file debug location info?
>
>
>
>
>
> Let me simplify the previous test case to reproduce this issue. All what
> you need is just a C function to invoke an empty assembly function as below.
>
>
>
>    1. An empty assembly function file:
>
> $ cat assembly.nasm
>
>     DEFAULT REL
>
>     SECTION .text
>
> global assembly_fun
>
> assembly_fun:
>
>   ret
>
>
>
>    1. A file of a C function to invoke the empty assembly function but
>    not inline the assembly function:
>
> $ cat main.c
>
> void assembly_fun();
>
> int main()
>
> {
>
>   int Index1;
>
>   for (Index1 = 0; Index1 == 0; assembly_fun(), Index1++){
>
>     assembly_fun();
>
>   }
>
>   assembly_fun();
>
> }
>
>
>
> Then link the assembly and c functions together as below:
>
> $ clang -g -m64 -target x86_64-unknown-windows -gcodeview -O1 -c -o
> main.obj  main.c
>
> $ nasm -f win64 -o assembly.obj assembly.nasm
>
> $ lld-link /OUT:main.dll /Machine:X64 /DLL /ENTRY:main /DEBUG:GHASH
> /lldmap main.obj assembly.obj
>
>
>
> Check to see that there are line zeros in the pdb file:
>
> $ llvm-pdbutil" dump -l main.pdb
>
>                            Lines
>
> ============================================================
>
> Mod 0000 | `/home/jshi19/llvm/wrongcode/lld_PDB_issue/main.obj`:
>
> /home/jshi19/llvm/wrongcode/lld_PDB_issue/main.c (MD5:
> 5F82BB79FE2DA0B0549B784CFDC37D05)
>
>   0001:00000000-0000001A, line/addr entries = 5
>
>      3 00000000 !    0 00000004 !    5 00000009 !    0 0000000E !    9
> 00000013 !
>
>
>
>
>
> Thanks
>
> Shi, Steven
>
>
>
> *From:* Zachary Turner <zturner at roblox.com>
> *Sent:* Tuesday, January 14, 2020 2:56 AM
> *To:* Shi, Steven <steven.shi at intel.com>
> *Cc:* Martin Storsjö <martin at martin.st>; David Blaikie <dblaikie at gmail.com>;
> Rui Ueyama <ruiu at google.com>; llvm-dev <llvm-dev at lists.llvm.org>
> *Subject:* Re: [llvm-dev] LLD PDB Lines zero number issue
>
>
>
> Could you try putting together a prototype patch and testing it locally to
> see if it solves your problem?
>
>
>
> On Sat, Jan 11, 2020 at 7:11 PM Shi, Steven via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
> I checked the LLVM master code and find that the “-use-unknown-locations”
> option and its related logic is only supported for Dwarf debug info as
> below. These codes are missing in the Codeview side. It looks the
> “-use-unknown-locations” option logic is not complex, could we port the
> code logic into llvm\lib\CodeGen\AsmPrinter\CodeViewDebug.cpp as well? I’ve
> submitted a BZ for this requirment:
> https://bugs.llvm.org/show_bug.cgi?id=44522
>
>
>
> llvm-project\llvm\lib\CodeGen\AsmPrinter\DwarfDebug.cpp :
>
> static cl::opt<DefaultOnOff> UnknownLocations(
>
>     "use-unknown-locations", cl::Hidden,
>
>     cl::desc("Make an absence of debug location information explicit."),
>
>     cl::values(clEnumVal(Default, "At top of block or after label"),
>
>                clEnumVal(Enable, "In all cases"), clEnumVal(Disable,
> "Never")),
>
>     cl::init(Default));
>
> ... ...
>
>     // If user said Don't Do That, don't do that.
>
>     if (UnknownLocations == Disable)
>
>       return;
>
>
>
>
>
> This issue blocks the LLVM toolchain debugging capability for UEFI
> firmware. Please help to add the support. Thank you in advance!
>
>
>
>
>
> Thanks
>
> Steven Shi
>
>
>
> *From:* Shi, Steven
> *Sent:* Friday, January 10, 2020 9:43 AM
> *To:* Martin Storsjö <martin at martin.st>; David Blaikie <dblaikie at gmail.com
> >
> *Cc:* Reid Kleckner <rnk at google.com>; llvm-dev <llvm-dev at lists.llvm.org>;
> Rui Ueyama <ruiu at google.com>
> *Subject:* RE: [llvm-dev] LLD PDB Lines zero number issue
>
>
>
> Hi Martin,
>
> I tried your suggestion of adding "-mllvm -use-unknown-locations=Disable"
> in the clang CC flag to build test case in my previous email, but it looks
> still not work in my side with llvm 9.0.0.  Could you give me some more
> advices? Do I need to use the master LLVM instead of the 9.0.0?
>
>
>
> $ make -f makefile_clanglto_Oz
>
> "/home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang"
> -g  -m64 -mcmodel=small -target x86_64-unknown-windows -gcodeview -mllvm
> -use-unknown-locations=Disable -flto -Oz -c -o main.obj  main.c
>
> "nasm" -f win64 -o assembly.obj assembly.nasm
>
> "/home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-lib"
> /OUT:main.lib main.obj
>
> "/home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-lib"
> /OUT:assembly.lib assembly.obj
>
> "/home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/lld-link"
> /OUT:main.dll /Machine:X64 /DLL /ENTRY:main /DEBUG:GHASH /lldmap main.lib
> assembly.lib
>
>
>
> $
> /home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-pdbutil
> dump -l main.pdb
>
>                            Lines
>
> ============================================================
>
> Mod 0000 | `assembly.obj`:
>
> Mod 0001 | `/home/jshi19/llvm/wrongcode/lld-link5/lto.tmp`:
>
> /home/jshi19/llvm/wrongcode/lld-link5/main.c (MD5:
> 5F82BB79FE2DA0B0549B784CFDC37D05)
>
>   0001:00000004-0000001E, line/addr entries = 5
>
>      3 00000004 !    0 00000008 !    5 0000000D !    0 00000012 !    9
> 00000017 !
>
>
>
>
>
> Thanks
>
> Steven Shi
>
>
>
>
>
> > -----Original Message-----
>
> > From: Martin Storsjö <martin at martin.st>
>
> > Sent: Friday, January 10, 2020 5:00 AM
>
> > To: David Blaikie <dblaikie at gmail.com>
>
> > Cc: Shi, Steven <steven.shi at intel.com>; Reid Kleckner <rnk at google.com>;
>
> > llvm-dev <llvm-dev at lists.llvm.org>
>
> > Subject: Re: [llvm-dev] LLD PDB Lines zero number issue
>
> >
>
> > On Thu, 9 Jan 2020, David Blaikie via llvm-dev wrote:
>
> >
>
> > > +rnk who works on COFF debugging things.
>
> > >
>
> > >  My understanding is that this has nothing to do with the linker - but
> is a
>
> > > function of LLVM optimizations creating line zero debug locations. I
> believe
>
> > > rnk & folks have disabled line zero emission for CodeView debug info in
>
> > some
>
> > > manner - perhaps that needs a flag? or Steven hasn't got a release with
>
> > that
>
> > > change in it?
>
> >
>
> > I think I've run into that with dwarf as well, and there AFAIK it can be
>
> > gotten rid of by adding "-mllvm -use-unknown-locations=Disable".
>
> >
>
> > // Martin
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200114/a33b186c/attachment.html>


More information about the llvm-dev mailing list