[all-commits] [llvm/llvm-project] 4e5a59: [LLD][COFF] Fix writing a map file when range exte...
Martin Storsjö via All-commits
all-commits at lists.llvm.org
Tue Sep 6 23:35:10 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 4e5a59a3839f54d928d37d49d4c4ddbb3f339b76
https://github.com/llvm/llvm-project/commit/4e5a59a3839f54d928d37d49d4c4ddbb3f339b76
Author: Jan Ole Hüser <J.Hueser at beckhoff.com>
Date: 2022-09-07 (Wed, 07 Sep 2022)
Changed paths:
M lld/COFF/Symbols.h
M lld/COFF/Writer.cpp
M lld/test/COFF/arm-thumb-thunks.s
M lld/test/COFF/arm64-thunks.s
Log Message:
-----------
[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
More information about the All-commits
mailing list