diff options
author | Lang Hames <lhames@gmail.com> | 2020-10-13 17:24:18 -0700 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2020-10-19 01:59:03 -0700 |
commit | 069919c9ba33666786b80e89f30215ef2918ecdc (patch) | |
tree | 5258917136670df8075dc134734ec79f72cf2fb6 /llvm/lib/Support/Error.cpp | |
parent | 5d2e359ce62f583d66d86daa7e9edfa82397a445 (diff) | |
download | llvm-069919c9ba33666786b80e89f30215ef2918ecdc.zip llvm-069919c9ba33666786b80e89f30215ef2918ecdc.tar.gz llvm-069919c9ba33666786b80e89f30215ef2918ecdc.tar.bz2 |
[ORC] Update Symbol Lookup / DefinitionGenerator system.
This patch moves definition generation out from the session lock, instead
running it under a per-dylib generator lock. It also makes the
DefinitionGenerator::tryToGenerate method optionally asynchronous: Generators
are handed an opaque LookupState object which can be captured to stop/restart
the lookup process.
The new scheme provides the following benefits and guarantees:
(1) Queries that do not need to attempt definition generation (because all
requested symbols matched against existing definitions in the JITDylib)
can proceed without being blocked by any running definition generators.
(2) Definition generators can capture the LookupState to continue their work
asynchronously. This allows generators to run for an arbitrary amount of
time without blocking a thread. Definition generators that do not need to
run asynchronously can return without capturing the LookupState to eliminate
unnecessary recursion and improve lookup performance.
(3) Definition generators still do not need to worry about concurrency or
re-entrance: Since they are still run under a (per-dylib) lock, generators
will never be re-entered concurrently, or given overlapping symbol sets to
generate.
Finally, the new system distinguishes between symbols that are candidates for
generation (generation candidates) and symbols that failed to match for a query
(due to symbol visibility). This fixes a bug where an unresolved symbol could
trigger generation of a duplicate definition for an existing hidden symbol.
Diffstat (limited to 'llvm/lib/Support/Error.cpp')
0 files changed, 0 insertions, 0 deletions