SmallVector<uint64_t, 64> Record;
std::vector<std::string> SectionTable;
+ std::vector<std::string> CollectorTable;
// Read all the records for this module.
while (!Stream.AtEndOfStream()) {
SectionTable.push_back(S);
break;
}
+ case bitc::MODULE_CODE_COLLECTORNAME: { // SECTIONNAME: [strchr x N]
+ std::string S;
+ if (ConvertToString(Record, 0, S))
+ return Error("Invalid MODULE_CODE_COLLECTORNAME record");
+ CollectorTable.push_back(S);
+ break;
+ }
// GLOBALVAR: [type, isconst, initid,
// linkage, alignment, section, visibility, threadlocal]
case bitc::MODULE_CODE_GLOBALVAR: {
break;
}
// FUNCTION: [type, callingconv, isproto, linkage, paramattr,
- // alignment, section, visibility]
+ // alignment, section, visibility, collector]
case bitc::MODULE_CODE_FUNCTION: {
if (Record.size() < 8)
return Error("Invalid MODULE_CODE_FUNCTION record");
Func->setSection(SectionTable[Record[6]-1]);
}
Func->setVisibility(GetDecodedVisibility(Record[7]));
+ if (Record.size() > 8 && Record[8]) {
+ if (Record[8]-1 > CollectorTable.size())
+ return Error("Invalid collector ID");
+ Func->setCollector(CollectorTable[Record[8]-1].c_str());
+ }
ValueList.push_back(Func);