]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
report_manager: store report -> program mapping
authorJustin Viiret <justin.viiret@intel.com>
Mon, 18 Apr 2016 04:20:45 +0000 (14:20 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 18 May 2016 06:20:38 +0000 (16:20 +1000)
src/rose/rose_build_bytecode.cpp
src/util/report_manager.cpp
src/util/report_manager.h

index f79bce5bc9c1f2430d82abb0848a82bd893f743f..ea3a80a3d03c15bbfa16215034cc2135a96f6cdb 100644 (file)
@@ -3771,6 +3771,7 @@ u32 buildReportPrograms(RoseBuildImpl &build, build_context &bc) {
         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());
     }
index 425f166d1bdaf7637cd06662ed57daedcfe8d0c3..8377ea036c562318ba7ebaac696f2c3a7f389b39 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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:
@@ -217,6 +217,18 @@ Report ReportManager::getBasicInternalReport(const NGWrapper &g, s32 adj) {
     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()) {
index 4fb68aacba6d55195ab33d5006c29a3d4597517e..0eed2711bee4b618d72c3b2c1c235e7ba8d6e185 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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:
@@ -113,6 +113,14 @@ public:
      * ~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;
@@ -127,6 +135,9 @@ private:
     /** \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;