Link the default GC strategies everywhere getGCStrategy is used.
GC strategies are registered using a system of global constructors: any object can include a GCRegistry::Add stataic variable to register a strategy, and that will generate a static constructor which registers this strategy into a global list. This allows shared libraries to easily register their own strategies, but poses a problem related to linking: the default GC strategies (defined and registered in their own file) must obviously be included in LLVM binaries. The previous solution was to define an empty functon in BuiltinGCs.cpp, and call it from LinkAllCodegenComponents.h - this is the solution used for many other codegen components. This header is then included into the llc and lli main source files, ensuring everything gets linked into those binaries. This isn't great for GCStrategy, which we'd like [1] to use in other binaries, notably opt for the RS4GC [2] pass. Instead of doing something specific to opt (for example, adding a call in LinkAllIR), this patch links to the registry function from getGCStrategy, in the assumption that anything that might look up a GC strategy probably also expects the default strategies to exist. [1] https://reviews.llvm.org/D140458 [2] RewriteStatepointsForGC Differential Revision: https://reviews.llvm.org/D140504
Loading
Please sign in to comment