[all-commits] [llvm/llvm-project] f617ab: [NPM] Resolve llvmGetPassPluginInfo to the plugin ...

tmatheson-arm via All-commits all-commits at lists.llvm.org
Wed Jun 30 10:11:44 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: f617ab10445148ae44d67484f9dc9486efcfbcc8
      https://github.com/llvm/llvm-project/commit/f617ab10445148ae44d67484f9dc9486efcfbcc8
  Author: Tomas Matheson <tomas.matheson at arm.com>
  Date:   2021-06-30 (Wed, 30 Jun 2021)

  Changed paths:
    M llvm/lib/Passes/PassPlugin.cpp
    M llvm/unittests/Passes/CMakeLists.txt
    A llvm/unittests/Passes/DoublerPlugin.cpp
    M llvm/unittests/Passes/PluginsTest.cpp
    M llvm/unittests/Passes/TestPlugin.cpp

  Log Message:
  -----------
  [NPM] Resolve llvmGetPassPluginInfo to the plugin being loaded

Dynamically loaded plugins for the new pass manager are initialised by
calling llvmGetPassPluginInfo. This is defined as a weak symbol so that
it is continually redefined by each plugin that is loaded. When loading
a plugin from a shared library, the intention is that
llvmGetPassPluginInfo will be resolved to the definition in the most
recent plugin. However, using a global search for this resolution can
fail in situations where multiple plugins are loaded.

Currently:

* If a plugin does not define llvmGetPassPluginInfo, then it will be
  silently resolved to the previous plugin's definition.

* If loading the same plugin twice with another in between, e.g. plugin
  A/plugin B/plugin A, then the second load of plugin A will resolve to
  llvmGetPassPluginInfo in plugin B.

* The previous case can also occur when a dynamic library defines both
  NPM and legacy plugins; the legacy plugins are loaded first and then
  with `-fplugin=A -fpass-plugin=B -fpass-plugin=A`: A will be loaded as
  a legacy plugin and define llvmGetPassPluginInfo; B will be loaded
  and redefine it; and finally when A is loaded as an NPM plugin it will
  be resolved to the definition from B.

Instead of searching globally, restrict the symbol lookup to the library
that is currently being loaded.

Differential Revision: https://reviews.llvm.org/D104916




More information about the All-commits mailing list