[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