]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
bytecode_ptr: add make_zeroed_bytecode_ptr
authorJustin Viiret <justin.viiret@intel.com>
Tue, 4 Apr 2017 01:02:33 +0000 (11:02 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 05:19:36 +0000 (15:19 +1000)
Rather than always zeroing memory.

19 files changed:
src/fdr/fdr_compile.cpp
src/fdr/fdr_confirm_compile.cpp
src/fdr/flood_compile.cpp
src/fdr/teddy_compile.cpp
src/hwlm/hwlm_build.cpp
src/hwlm/noodle_build.cpp
src/nfa/castlecompile.cpp
src/nfa/goughcompile.cpp
src/nfa/limex_compile.cpp
src/nfa/mcclellancompile.cpp
src/nfa/mcsheng_compile.cpp
src/nfa/mpvcompile.cpp
src/nfa/shengcompile.cpp
src/nfa/tamaramacompile.cpp
src/nfagraph/ng_lbr.cpp
src/rose/rose_build_anchored.cpp
src/rose/rose_build_bytecode.cpp
src/smallwrite/smallwrite_build.cpp
src/util/bytecode_ptr.h

index 36bcda698f469e056038556e45f8ffaa5d12537a..c4ea50f27018bb7d6b257d16d13f3773d46341c3 100644 (file)
@@ -162,7 +162,7 @@ bytecode_ptr<FDR> FDRCompiler::setupFDR() {
                  headerSize, tabSize, confirmTmp.size(), floodControlTmp.size(),
                  size);
 
-    auto fdr = make_bytecode_ptr<FDR>(size, 64);
+    auto fdr = make_zeroed_bytecode_ptr<FDR>(size, 64);
     assert(fdr); // otherwise would have thrown std::bad_alloc
 
     fdr->size = size;
index 5e1a540e572c5eea2caf998403bd8f83c319f67d..d6eb6640bc77a79af3a8ce08ac9f6df7b69b2f0d 100644 (file)
@@ -284,7 +284,7 @@ bytecode_ptr<FDRConfirm> getFDRConfirm(const vector<hwlmLiteral> &lits,
                   sizeof(LitInfo) * lits.size() + totalLitSize;
     size = ROUNDUP_N(size, alignof(FDRConfirm));
 
-    auto fdrc = make_bytecode_ptr<FDRConfirm>(size);
+    auto fdrc = make_zeroed_bytecode_ptr<FDRConfirm>(size);
     assert(fdrc); // otherwise would have thrown std::bad_alloc
 
     fdrc->andmsk = andmsk;
@@ -373,7 +373,7 @@ setupFullConfs(const vector<hwlmLiteral> &lits,
     u32 totalConfSwitchSize = nBuckets * sizeof(u32);
     u32 totalSize = ROUNDUP_16(totalConfSwitchSize + totalConfirmSize);
 
-    auto buf = make_bytecode_ptr<u8>(totalSize, 16);
+    auto buf = make_zeroed_bytecode_ptr<u8>(totalSize, 16);
     assert(buf); // otherwise would have thrown std::bad_alloc
 
     u32 *confBase = (u32 *)buf.get();
index 9b948419e57893431e728e6da5e8d52b9135cdf0..7dcc17d186575f69f871e0f418deb9367e633c35 100644 (file)
@@ -207,7 +207,7 @@ bytecode_ptr<u8> setupFDRFloodControl(const vector<hwlmLiteral> &lits,
     size_t floodStructSize = sizeof(FDRFlood) * nDistinctFloods;
     size_t totalSize = ROUNDUP_16(floodHeaderSize + floodStructSize);
 
-    auto buf = make_bytecode_ptr<u8>(totalSize, 16);
+    auto buf = make_zeroed_bytecode_ptr<u8>(totalSize, 16);
     assert(buf); // otherwise would have thrown std::bad_alloc
 
     u32 *floodHeader = (u32 *)buf.get();
index 80d3316ada89430eb5ad8a2655d1950e03f8e9c5..6f956e8cb78270a6cab98d8e54521333e3c7fd97 100644 (file)
@@ -324,7 +324,7 @@ bytecode_ptr<FDR> TeddyCompiler::build() {
                             floodControlTmp.size(),
                             16 * maskWidth);
 
-    auto fdr = make_bytecode_ptr<FDR>(size, 64);
+    auto fdr = make_zeroed_bytecode_ptr<FDR>(size, 64);
     assert(fdr); // otherwise would have thrown std::bad_alloc
     Teddy *teddy = (Teddy *)fdr.get(); // ugly
     u8 *teddy_base = (u8 *)teddy;
index 824ac3fdea24db0c35e1b1487594964c6d834712..2f61ea6d67c07b5ffa3c83dd78a4668f1694885c 100644 (file)
@@ -165,7 +165,8 @@ bytecode_ptr<HWLM> hwlmBuild(const vector<hwlmLiteral> &lits, bool make_small,
         throw ResourceLimitError();
     }
 
-    auto h = make_bytecode_ptr<HWLM>(ROUNDUP_CL(sizeof(HWLM)) + engSize, 64);
+    const size_t hwlm_len = ROUNDUP_CL(sizeof(HWLM)) + engSize;
+    auto h = make_zeroed_bytecode_ptr<HWLM>(hwlm_len, 64);
 
     h->type = engType;
     memcpy(HWLM_DATA(h.get()), eng.get(), engSize);
index 6412d3f505d6493d9cf4dbbc4f1e05f013e6e897..63fdf0728fdc71bec9f043f077d20e04bf31ba79 100644 (file)
@@ -74,7 +74,7 @@ bytecode_ptr<noodTable> noodBuildTable(const hwlmLiteral &lit) {
 
     const auto &s = lit.s;
     size_t noodle_len = sizeof(noodTable) + s.length();
-    auto n = make_bytecode_ptr<noodTable>(noodle_len);
+    auto n = make_zeroed_bytecode_ptr<noodTable>(noodle_len);
     assert(n);
 
     size_t key_offset = findNoodFragOffset(lit);
index 00f7515909be6b7c6b2b1f7b6ea52298cac49fef..40fbc18cb5da8a1f134c6514b74a071ea76fdfa8 100644 (file)
@@ -579,7 +579,7 @@ buildCastle(const CastleProto &proto,
     total_size = ROUNDUP_N(total_size, alignof(mmbit_sparse_iter));
     total_size += byte_length(stale_iter); // stale sparse iter
 
-    auto nfa = make_bytecode_ptr<NFA>(total_size);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(total_size);
     nfa->type = verify_u8(CASTLE_NFA);
     nfa->length = verify_u32(total_size);
     nfa->nPositions = verify_u32(subs.size());
index 62360561c3f6bf5e2e09477ea819290edaa656e3..d92f285fcfba149ece99c0ca4548cac5e0e37d74 100644 (file)
@@ -1116,7 +1116,7 @@ bytecode_ptr<NFA> goughCompile(raw_som_dfa &raw, u8 somPrecision,
     gi.stream_som_loc_width = somPrecision;
 
     u32 gough_size = ROUNDUP_N(curr_offset, 16);
-    auto gough_dfa = make_bytecode_ptr<NFA>(gough_size);
+    auto gough_dfa = make_zeroed_bytecode_ptr<NFA>(gough_size);
 
     memcpy(gough_dfa.get(), basic_dfa.get(), basic_dfa->length);
     memcpy((char *)gough_dfa.get() + haig_offset, &gi, sizeof(gi));
index 235d7168a078baa2eaeaa15f9cf37964bddb173c..3cdf5de1284ad448316cb9b50efb4521f276e066 100644 (file)
@@ -1797,7 +1797,7 @@ struct Factory {
 
             u32 tableOffset, tugMaskOffset;
             size_t len = repeatAllocSize(br, &tableOffset, &tugMaskOffset);
-            auto info = make_bytecode_ptr<NFARepeatInfo>(len);
+            auto info = make_zeroed_bytecode_ptr<NFARepeatInfo>(len);
             char *info_ptr = (char *)info.get();
 
             // Collect state space info.
@@ -2297,7 +2297,7 @@ struct Factory {
 
         size_t nfaSize = sizeof(NFA) + offset;
         DEBUG_PRINTF("nfa size %zu\n", nfaSize);
-        auto nfa = make_bytecode_ptr<NFA>(nfaSize);
+        auto nfa = make_zeroed_bytecode_ptr<NFA>(nfaSize);
         assert(nfa); // otherwise we would have thrown std::bad_alloc
 
         implNFA_t *limex = (implNFA_t *)getMutableImplNfa(nfa.get());
index e07d7a2a591e2969ebe93cea1dd39da6ed5a5322..206f468a5c2ee6c33e2b7eca91829b5b24066b48 100644 (file)
@@ -496,7 +496,7 @@ bytecode_ptr<NFA> mcclellanCompile16(dfa_info &info, const CompileContext &cc,
     accel_offset -= sizeof(NFA); /* adj accel offset to be relative to m */
     assert(ISALIGNED_N(accel_offset, alignof(union AccelAux)));
 
-    auto nfa = make_bytecode_ptr<NFA>(total_size);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(total_size);
     char *nfa_base = (char *)nfa.get();
 
     populateBasicInfo(sizeof(u16), info, total_size, aux_offset, accel_offset,
@@ -715,7 +715,7 @@ bytecode_ptr<NFA> mcclellanCompile8(dfa_info &info, const CompileContext &cc,
     accel_offset -= sizeof(NFA); /* adj accel offset to be relative to m */
     assert(ISALIGNED_N(accel_offset, alignof(union AccelAux)));
 
-    auto nfa = bytecode_ptr<NFA>(total_size);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(total_size);
     char *nfa_base = (char *)nfa.get();
 
     mcclellan *m = (mcclellan *)getMutableImplNfa(nfa.get());
index c7133d08cafaecc5b2a8dbccf341a8db9d3f8db3..e4e4173a1216055be9e89f90acb01172e2414130 100644 (file)
@@ -872,7 +872,7 @@ bytecode_ptr<NFA> mcshengCompile16(dfa_info &info, dstate_id_t sheng_end,
     accel_offset -= sizeof(NFA); /* adj accel offset to be relative to m */
     assert(ISALIGNED_N(accel_offset, alignof(union AccelAux)));
 
-    auto nfa = make_bytecode_ptr<NFA>(total_size);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(total_size);
     mcsheng *m = (mcsheng *)getMutableImplNfa(nfa.get());
 
     populateBasicInfo(sizeof(u16), info, total_size, aux_offset, accel_offset,
@@ -998,7 +998,7 @@ bytecode_ptr<NFA> mcshengCompile8(dfa_info &info, dstate_id_t sheng_end,
     accel_offset -= sizeof(NFA); /* adj accel offset to be relative to m */
     assert(ISALIGNED_N(accel_offset, alignof(union AccelAux)));
 
-    auto nfa = make_bytecode_ptr<NFA>(total_size);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(total_size);
     mcsheng *m = (mcsheng *)getMutableImplNfa(nfa.get());
 
     allocateImplId8(info, sheng_end, accel_escape_info, &m->accel_limit_8,
index 51787512710043f817b77e5068c5480e7686bcc0..8497c648706a1d01ed97fa4944582ea7112dac83 100644 (file)
@@ -343,7 +343,7 @@ bytecode_ptr<NFA> mpvCompile(const vector<raw_puff> &puffs_in,
 
     DEBUG_PRINTF("%u puffs, len = %u\n", puffette_count, len);
 
-    auto nfa = make_bytecode_ptr<NFA>(len);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(len);
 
     mpv_puffette *pa_base = (mpv_puffette *)
         ((char *)nfa.get() + sizeof(NFA) + sizeof(mpv)
index b2996aa58857f1412975243bca6ba88ffa643acc..8c061913ad68d394cff0f04088e29811ba856f2d 100644 (file)
@@ -507,7 +507,7 @@ bytecode_ptr<NFA> shengCompile(raw_dfa &raw, const CompileContext &cc,
     DEBUG_PRINTF("NFA: %u, aux: %u, reports: %u, accel: %u, total: %u\n",
                  nfa_size, total_aux, total_reports, total_accel, total_size);
 
-    auto nfa = make_bytecode_ptr<NFA>(total_size);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(total_size);
 
     populateBasicInfo(nfa.get(), info, accelInfo, nfa_size, reports_offset,
                       accel_offset, total_size, total_size - sizeof(NFA));
index 6d253411c286e5855ce6a6d3babb2abf7f6377b2..1a6e8beff93df0a8ac79c958a934db662c0b0f43 100644 (file)
@@ -134,7 +134,7 @@ buildTamarama(const TamaInfo &tamaInfo, const u32 queue,
     // use subSize as a sentinel value for no active subengines,
     // so add one to subSize here
     u32 activeIdxSize = calcPackedBytes(subSize + 1);
-    auto nfa = make_bytecode_ptr<NFA>(total_size);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(total_size);
     nfa->type = verify_u8(TAMARAMA_NFA);
     nfa->length = verify_u32(total_size);
     nfa->queueIndex = queue;
index 11262ae17ff3cd03e7305565dd05b4e7da5b8f04..9bf16efeada44e2a7e795a054126fd8b7c658b1b 100644 (file)
@@ -137,7 +137,7 @@ bytecode_ptr<NFA> makeLbrNfa(NFAEngineType nfa_type, enum RepeatType rtype,
     }
     size_t len = sizeof(NFA) + sizeof(LbrStruct) + sizeof(RepeatInfo) +
                  tableLen + sizeof(u64a);
-    auto nfa = make_bytecode_ptr<NFA>(len);
+    auto nfa = make_zeroed_bytecode_ptr<NFA>(len);
     nfa->type = verify_u8(nfa_type);
     nfa->length = verify_u32(len);
     return nfa;
index 12b62128241a9b055a64190ef9580c8ab69d7da3..6d56ee007383fef2960a61ce4df294411d7548b7 100644 (file)
@@ -891,7 +891,8 @@ buildAnchoredMatcher(RoseBuildImpl &build, const vector<LitFragment> &fragments,
         throw ResourceLimitError();
     }
 
-    auto atable = make_bytecode_ptr<anchored_matcher_info>(total_size, 64);
+    auto atable =
+        make_zeroed_bytecode_ptr<anchored_matcher_info>(total_size, 64);
     char *curr = (char *)atable.get();
 
     u32 state_offset = 0;
index b48a80c2b8081fbd6f85077a35edc0c55aeb2396..baf1344661c9eda1ce4e4c0bff9759579e138148 100644 (file)
@@ -5612,7 +5612,7 @@ bytecode_ptr<RoseEngine> addSmallWriteEngine(const RoseBuildImpl &build,
     const size_t smwrOffset = ROUNDUP_CL(mainSize);
     const size_t newSize = smwrOffset + smallWriteSize;
 
-    auto rose2 = make_bytecode_ptr<RoseEngine>(newSize, 64);
+    auto rose2 = make_zeroed_bytecode_ptr<RoseEngine>(newSize, 64);
     char *ptr = (char *)rose2.get();
     memcpy(ptr, rose.get(), mainSize);
     memcpy(ptr + smwrOffset, smwr_engine.get(), smallWriteSize);
@@ -5958,7 +5958,7 @@ bytecode_ptr<RoseEngine> RoseBuildImpl::buildFinalEngine(u32 minWidth) {
     proto.size = currOffset;
 
     // Time to allocate the real RoseEngine structure, at cacheline alignment.
-    auto engine = make_bytecode_ptr<RoseEngine>(currOffset, 64);
+    auto engine = make_zeroed_bytecode_ptr<RoseEngine>(currOffset, 64);
     assert(engine); // will have thrown bad_alloc otherwise.
 
     // Copy in our prototype engine data.
index dc2a4466b982fd58a1fe2684b7f13ea12aef5d25..d5c1ccb71d079d1fbea59f8b79b5959204dd13db 100644 (file)
@@ -504,7 +504,7 @@ bytecode_ptr<SmallWriteEngine> SmallWriteBuildImpl::build(u32 roseQuality) {
     }
 
     u32 size = sizeof(SmallWriteEngine) + nfa->length;
-    auto smwr = make_bytecode_ptr<SmallWriteEngine>(size);
+    auto smwr = make_zeroed_bytecode_ptr<SmallWriteEngine>(size);
 
     smwr->size = size;
     smwr->start_offset = start_offset;
index 713649abc0cb25a879c3fe66b63d132a74a4e129..d3f5215a560656c2ab57cd0bc3ba08c2372e97f1 100644 (file)
@@ -63,7 +63,6 @@ public:
         if (!ptr) {
             throw std::bad_alloc();
         }
-        std::memset(ptr.get(), 0, bytes);
     }
 
     bytecode_ptr(std::nullptr_t) {}
@@ -122,12 +121,27 @@ private:
     size_t alignment = 0; //!< Alignment of memory region in bytes.
 };
 
+/**
+ * \brief Constructs a bytecode_ptr<T> with the given size and alignment.
+ */
 template<typename T>
 inline bytecode_ptr<T> make_bytecode_ptr(size_t size,
                                          size_t align = alignof(T)) {
     return bytecode_ptr<T>(size, align);
 }
 
+/**
+ * \brief Constructs a bytecode_ptr<T> with the given size and alignment and
+ * fills the memory region with zeroes.
+ */
+template<typename T>
+inline bytecode_ptr<T> make_zeroed_bytecode_ptr(size_t size,
+                                                size_t align = alignof(T)) {
+    auto ptr = make_bytecode_ptr<T>(size, align);
+    std::memset(ptr.get(), 0, size);
+    return ptr;
+}
+
 } // namespace ue2
 
 #endif // UTIL_BYTECODE_PTR_H