llvm/lld/COFF
Jan Ole Hüser 92e7ef9930 [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

(cherry picked from commit 4e5a59a3839f54d928d37d49d4c4ddbb3f339b76)
2022-09-12 12:54:42 +02:00
..
CallGraphSort.cpp
CallGraphSort.h
Chunks.cpp Use llvm::sort instead of std::sort where possible 2022-07-23 15:19:05 +02:00
Chunks.h
CMakeLists.txt
COFFLinkerContext.cpp
COFFLinkerContext.h
Config.h [COFF] Add vfsoverlay flag 2022-07-11 21:31:01 +00:00
DebugTypes.cpp Convert for_each to range-based for loops (NFC) 2022-07-23 12:17:27 -07:00
DebugTypes.h
DLL.cpp Use llvm::sort instead of std::sort where possible 2022-07-23 15:19:05 +02:00
DLL.h
Driver.cpp [LLD] [COFF] Fix export directives in object files from -includeoptional 2022-08-25 12:49:09 +02:00
Driver.h [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-12 08:36:08 +02:00
DriverUtils.cpp [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-12 08:36:08 +02:00
ICF.cpp
ICF.h
InputFiles.cpp
InputFiles.h
LLDMapFile.cpp
LLDMapFile.h
LTO.cpp
LTO.h
MapFile.cpp
MapFile.h
MarkLive.cpp
MarkLive.h
MinGW.cpp [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-12 08:36:08 +02:00
MinGW.h [LLD] [COFF] Add support for a new, mingw specific embedded directive -exclude-symbols: 2022-08-12 08:36:08 +02:00
Options.td [LLD] [MinGW] Implement the --exclude-symbols option 2022-08-12 08:36:08 +02:00
PDB.cpp [LLD][COFF] Ignore DEBUG_S_XFGHASH_TYPE/VIRTUAL 2022-08-08 13:23:11 -07:00
PDB.h
README.md
Symbols.cpp
Symbols.h [LLD][COFF] Fix writing a map file when range extension thunks are inserted 2022-09-12 12:54:42 +02:00
SymbolTable.cpp
SymbolTable.h
TypeMerger.h
Writer.cpp [LLD][COFF] Fix writing a map file when range extension thunks are inserted 2022-09-12 12:54:42 +02:00
Writer.h

See docs/NewLLD.rst