@@ -32,6 +32,10 @@ cl::opt<bool> UseMD5(
3232 cl::desc(" Use md5 to represent function names in the output profile (only "
3333 " meaningful for -extbinary)" ));
3434
35+ static cl::opt<bool > PopulateProfileSymbolList (
36+ " populate-profile-symbol-list" , cl::init(true ), cl::Hidden,
37+ cl::desc(" Populate profile symbol list (only meaningful for -extbinary)" ));
38+
3539static cl::opt<int32_t , true > RecursionCompression (
3640 " compress-recursion" ,
3741 cl::desc (" Compressing recursion by deduplicating adjacent frame "
@@ -90,6 +94,22 @@ ProfileGeneratorBase::create(ProfiledBinary *Binary,
9094
9195void ProfileGeneratorBase::write (std::unique_ptr<SampleProfileWriter> Writer,
9296 SampleProfileMap &ProfileMap) {
97+ // Populate profile symbol list if extended binary format is used.
98+ ProfileSymbolList SymbolList;
99+
100+ // Turn it off temporarily for CS profile.
101+ if (FunctionSamples::ProfileIsCS &&
102+ !PopulateProfileSymbolList.getNumOccurrences ())
103+ PopulateProfileSymbolList = false ;
104+
105+ if (PopulateProfileSymbolList && OutputFormat == SPF_Ext_Binary) {
106+ for (const auto &Item : ProfileMap) {
107+ auto &Profile = Item.second ;
108+ SymbolList.add (Profile.getName (), true );
109+ }
110+ Writer->setProfileSymbolList (&SymbolList);
111+ }
112+
93113 if (std::error_code EC = Writer->write (ProfileMap))
94114 exitWithError (std::move (EC));
95115}
0 commit comments