[all-commits] [llvm/llvm-project] 84038c: [lld][COFF] Fix lld-link crash when several .obj f...
sylvain-audi via All-commits
all-commits at lists.llvm.org
Wed Dec 21 13:19:53 PST 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 84038cf914f6a0060477ba35bafbff2fd0c49fe0
https://github.com/llvm/llvm-project/commit/84038cf914f6a0060477ba35bafbff2fd0c49fe0
Author: Sylvain Audi <sylvain.audi at ubisoft.com>
Date: 2022-12-21 (Wed, 21 Dec 2022)
Changed paths:
M lld/COFF/DebugTypes.cpp
M lld/COFF/InputFiles.cpp
M lld/COFF/InputFiles.h
A lld/test/COFF/Inputs/pdb-type-server-corrupted-a.yaml
A lld/test/COFF/Inputs/pdb-type-server-corrupted-b.yaml
A lld/test/COFF/invalid-input-pdb.ll
A lld/test/COFF/pdb-type-server-corrupted.test
Log Message:
-----------
[lld][COFF] Fix lld-link crash when several .obj files built with /Zi refer to a .pdb file that failed to load
This patch relaxes the constraints on the error message saved in PDBInputFile when failing to load a pdb file.
Storing an `Error` member infers that it must be accessed exactly once, which doesn't fit in several scenarios:
- If an invalid PDB file is provided as input file but never used, a loading error is created but never handled, causing an assert at shutdown.
- PDB file created using MSVC's `/Zi` option : The loading error message must be displayed once per obj file.
Also, the state of `PDBInputFile` was altered when reading (taking) the `Error` member, causing issues:
- accessing it (taking the `Error`) makes the object look valid whereas it's not properly initialized
- read vs write concurrency on a same `PDBInputFile` in the ghash parallel algorithm
The solution adopted here was to instead store an optional error string, and generate Error objects from it on demand.
Differential Revision: https://reviews.llvm.org/D140333
More information about the All-commits
mailing list