/// A module hook may be used by a linker to perform actions during the LTO
/// pipeline. For example, a linker may use this function to implement
- /// -save-temps, or to add its own resolved symbols to the module. If this
- /// function returns false, any further processing for that task is aborted.
+ /// -save-temps. If this function returns false, any further processing for
+ /// that task is aborted.
///
/// Module hooks must be thread safe with respect to the linker's internal
/// data structures. A module hook will never be called concurrently from
///
/// Note that in out-of-process backend scenarios, none of the hooks will be
/// called for ThinLTO tasks.
- typedef std::function<bool(unsigned Task, Module &)> ModuleHookFn;
+ typedef std::function<bool(unsigned Task, const Module &)> ModuleHookFn;
/// This module hook is called after linking (regular LTO) or loading
/// (ThinLTO) the module, before modifying it.
auto setHook = [&](std::string PathSuffix, ModuleHookFn &Hook) {
// Keep track of the hook provided by the linker, which also needs to run.
ModuleHookFn LinkerHook = Hook;
- Hook = [=](unsigned Task, Module &M) {
+ Hook = [=](unsigned Task, const Module &M) {
// If the linker's hook returned false, we need to pass that result
// through.
if (LinkerHook && !LinkerHook(Task, M))