[PATCH] D104916: [NPM] Resolve llvmGetPassPluginInfo to the plugin being loaded

Tomas Matheson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 25 07:22:29 PDT 2021


tmatheson created this revision.
Herald added subscribers: hiraditya, mgorny.
tmatheson requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

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.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D104916

Files:
  llvm/lib/Passes/PassPlugin.cpp
  llvm/unittests/Passes/CMakeLists.txt
  llvm/unittests/Passes/DoublerPlugin.cpp
  llvm/unittests/Passes/PluginsTest.cpp
  llvm/unittests/Passes/TestPlugin.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104916.354492.patch
Type: text/x-patch
Size: 9789 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210625/07215eac/attachment-0001.bin>


More information about the llvm-commits mailing list