@@ -208,18 +208,19 @@ class ModuleSanitizerCoverage {
208
208
using PostDomTreeCallback =
209
209
function_ref<const PostDominatorTree &(Function &F)>;
210
210
211
- ModuleSanitizerCoverage (const SanitizerCoverageOptions &Options,
211
+ ModuleSanitizerCoverage (Module &M, DomTreeCallback DTCallback,
212
+ PostDomTreeCallback PDTCallback,
213
+ const SanitizerCoverageOptions &Options,
212
214
const SpecialCaseList *Allowlist,
213
215
const SpecialCaseList *Blocklist)
214
- : Options(Options), Allowlist(Allowlist), Blocklist(Blocklist) {}
216
+ : M(M), DTCallback(DTCallback), PDTCallback(PDTCallback),
217
+ Options (Options), Allowlist(Allowlist), Blocklist(Blocklist) {}
215
218
216
- bool instrumentModule (Module &M, DomTreeCallback DTCallback,
217
- PostDomTreeCallback PDTCallback);
219
+ bool instrumentModule ();
218
220
219
221
private:
220
222
void createFunctionControlFlow (Function &F);
221
- void instrumentFunction (Function &F, DomTreeCallback DTCallback,
222
- PostDomTreeCallback PDTCallback);
223
+ void instrumentFunction (Function &F);
223
224
void InjectCoverageForIndirectCalls (Function &F,
224
225
ArrayRef<Instruction *> IndirCalls);
225
226
void InjectTraceForCmp (Function &F, ArrayRef<Instruction *> CmpTraceTargets);
@@ -249,6 +250,11 @@ class ModuleSanitizerCoverage {
249
250
std::string getSectionName (const std::string &Section) const ;
250
251
std::string getSectionStart (const std::string &Section) const ;
251
252
std::string getSectionEnd (const std::string &Section) const ;
253
+
254
+ Module &M;
255
+ DomTreeCallback DTCallback;
256
+ PostDomTreeCallback PDTCallback;
257
+
252
258
FunctionCallee SanCovTracePCIndir;
253
259
FunctionCallee SanCovTracePC, SanCovTracePCGuard;
254
260
std::array<FunctionCallee, 4 > SanCovTraceCmpFunction;
@@ -283,16 +289,17 @@ class ModuleSanitizerCoverage {
283
289
284
290
PreservedAnalyses SanitizerCoveragePass::run (Module &M,
285
291
ModuleAnalysisManager &MAM) {
286
- ModuleSanitizerCoverage ModuleSancov (OverrideFromCL (Options), Allowlist.get (),
287
- Blocklist.get ());
288
292
auto &FAM = MAM.getResult <FunctionAnalysisManagerModuleProxy>(M).getManager ();
289
293
auto DTCallback = [&FAM](Function &F) -> const DominatorTree & {
290
294
return FAM.getResult <DominatorTreeAnalysis>(F);
291
295
};
292
296
auto PDTCallback = [&FAM](Function &F) -> const PostDominatorTree & {
293
297
return FAM.getResult <PostDominatorTreeAnalysis>(F);
294
298
};
295
- if (!ModuleSancov.instrumentModule (M, DTCallback, PDTCallback))
299
+ ModuleSanitizerCoverage ModuleSancov (M, DTCallback, PDTCallback,
300
+ OverrideFromCL (Options), Allowlist.get (),
301
+ Blocklist.get ());
302
+ if (!ModuleSancov.instrumentModule ())
296
303
return PreservedAnalyses::all ();
297
304
298
305
PreservedAnalyses PA = PreservedAnalyses::none ();
@@ -363,8 +370,7 @@ Function *ModuleSanitizerCoverage::CreateInitCallsForSections(
363
370
return CtorFunc;
364
371
}
365
372
366
- bool ModuleSanitizerCoverage::instrumentModule (
367
- Module &M, DomTreeCallback DTCallback, PostDomTreeCallback PDTCallback) {
373
+ bool ModuleSanitizerCoverage::instrumentModule () {
368
374
if (Options.CoverageType == SanitizerCoverageOptions::SCK_None)
369
375
return false ;
370
376
if (Allowlist &&
@@ -477,7 +483,7 @@ bool ModuleSanitizerCoverage::instrumentModule(
477
483
M.getOrInsertFunction (SanCovTracePCGuardName, VoidTy, PtrTy);
478
484
479
485
for (auto &F : M)
480
- instrumentFunction (F, DTCallback, PDTCallback );
486
+ instrumentFunction (F);
481
487
482
488
Function *Ctor = nullptr ;
483
489
@@ -596,8 +602,7 @@ static bool IsInterestingCmp(ICmpInst *CMP, const DominatorTree &DT,
596
602
return true ;
597
603
}
598
604
599
- void ModuleSanitizerCoverage::instrumentFunction (
600
- Function &F, DomTreeCallback DTCallback, PostDomTreeCallback PDTCallback) {
605
+ void ModuleSanitizerCoverage::instrumentFunction (Function &F) {
601
606
if (F.empty ())
602
607
return ;
603
608
if (F.getName ().contains (" .module_ctor" ))
0 commit comments