llvm-project/lld/COFF
Jan Ole Hüser 4e5a59a383 [LLD][COFF] Fix writing a map file when range extension thunks are inserted
Bug: An assertion fails:

    Assertion failed: isa<To>(Val) && "cast<Ty>() argument of incompatible type!",
    file C:\Users\<user>\prog\llvm\llvm-git-lld-bug\llvm\include\llvm/Support/Casting.h, line 578

Bug is triggered, if

    - a map file is requested with /MAP, and
    - Architecture is ARMv7, Thumb, and
    - a relative jump (branch instruction) is greater than 16 MiB (2^24)

The reason for the Bug is:

    - a Thunk is created for the jump
    - a Symbol for the Thunk is created
        - of type `DefinedSynthetic`
        - in file `Writer.cpp`
        - in function `getThunk`
    - the Symbol has no name
    - when creating the map file, the name of the Symbol is queried
    - the function `Symbol::computeName` of the base class `Symbol`
      casts the `this` pointer to type `DefinedCOFF` (a derived type),
      but the acutal type is `DefinedSynthetic`
    - The in the llvm::cast an assertion fails

Changes:

- Modify regression test to trigger this bug
- Give the symbol pointing to the thunk a name, to fix the bug
- Add assertion, that only DefinedCOFF symbols are allowed to have an
  empty name, when the constructor of the base class Symbol is executed

Reviewed By: rnk

Differential Revision: https://reviews.llvm.org/D133201
2022-09-07 09:26:41 +03:00
..
CMakeLists.txt Reland: Make lld-link work in a non-MSVC shell, add /winsysroot: 2022-02-16 09:22:39 -05:00
COFFLinkerContext.cpp [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
COFFLinkerContext.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
CallGraphSort.cpp
CallGraphSort.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
Chunks.cpp [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
Chunks.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
Config.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
DLL.cpp [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
DLL.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
DebugTypes.cpp Use llvm::lower_bound (NFC) 2022-09-03 11:17:37 -07:00
DebugTypes.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
Driver.cpp [LLD] [COFF] Fix export directives in object files from -includeoptional 2022-08-25 11:56:11 +03:00
Driver.h [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-11 11:59:48 +03:00
DriverUtils.cpp [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-11 11:59:48 +03:00
ICF.cpp [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
ICF.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
InputFiles.cpp Re-land [LLD] Remove global state in lldCommon 2022-01-20 14:53:26 -05:00
InputFiles.h [lld-link] Replace LazyObjFile with lazy ObjFile/BitcodeFile 2022-01-04 15:11:44 -08:00
LLDMapFile.cpp Rename parallelForEachN to just parallelFor 2022-06-19 17:49:00 -04:00
LLDMapFile.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
LTO.cpp [lld] Remove support for legacy pass manager 2022-04-07 10:17:31 +02:00
LTO.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
MapFile.cpp Rename parallelForEachN to just parallelFor 2022-06-19 17:49:00 -04:00
MapFile.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
MarkLive.cpp [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
MarkLive.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
MinGW.cpp [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-11 11:59:48 +03:00
MinGW.h [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-11 11:59:48 +03:00
Options.td [LLD] [MinGW] Implement the --exclude-symbols option 2022-08-11 11:59:47 +03:00
PDB.cpp [LLD][COFF] Ignore DEBUG_S_XFGHASH_TYPE/VIRTUAL 2022-08-08 15:53:52 +02:00
PDB.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
README.md
SymbolTable.cpp [lld/win] Use C++17 structured bindings 2022-08-08 11:51:38 -04:00
SymbolTable.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
Symbols.cpp [lld] Add support for other demanglers other than Itanium 2022-01-05 03:25:41 +00:00
Symbols.h [LLD][COFF] Fix writing a map file when range extension thunks are inserted 2022-09-07 09:26:41 +03:00
TypeMerger.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00
Writer.cpp [LLD][COFF] Fix writing a map file when range extension thunks are inserted 2022-09-07 09:26:41 +03:00
Writer.h [lld/win] Use C++17 nested namespace syntax in most places 2022-08-08 11:48:12 -04:00

README.md

See docs/NewLLD.rst