|
15 | 15 | #include "llvm/Transforms/Instrumentation/SanitizerCoverage.h" |
16 | 16 | #include "llvm/ADT/ArrayRef.h" |
17 | 17 | #include "llvm/ADT/SmallVector.h" |
| 18 | +#include "llvm/ADT/StringExtras.h" |
18 | 19 | #include "llvm/Analysis/GlobalsModRef.h" |
19 | 20 | #include "llvm/Analysis/PostDominators.h" |
20 | 21 | #include "llvm/IR/Constant.h" |
|
30 | 31 | #include "llvm/IR/Module.h" |
31 | 32 | #include "llvm/IR/Type.h" |
32 | 33 | #include "llvm/Support/CommandLine.h" |
| 34 | +#include "llvm/Support/Process.h" |
33 | 35 | #include "llvm/Support/SpecialCaseList.h" |
34 | 36 | #include "llvm/Support/VirtualFileSystem.h" |
35 | 37 | #include "llvm/TargetParser/Triple.h" |
@@ -390,6 +392,10 @@ bool ModuleSanitizerCoverage::instrumentModule( |
390 | 392 | DL = &M.getDataLayout(); |
391 | 393 | CurModule = &M; |
392 | 394 | CurModuleUniqueId = getUniqueModuleId(CurModule); |
| 395 | + if (CurModuleUniqueId.empty()) { |
| 396 | + CurModuleUniqueId = "clangPidTime_" + llvm::itostr(sys::Process::getProcessId()) + |
| 397 | + "_" + llvm::itostr(time(nullptr)); |
| 398 | + } |
393 | 399 | TargetTriple = Triple(M.getTargetTriple()); |
394 | 400 | FunctionGuardArray = nullptr; |
395 | 401 | Function8bitCounterArray = nullptr; |
@@ -724,7 +730,7 @@ GlobalVariable *ModuleSanitizerCoverage::CreateFunctionLocalArrayInSection( |
724 | 730 | ArrayType *ArrayTy = ArrayType::get(Ty, NumElements); |
725 | 731 | auto Array = new GlobalVariable( |
726 | 732 | *CurModule, ArrayTy, false, GlobalVariable::PrivateLinkage, |
727 | | - Constant::getNullValue(ArrayTy), "__sancov_gen_"); |
| 733 | + Constant::getNullValue(ArrayTy), Twine("__sancov_gen_") + Twine(CurModuleUniqueId)); |
728 | 734 |
|
729 | 735 | if (TargetTriple.supportsCOMDAT() && |
730 | 736 | (TargetTriple.isOSBinFormatELF() || !F.isInterposable())) |
@@ -862,7 +868,7 @@ void ModuleSanitizerCoverage::InjectTraceForSwitch( |
862 | 868 | GlobalVariable *GV = new GlobalVariable( |
863 | 869 | *CurModule, ArrayOfInt64Ty, false, GlobalVariable::InternalLinkage, |
864 | 870 | ConstantArray::get(ArrayOfInt64Ty, Initializers), |
865 | | - "__sancov_gen_cov_switch_values"); |
| 871 | + Twine("__sancov_gen_cov_switch_values_") + Twine(CurModuleUniqueId)); |
866 | 872 | IRB.CreateCall(SanCovTraceSwitchFunction, |
867 | 873 | {Cond, IRB.CreatePointerCast(GV, GlobalsInt64PtrTy)}); |
868 | 874 | } |
|
0 commit comments