This is an archive of the discontinued LLVM Phabricator instance.

Don't output a PDB unless /DEBUG is specified
ClosedPublic

Authored by zturner on May 17 2017, 3:59 PM.

Details

Summary

Without this, someone can write lld-link.exe /OUT:foo.exe /OUT:foo.pdb foo.obj and it will generate a PDB. But it's not a very useful PDB, because .debug$S and .debug$T information is not put into the PDB unless /DEBUG is also specified from the command line. So, if /DEBUG is not specified, don't output anything.

Diff Detail

Repository
rL LLVM

Event Timeline

zturner created this revision.May 17 2017, 3:59 PM
ruiu edited edge metadata.May 17 2017, 4:02 PM

Is this behavior the same as the MSVC linker? If it doesn't make sense to pass the /pdb option without /debug, we might want to emit an error (or warning) in the driver.

Yes, MSVC ignores /pdb option if you don't pass /DEBUG.

D:\src\llvmbuild\pdbtest>cl /c /Z7 hello.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25019 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

hello.cpp
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.10.25017\include\xlocale(314): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.10.25017\include\exception(366): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc

D:\src\llvmbuild\pdbtest>link /out:hello.exe /pdb:hello.pdb hello.obj
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.


D:\src\llvmbuild\pdbtest>dir hello*
 Volume in drive D is New Volume
 Volume Serial Number is 2EC5-6F01

 Directory of D:\src\llvmbuild\pdbtest

05/17/2017  04:05 PM                92 hello.cpp
05/17/2017  04:06 PM           183,296 hello.exe
05/17/2017  04:05 PM           334,693 hello.obj
               3 File(s)        518,081 bytes
               0 Dir(s)  129,495,351,296 bytes free

D:\src\llvmbuild\pdbtest>link /debug /out:hello.exe /pdb:hello.pdb hello.obj
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.


D:\src\llvmbuild\pdbtest>dir hello*
 Volume in drive D is New Volume
 Volume Serial Number is 2EC5-6F01

 Directory of D:\src\llvmbuild\pdbtest

05/17/2017  04:05 PM                92 hello.cpp
05/17/2017  04:06 PM           756,224 hello.exe
05/17/2017  04:06 PM         3,284,272 hello.ilk
05/17/2017  04:05 PM           334,693 hello.obj
05/17/2017  04:06 PM         8,048,640 hello.pdb
               5 File(s)     12,423,921 bytes
               0 Dir(s)  129,483,444,224 bytes free
ruiu accepted this revision.May 17 2017, 4:08 PM

Thank you for verifying! LGTM.

This revision is now accepted and ready to land.May 17 2017, 4:08 PM
zturner updated this revision to Diff 99377.May 17 2017, 5:37 PM

Removed the /DEBUGPDB option since it is unreferenced in the code. If the intent is to force writing a PDB, then all you have to do is specify /DEBUG, and you are guaranteed to get a PDB.

Also added some tests confirming the interactions between /DEBUG and /PDB.

BTW, this page indicates that it's not just an accident that MSVC linker behaves this way.

Use /PDB:filename to specify the name of the PDB file. If /DEBUG is not specified, the /PDB option is ignored.

ruiu accepted this revision.May 17 2017, 5:42 PM

LGTM

lld/test/COFF/pdb-options.test
21 ↗(On Diff #99377)

Please fix.

This revision was automatically updated to reflect the committed changes.