diff --git a/src/fdr/fdr_compile.cpp b/src/fdr/fdr_compile.cpp index dc0cc0f3..8346e520 100644 --- a/src/fdr/fdr_compile.cpp +++ b/src/fdr/fdr_compile.cpp @@ -151,18 +151,18 @@ aligned_unique_ptr FDRCompiler::setupFDR() { auto confirmTmp = setupFullConfs(lits, eng, bucketToLits, make_small); assert(ISALIGNED_16(tabSize)); - assert(ISALIGNED_16(confirmTmp.second)); - assert(ISALIGNED_16(floodControlTmp.second)); + assert(ISALIGNED_16(confirmTmp.size())); + assert(ISALIGNED_16(floodControlTmp.size())); size_t headerSize = ROUNDUP_16(sizeof(FDR)); - size_t size = ROUNDUP_16(headerSize + tabSize + confirmTmp.second + - floodControlTmp.second); + size_t size = ROUNDUP_16(headerSize + tabSize + confirmTmp.size() + + floodControlTmp.size()); DEBUG_PRINTF("sizes base=%zu tabSize=%zu confirm=%zu floodControl=%zu " "total=%zu\n", - headerSize, tabSize, confirmTmp.second, floodControlTmp.second, + headerSize, tabSize, confirmTmp.size(), floodControlTmp.size(), size); - aligned_unique_ptr fdr = aligned_zmalloc_unique(size); + auto fdr = aligned_zmalloc_unique(size); assert(fdr); // otherwise would have thrown std::bad_alloc fdr->size = size; @@ -171,16 +171,16 @@ aligned_unique_ptr FDRCompiler::setupFDR() { createInitialState(fdr.get()); u8 *fdr_base = (u8 *)fdr.get(); - u8 * ptr = fdr_base + ROUNDUP_16(sizeof(FDR)); + u8 *ptr = fdr_base + ROUNDUP_16(sizeof(FDR)); copy(tab.begin(), tab.end(), ptr); ptr += tabSize; - memcpy(ptr, confirmTmp.first.get(), confirmTmp.second); - ptr += confirmTmp.second; + memcpy(ptr, confirmTmp.get(), confirmTmp.size()); + ptr += confirmTmp.size(); fdr->floodOffset = verify_u32(ptr - fdr_base); - memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second); - ptr += floodControlTmp.second; + memcpy(ptr, floodControlTmp.get(), floodControlTmp.size()); + ptr += floodControlTmp.size(); /* we are allowing domains 9 to 15 only */ assert(eng.bits > 8 && eng.bits < 16); diff --git a/src/fdr/fdr_compile_internal.h b/src/fdr/fdr_compile_internal.h index 73de4d42..756fe8e7 100644 --- a/src/fdr/fdr_compile_internal.h +++ b/src/fdr/fdr_compile_internal.h @@ -31,7 +31,7 @@ #include "ue2common.h" #include "hwlm/hwlm_literal.h" -#include "util/alloc.h" +#include "util/bytecode_ptr.h" #include #include @@ -57,20 +57,20 @@ class FDREngineDescription; struct hwlmStreamingControl; struct Grey; -std::pair, size_t> setupFullConfs( - const std::vector &lits, const EngineDescription &eng, - std::map> &bucketToLits, - bool make_small); +bytecode_ptr setupFullConfs(const std::vector &lits, + const EngineDescription &eng, + std::map> &bucketToLits, + bool make_small); // all suffixes include an implicit max_bucket_width suffix to ensure that // we always read a full-scale flood "behind" us in terms of what's in our // state; if we don't have a flood that's long enough we won't be in the // right state yet to allow blindly advancing -std::pair, size_t> -setupFDRFloodControl(const std::vector &lits, - const EngineDescription &eng, const Grey &grey); +bytecode_ptr setupFDRFloodControl(const std::vector &lits, + const EngineDescription &eng, + const Grey &grey); -std::pair, size_t> +bytecode_ptr fdrBuildTableStreaming(const std::vector &lits, hwlmStreamingControl &stream_control); diff --git a/src/fdr/fdr_confirm_compile.cpp b/src/fdr/fdr_confirm_compile.cpp index e5969261..367ba693 100644 --- a/src/fdr/fdr_confirm_compile.cpp +++ b/src/fdr/fdr_confirm_compile.cpp @@ -342,7 +342,7 @@ getFDRConfirm(const vector &lits, bool make_small, return {move(fdrc), actual_size}; } -pair, size_t> +bytecode_ptr setupFullConfs(const vector &lits, const EngineDescription &eng, map> &bucketToLits, @@ -374,7 +374,7 @@ setupFullConfs(const vector &lits, u32 totalConfSwitchSize = nBuckets * sizeof(u32); u32 totalSize = ROUNDUP_16(totalConfSwitchSize + totalConfirmSize); - auto buf = aligned_zmalloc_unique(totalSize); + auto buf = make_bytecode_ptr(totalSize, 16); assert(buf); // otherwise would have thrown std::bad_alloc u32 *confBase = (u32 *)buf.get(); @@ -389,7 +389,8 @@ setupFullConfs(const vector &lits, ptr += p.second; confBase[idx] = confirm_offset; } - return {move(buf), totalSize}; + + return buf; } } // namespace ue2 diff --git a/src/fdr/flood_compile.cpp b/src/fdr/flood_compile.cpp index b6d23c9d..9b948419 100644 --- a/src/fdr/flood_compile.cpp +++ b/src/fdr/flood_compile.cpp @@ -91,9 +91,9 @@ void addFlood(vector &tmpFlood, u8 c, const hwlmLiteral &lit, } } -pair, size_t> -setupFDRFloodControl(const vector &lits, - const EngineDescription &eng, const Grey &grey) { +bytecode_ptr setupFDRFloodControl(const vector &lits, + const EngineDescription &eng, + const Grey &grey) { vector tmpFlood(N_CHARS); u32 default_suffix = eng.getDefaultFloodSuffixLength(); @@ -207,7 +207,7 @@ setupFDRFloodControl(const vector &lits, size_t floodStructSize = sizeof(FDRFlood) * nDistinctFloods; size_t totalSize = ROUNDUP_16(floodHeaderSize + floodStructSize); - auto buf = aligned_zmalloc_unique(totalSize); + auto buf = make_bytecode_ptr(totalSize, 16); assert(buf); // otherwise would have thrown std::bad_alloc u32 *floodHeader = (u32 *)buf.get(); @@ -227,7 +227,7 @@ setupFDRFloodControl(const vector &lits, DEBUG_PRINTF("made a flood structure with %zu + %zu = %zu\n", floodHeaderSize, floodStructSize, totalSize); - return {move(buf), totalSize}; + return buf; } } // namespace ue2 diff --git a/src/fdr/teddy_compile.cpp b/src/fdr/teddy_compile.cpp index 607024d1..a5856110 100644 --- a/src/fdr/teddy_compile.cpp +++ b/src/fdr/teddy_compile.cpp @@ -315,11 +315,11 @@ aligned_unique_ptr TeddyCompiler::build() { size_t size = ROUNDUP_N(sizeof(Teddy) + maskLen + - confirmTmp.second + - floodControlTmp.second, + confirmTmp.size() + + floodControlTmp.size(), 16 * maskWidth); - aligned_unique_ptr fdr = aligned_zmalloc_unique(size); + auto fdr = aligned_zmalloc_unique(size); assert(fdr); // otherwise would have thrown std::bad_alloc Teddy *teddy = (Teddy *)fdr.get(); // ugly u8 *teddy_base = (u8 *)teddy; @@ -329,12 +329,12 @@ aligned_unique_ptr TeddyCompiler::build() { teddy->maxStringLen = verify_u32(maxLen(lits)); u8 *ptr = teddy_base + sizeof(Teddy) + maskLen; - memcpy(ptr, confirmTmp.first.get(), confirmTmp.second); - ptr += confirmTmp.second; + memcpy(ptr, confirmTmp.get(), confirmTmp.size()); + ptr += confirmTmp.size(); teddy->floodOffset = verify_u32(ptr - teddy_base); - memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second); - ptr += floodControlTmp.second; + memcpy(ptr, floodControlTmp.get(), floodControlTmp.size()); + ptr += floodControlTmp.size(); u8 *baseMsk = teddy_base + sizeof(Teddy);