19DataCopyEvent create_cd_event(ContextInterface& context,
30 .write_context_id =
context.get_context_id(),
31 .read_context_id =
context.get_parent_id(),
34 .src_data_addr =
context.get_parent_cd_addr(),
35 .src_data_size =
context.get_parent_cd_size(),
36 .is_nested =
context.has_parent(),
45DataCopyEvent create_rd_event(ContextInterface& context,
56 .write_context_id =
context.get_context_id(),
58 .read_context_id =
context.get_last_child_id(),
61 .src_data_addr =
context.get_last_rd_addr(),
62 .src_data_size =
context.get_last_rd_size(),
63 .is_nested =
context.has_parent(),
111 uint64_t read_addr_upper_bound = data_index_upper_bound +
context.get_parent_cd_addr();
118 if (read_out_of_range || write_out_of_range) {
119 const std::string error_msg =
format(
"Attempting to access out of bounds memory: read_addr_upper_bound = ",
120 read_addr_upper_bound,
121 " write_addr_upper_bound = ",
122 write_addr_upper_bound);
134 if (
gt.gt(data_index_upper_bound,
static_cast<uint64_t
>(
offset))) {
139 for (uint32_t i = 0; i <
copy_size; i++) {
140 memory.set(
dst_addr + i, MemoryValue::from<FF>(padded_calldata[i].as_ff()));
162 uint64_t read_addr_upper_bound = data_index_upper_bound +
context.get_last_rd_addr();
169 if (read_out_of_range || write_out_of_range) {
170 const std::string error_msg =
format(
"Attempting to access out of bounds memory: read_addr_upper_bound = ",
171 read_addr_upper_bound,
172 " write_addr_upper_bound = ",
173 write_addr_upper_bound);
188 if (
gt.gt(data_index_upper_bound,
static_cast<uint64_t
>(
offset))) {
193 for (uint32_t i = 0; i <
copy_size; i++) {
194 memory.set(
dst_addr + i, MemoryValue::from<FF>(padded_returndata[i].as_ff()));
ExecutionIdGetterInterface & execution_id_manager
uint64_t min(uint64_t a, uint64_t b)
void rd_copy(ContextInterface &context, uint32_t copy_size, uint32_t offset, MemoryAddress dst_addr) override
Copies returndata from the last executed context to the dst_addr.
void cd_copy(ContextInterface &context, uint32_t copy_size, uint32_t offset, MemoryAddress dst_addr) override
Writes calldata into dst_addr. There is slight difference in how enqueued and nested contexts are han...
EventEmitterInterface< DataCopyEvent > & events
virtual uint32_t get_execution_id() const =0
std::string format(Args... args)
StrictMock< MockContext > context
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::vector< MemoryValue > calldata
std::vector< MemoryValue > returndata