static inline __attribute__((always_inline))
void* mc_translate_address_region_chunked(uintptr_t addr, mc_mem_region_t region)
{
- size_t pageno = mc_page_number((void*)region->start().address(), (void*) addr);
- const void* snapshot_page =
- region->page_data().page(pageno);
- return (char*) snapshot_page + mc_page_offset((void*) addr);
+ auto split = simgrid::mc::mmu::split(addr - region->start().address());
+ auto pageno = split.first;
+ auto offset = split.second;
+ const void* snapshot_page = region->page_data().page(pageno);
+ return (char*) snapshot_page + offset;
}
static inline __attribute__((always_inline))
case simgrid::mc::StorageType::Flat:
{
uintptr_t offset = (uintptr_t) addr - (uintptr_t) region->start().address();
- return (void *) ((uintptr_t) region->flat_data() + offset);
+ return (void *) ((uintptr_t) region->flat_data().get() + offset);
}
case simgrid::mc::StorageType::Chunked:
typedef struct XBT_PRIVATE s_mc_snapshot_stack {
std::vector<s_local_variable> local_variables;
- s_mc_unw_context_t context;
+ simgrid::mc::UnwindContext context;
std::vector<s_mc_stack_frame_t> stack_frames;
int process_index;
} s_mc_snapshot_stack_t, *mc_snapshot_stack_t;
Snapshot(Process* process);
~Snapshot();
const void* read_bytes(void* buffer, std::size_t size,
- remote_ptr<void> address, int process_index = ProcessIndexAny,
+ RemotePtr<void> address, int process_index = ProcessIndexAny,
ReadOptions options = ReadOptions::none()) const override;
public: // To be private
int num_state;
xbt_die("Storage type not supported");
case simgrid::mc::StorageType::Flat:
- return (char*) region->flat_data() + offset;
+ return (char*) region->flat_data().get() + offset;
case simgrid::mc::StorageType::Chunked:
{
// Last byte of the region:
void* end = (char*) addr + size - 1;
- if (mc_same_page(addr, end) ) {
+ if (simgrid::mc::mmu::sameChunk((std::uintptr_t) addr, (std::uintptr_t) end) ) {
// The memory is contained in a single page:
return mc_translate_address_region_chunked((uintptr_t) addr, region);
} else {