diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index 13d485ea..98e1ef70 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -2567,11 +2567,10 @@ u32 writeProgram(build_context &bc, RoseProgram &&program) { recordResources(bc.resources, program); recordLongLiterals(bc.longLiterals, program); - u32 len = 0; - auto prog_bytecode = writeProgram(bc.engine_blob, program, &len); - u32 offset = bc.engine_blob.add(prog_bytecode.get(), len, - ROSE_INSTR_MIN_ALIGN); - DEBUG_PRINTF("prog len %u written at offset %u\n", len, offset); + auto prog_bytecode = writeProgram(bc.engine_blob, program); + u32 offset = bc.engine_blob.add(prog_bytecode); + DEBUG_PRINTF("prog len %zu written at offset %u\n", prog_bytecode.size(), + offset); bc.program_cache.emplace(move(program), offset); return offset; } diff --git a/src/rose/rose_build_program.cpp b/src/rose/rose_build_program.cpp index 2fb76c77..bca867f0 100644 --- a/src/rose/rose_build_program.cpp +++ b/src/rose/rose_build_program.cpp @@ -639,12 +639,14 @@ OffsetMap makeOffsetMap(const RoseProgram &program, u32 *total_len) { return offset_map; } -aligned_unique_ptr -writeProgram(RoseEngineBlob &blob, const RoseProgram &program, u32 *total_len) { - const auto offset_map = makeOffsetMap(program, total_len); - DEBUG_PRINTF("%zu instructions, len %u\n", program.size(), *total_len); +bytecode_ptr writeProgram(RoseEngineBlob &blob, + const RoseProgram &program) { + u32 total_len = 0; + const auto offset_map = makeOffsetMap(program, &total_len); + DEBUG_PRINTF("%zu instructions, len %u\n", program.size(), total_len); - auto bytecode = aligned_zmalloc_unique(*total_len); + auto bytecode = make_zeroed_bytecode_ptr(total_len, + ROSE_INSTR_MIN_ALIGN); char *ptr = bytecode.get(); for (const auto &ri : program) { diff --git a/src/rose/rose_build_program.h b/src/rose/rose_build_program.h index 3931f095..06233231 100644 --- a/src/rose/rose_build_program.h +++ b/src/rose/rose_build_program.h @@ -32,7 +32,7 @@ #include "rose_build_impl.h" #include "rose_program.h" #include "som/som_operation.h" -#include "util/alloc.h" +#include "util/bytecode_ptr.h" #include "util/container.h" #include "util/hash.h" #include "util/make_unique.h" @@ -2328,8 +2328,8 @@ public: } }; -aligned_unique_ptr -writeProgram(RoseEngineBlob &blob, const RoseProgram &program, u32 *total_len); +bytecode_ptr writeProgram(RoseEngineBlob &blob, + const RoseProgram &program); class RoseProgramHash { public: