@@ -166,6 +166,11 @@ static cl::opt<bool>
166166 " context in this module's profiles" ),
167167 cl::Hidden, cl::init(false ));
168168
169+ static cl::opt<std::string>
170+ MemprofDefaultOptions (" memprof-default-options" ,
171+ cl::desc (" The default memprof options" ), cl::Hidden,
172+ cl::init(" " ));
173+
169174extern cl::opt<bool > MemProfReportHintedSizes;
170175
171176// Instrumentation statistics
@@ -547,6 +552,20 @@ void createMemprofHistogramFlagVar(Module &M) {
547552 appendToCompilerUsed (M, MemprofHistogramFlag);
548553}
549554
555+ void createMemprofDefaultOptionsVar (Module &M) {
556+ Constant *OptionsConst = ConstantDataArray::getString (
557+ M.getContext (), MemprofDefaultOptions, /* AddNull=*/ true );
558+ GlobalVariable *OptionsVar =
559+ new GlobalVariable (M, OptionsConst->getType (), /* isConstant=*/ true ,
560+ GlobalValue::WeakAnyLinkage, OptionsConst,
561+ " __memprof_default_options_str" );
562+ Triple TT (M.getTargetTriple ());
563+ if (TT.supportsCOMDAT ()) {
564+ OptionsVar->setLinkage (GlobalValue::ExternalLinkage);
565+ OptionsVar->setComdat (M.getOrInsertComdat (OptionsVar->getName ()));
566+ }
567+ }
568+
550569bool ModuleMemProfiler::instrumentModule (Module &M) {
551570
552571 // Create a module constructor.
@@ -566,6 +585,8 @@ bool ModuleMemProfiler::instrumentModule(Module &M) {
566585
567586 createMemprofHistogramFlagVar (M);
568587
588+ createMemprofDefaultOptionsVar (M);
589+
569590 return true ;
570591}
571592
0 commit comments