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<mailto:martin at
martin.st>>
> Sent: Friday, January 10, 2020 5:00 AM
> To: David Blaikie <dblaikie at gmail.com<mailto:dblaikie at
gmail.com>>
> Cc: Shi, Steven <steven.shi at intel.com<mailto:steven.shi at
intel.com>>; Reid Kleckner <rnk at google.com<mailto:rnk at
google.com>>;
> llvm-dev <llvm-dev at lists.llvm.org<mailto: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
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20200112/197f9ec7/attachment-0001.html>
Zachary Turner via llvm-dev
2020-Jan-13 18:56 UTC
[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/20200113/6ce3172e/attachment.html>
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<mailto: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<mailto:martin at
martin.st>>; David Blaikie <dblaikie at gmail.com<mailto:dblaikie at
gmail.com>>
Cc: Reid Kleckner <rnk at google.com<mailto:rnk at google.com>>;
llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at
lists.llvm.org>>; Rui Ueyama <ruiu at google.com<mailto: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<mailto:martin at
martin.st>>
> Sent: Friday, January 10, 2020 5:00 AM
> To: David Blaikie <dblaikie at gmail.com<mailto:dblaikie at
gmail.com>>
> Cc: Shi, Steven <steven.shi at intel.com<mailto:steven.shi at
intel.com>>; Reid Kleckner <rnk at google.com<mailto:rnk at
google.com>>;
> llvm-dev <llvm-dev at lists.llvm.org<mailto: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<mailto: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/1ff87b4b/attachment.html>