[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