llvm-project/lld
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
..
COFF [LLD][COFF] Fix writing a map file when range extension thunks are inserted 2022-09-07 09:26:41 +03:00
Common [lld] Change vector to SmallVector. NFC 2022-07-30 18:11:21 -07:00
ELF [ELF] Provide the GNU hash function in libObject 2022-09-05 11:04:57 -05:00
MachO Add docs for Mach-O lld 2022-09-06 12:24:35 -04:00
MinGW [LLD] [MinGW] Implement the --exclude-symbols option 2022-08-11 11:59:47 +03:00
cmake/modules Revert "[CMake] Avoid `LLVM_BINARY_DIR` when other more specific variable are better-suited" 2022-08-25 11:13:46 -04:00
docs Add docs for Mach-O lld 2022-09-06 12:24:35 -04:00
include/lld/Common [ELF] Add makeThreadLocal/makeThreadLocalN and remove InputFile::localSymStorage 2022-08-04 11:09:40 -07:00
test [LLD][COFF] Fix writing a map file when range extension thunks are inserted 2022-09-07 09:26:41 +03:00
tools/lld [LLD][ELF] Add FORCE_LLD_DIAGNOSTICS_CRASH to force LLD to crash 2022-07-05 09:43:09 +01:00
utils
wasm Use llvm::count_if (NFC) 2022-09-03 11:17:35 -07:00
.clang-format
.clang-tidy NFC: .clang-tidy: Inherit configs from parents to improve maintainability 2021-06-08 08:25:59 -07:00
.gitignore
CMakeLists.txt Revert "[cmake] Use `CMAKE_INSTALL_LIBDIR` too" 2022-08-18 22:46:32 -04:00
CODE_OWNERS.TXT
LICENSE.TXT
README.md

README.md

LLVM Linker (lld)

This directory and its subdirectories contain source code for the LLVM Linker, a modular cross platform linker which is built as part of the LLVM compiler infrastructure project.

lld is open source software. You may freely distribute it under the terms of the license agreement found in LICENSE.txt.

Benchmarking

In order to make sure various developers can evaluate patches over the same tests, we create a collection of self contained programs.

It is hosted at https://s3-us-west-2.amazonaws.com/linker-tests/lld-speed-test.tar.xz

The current sha256 is 10eec685463d5a8bbf08d77f4ca96282161d396c65bd97dc99dbde644a31610f.