[llvm-dev] LLD PDB Lines zero number issue
Shi, Steven via llvm-dev
llvm-dev at lists.llvm.org
Thu Jan 9 04:47:02 PST 2020
Hello Rui,
We meet an LLD PDB issue that if we link assembly code with C code and set >= -O1 level optimization in LTO, the executable's PDB will contain wrong zero Lines for the assembly code in DEBUG_S_LINES subsection, and then our COFF source debuggers will fail to do the source-level debug on the executable. This issue is same in both Linux and Windows, and I figure out a simple case in Linux to reproduce this issue as below. Please help to give us some advices on how to solve the zero Lines issue.
$ cat main.c
void assembly_fun();
int main()
{
int Index1;
for (Index1 = 0; Index1 == 0; assembly_fun(), Index1++){
assembly_fun();
}
assembly_fun();
}
$ cat assembly.nasm
DEFAULT REL
SECTION .text
global assembly_fun
assembly_fun:
ret
$ cat makefile_clanglto_Oz
CC_FLAGS= -g -m64 -mcmodel=small -target x86_64-unknown-windows -gcodeview -flto -Oz
CC = /home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang
DLINK_FLAGS = /Machine:X64 /DLL /ENTRY:main /DEBUG:GHASH /lldmap
DLINK = /home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/lld-link
SLINK = /home/jshi19/llvm/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-lib
build:
"$(CC)" $(CC_FLAGS) -c -o main.obj main.c
"nasm" -f win64 -o assembly.obj assembly.nasm
"$(SLINK)" /OUT:main.lib main.obj
"$(SLINK)" /OUT:assembly.lib assembly.obj
"$(DLINK)" /OUT:main.dll $(DLINK_FLAGS) main.lib assembly.lib
clean:
rm -f *.obj *.lib *.pdb *.dll *.map
$ make -f makefile_clanglto_Oz
$ 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 !
If we disable the optimization in the CC_FLAGS with -O0 as below, the PDB Lines will become correct non-zero numbers.
CC_FLAGS= -g -m64 -mcmodel=small -target x86_64-unknown-windows -gcodeview -flto -O0
$ llvm-pdbutil dump -l main.pdb
Lines
============================================================
Mod 0000 | `assembly.obj`:
Mod 0001 | `/home/jshi19/llvm/wrongcode/lld_PDB_issue/lto.tmp`:
/home/jshi19/llvm/wrongcode/lld_PDB_issue/main.c (MD5: 5F82BB79FE2DA0B0549B784CFDC37D05)
0001:00000010-00000050, line/addr entries = 6
3 00000010 ! 5 0000001C ! 6 0000002B ! 5 00000030 ! 8 00000042 ! 9 00000047 !
Thanks
Steven Shi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200109/83212056/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lld_PDB_issue_4_rui.zip
Type: application/x-zip-compressed
Size: 2181 bytes
Desc: lld_PDB_issue_4_rui.zip
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200109/83212056/attachment.bin>
More information about the llvm-dev
mailing list