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;
}
return offset_map;
}
-aligned_unique_ptr<char>
-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);
-
- auto bytecode = aligned_zmalloc_unique<char>(*total_len);
+bytecode_ptr<char> 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 = make_zeroed_bytecode_ptr<char>(total_len,
+ ROSE_INSTR_MIN_ALIGN);
char *ptr = bytecode.get();
for (const auto &ri : program) {
#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"
}
};
-aligned_unique_ptr<char>
-writeProgram(RoseEngineBlob &blob, const RoseProgram &program, u32 *total_len);
+bytecode_ptr<char> writeProgram(RoseEngineBlob &blob,
+ const RoseProgram &program);
class RoseProgramHash {
public: