program = flattenProgram({program});
applyFinalSpecialisation(program);
programs[id] = writeProgram(bc, program);
+ build.rm.setProgramOffset(id, programs[id]);
DEBUG_PRINTF("program for report %u @ %u (%zu instructions)\n", id,
programs.back(), program.size());
}
/*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
return makeECallback(g.reportId, adj, ekey);
}
+void ReportManager::setProgramOffset(ReportID id, u32 programOffset) {
+ assert(id < reportIds.size());
+ assert(!contains(reportIdToProgramOffset, id));
+ reportIdToProgramOffset.emplace(id, programOffset);
+}
+
+u32 ReportManager::getProgramOffset(ReportID id) const {
+ assert(id < reportIds.size());
+ assert(contains(reportIdToProgramOffset, id));
+ return reportIdToProgramOffset.at(id);
+}
+
static
void ekeysUnion(std::set<u32> *ekeys, u32 more) {
if (!ekeys->empty()) {
/*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* ~0U if no dkey is needed. */
u32 getDkey(const Report &r) const;
+ /** \brief Register a Rose program offset with the given report. */
+ void setProgramOffset(ReportID id, u32 programOffset);
+
+ /** \brief Fetch the program offset for a given report. It is a fatal error
+ * for this to be called with a report for which no program offset has been
+ * set. */
+ u32 getProgramOffset(ReportID id) const;
+
private:
/** \brief Grey box ref, for checking resource limits. */
const Grey &grey;
/** \brief Mapping from ReportID to dedupe key. */
std::map<ReportID, u32> reportIdToDedupeKey;
+ /** \brief Mapping from ReportID to Rose program offset in bytecode. */
+ std::map<ReportID, u32> reportIdToProgramOffset;
+
/** \brief Mapping from external match ids to information about that
* id. */
std::map<ReportID, external_report_info> externalIdMap;