@@ -976,7 +976,7 @@ class MCDCDecisionRecorder {
976
976
Error CoverageMapping::loadFunctionRecord (
977
977
const CoverageMappingRecord &Record,
978
978
const std::optional<std::reference_wrapper<IndexedInstrProfReader>>
979
- &ProfileReader, StringRef ObjectFilename) {
979
+ &ProfileReader, StringRef ObjectFilename, bool ShowArchExecutables ) {
980
980
StringRef OrigFuncName = Record.FunctionName ;
981
981
if (OrigFuncName.empty ())
982
982
return make_error<CoverageMapError>(coveragemap_error::malformed,
@@ -991,7 +991,7 @@ Error CoverageMapping::loadFunctionRecord(
991
991
992
992
uint64_t FuncArchHash = Record.FunctionHash ;
993
993
if (!Arch.empty ()){
994
- std::string HashStr = std::to_string (Record.FunctionHash ) + " :" + Arch .str ();
994
+ std::string HashStr = std::to_string (Record.FunctionHash ) + " :" + ObjectFilename .str ();
995
995
llvm::StringRef HashRef (HashStr);
996
996
FuncArchHash = IndexedInstrProf::ComputeHash (HashRef);
997
997
}
@@ -1102,28 +1102,29 @@ Error CoverageMapping::loadFunctionRecord(
1102
1102
1103
1103
// CHANGES MADE HERE
1104
1104
auto FilenamesHash = hash_combine_range (Record.Filenames );
1105
- std::string HashStr = OrigFuncName.str (); /* + ":" + Arch.str(); */
1106
- if (!Arch. empty () ){
1105
+ std::string HashStr = OrigFuncName.str ();
1106
+ if (ShowArchExecutables ){
1107
1107
HashStr += " :" + Arch.str ();
1108
- // auto LogicalFuncKey = std::make_pair(FilenamesHash, hash_value(OrigFuncName));
1109
- // auto It = RecordIndices.find(LogicalFuncKey);
1110
- // std::vector<llvm::coverage::CountedRegion> RegionsToAdd;
1111
-
1112
- // if (It != RecordIndices.end()) {
1113
- // auto &ExistingFunction = Functions[It->second];
1114
-
1115
- // for (const auto &NewRegion : Function.CountedRegions) {
1116
- // for (auto &ExistingRegion : ExistingFunction.CountedRegions) {
1117
- // if((NewRegion.ObjectFilename != ExistingRegion.ObjectFilename) &&
1118
- // (NewRegion.startLoc() >= ExistingRegion.startLoc()) &&
1119
- // (NewRegion.endLoc() <= ExistingRegion.endLoc())){
1120
- // RegionsToAdd.push_back(NewRegion);
1121
- // }
1122
- // }
1123
- // }
1124
- // ExistingFunction.CountedRegions.insert(ExistingFunction.CountedRegions.end(), RegionsToAdd.begin(), RegionsToAdd.end());
1125
- // }
1126
- // RecordIndices[LogicalFuncKey] = Functions.size();
1108
+ }else {
1109
+ auto LogicalFuncKey = std::make_pair (FilenamesHash, hash_value (OrigFuncName));
1110
+ auto It = RecordIndices.find (LogicalFuncKey);
1111
+ std::vector<llvm::coverage::CountedRegion> RegionsToAdd;
1112
+
1113
+ if (It != RecordIndices.end ()) {
1114
+ auto &ExistingFunction = Functions[It->second ];
1115
+
1116
+ for (const auto &NewRegion : Function.CountedRegions ) {
1117
+ for (auto &ExistingRegion : ExistingFunction.CountedRegions ) {
1118
+ if ((NewRegion.ObjectFilename != ExistingRegion.ObjectFilename ) &&
1119
+ (NewRegion.startLoc () >= ExistingRegion.startLoc ()) &&
1120
+ (NewRegion.endLoc () <= ExistingRegion.endLoc ())){
1121
+ RegionsToAdd.push_back (NewRegion);
1122
+ }
1123
+ }
1124
+ }
1125
+ ExistingFunction.CountedRegions .insert (ExistingFunction.CountedRegions .end (), RegionsToAdd.begin (), RegionsToAdd.end ());
1126
+ }
1127
+ RecordIndices[LogicalFuncKey] = Functions.size ();
1127
1128
}
1128
1129
// CHANGES MADE HERE
1129
1130
@@ -1180,7 +1181,7 @@ Error CoverageMapping::loadFromReaders(
1180
1181
ArrayRef<std::unique_ptr<CoverageMappingReader>> CoverageReaders,
1181
1182
std::optional<std::reference_wrapper<IndexedInstrProfReader>>
1182
1183
&ProfileReader,
1183
- CoverageMapping &Coverage, StringRef Arch, StringRef ObjectFilename) {
1184
+ CoverageMapping &Coverage, StringRef Arch, StringRef ObjectFilename, bool ShowArchExecutables ) {
1184
1185
1185
1186
Coverage.setArchitecture (Arch);
1186
1187
assert (!Coverage.SingleByteCoverage || !ProfileReader ||
@@ -1193,7 +1194,7 @@ Error CoverageMapping::loadFromReaders(
1193
1194
if (Error E = RecordOrErr.takeError ())
1194
1195
return E;
1195
1196
const auto &Record = *RecordOrErr;
1196
- if (Error E = Coverage.loadFunctionRecord (Record, ProfileReader, ObjectFilename))
1197
+ if (Error E = Coverage.loadFunctionRecord (Record, ProfileReader, ObjectFilename, ShowArchExecutables ))
1197
1198
return E;
1198
1199
}
1199
1200
}
@@ -1224,7 +1225,7 @@ Error CoverageMapping::loadFromFile(
1224
1225
std::optional<std::reference_wrapper<IndexedInstrProfReader>>
1225
1226
&ProfileReader,
1226
1227
CoverageMapping &Coverage, bool &DataFound,
1227
- SmallVectorImpl<object::BuildID> *FoundBinaryIDs, StringRef ObjectFilename) {
1228
+ SmallVectorImpl<object::BuildID> *FoundBinaryIDs, StringRef ObjectFilename, bool ShowArchExecutables ) {
1228
1229
auto CovMappingBufOrErr = MemoryBuffer::getFileOrSTDIN (
1229
1230
Filename, /* IsText=*/ false , /* RequiresNullTerminator=*/ false );
1230
1231
if (std::error_code EC = CovMappingBufOrErr.getError ())
@@ -1256,7 +1257,7 @@ Error CoverageMapping::loadFromFile(
1256
1257
}));
1257
1258
}
1258
1259
DataFound |= !Readers.empty ();
1259
- if (Error E = loadFromReaders (Readers, ProfileReader, Coverage, Arch, ObjectFilename))
1260
+ if (Error E = loadFromReaders (Readers, ProfileReader, Coverage, Arch, ObjectFilename, ShowArchExecutables ))
1260
1261
return createFileError (Filename, std::move (E));
1261
1262
return Error::success ();
1262
1263
}
@@ -1265,7 +1266,7 @@ Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load(
1265
1266
ArrayRef<StringRef> ObjectFilenames,
1266
1267
std::optional<StringRef> ProfileFilename, vfs::FileSystem &FS,
1267
1268
ArrayRef<StringRef> Arches, StringRef CompilationDir,
1268
- const object::BuildIDFetcher *BIDFetcher, bool CheckBinaryIDs) {
1269
+ const object::BuildIDFetcher *BIDFetcher, bool CheckBinaryIDs, bool ShowArchExecutables ) {
1269
1270
std::unique_ptr<IndexedInstrProfReader> ProfileReader;
1270
1271
if (ProfileFilename) {
1271
1272
auto ProfileReaderOrErr =
@@ -1297,7 +1298,8 @@ Expected<std::unique_ptr<CoverageMapping>> CoverageMapping::load(
1297
1298
for (const auto &File : llvm::enumerate (ObjectFilenames)) {
1298
1299
if (Error E = loadFromFile (File.value (), GetArch (File.index ()),
1299
1300
CompilationDir, ProfileReaderRef, *Coverage,
1300
- DataFound, &FoundBinaryIDs, ObjectFilenames[File.index ()]))
1301
+ DataFound, &FoundBinaryIDs, ObjectFilenames[File.index ()],
1302
+ ShowArchExecutables))
1301
1303
return std::move (E);
1302
1304
}
1303
1305
0 commit comments