MCPcopy Create free account
hub / github.com/LPC4/Full-Stack / run

Method run

crates/virtual-machine/src/virtual_machine.rs:121–152  ·  view source on GitHub ↗
(&mut self, max_steps: u64)

Source from the content-addressed store, hash-verified

119 .checked_add(segment.file_size)
120 .ok_or_else(|| VmError::Other("ELF segment file range overflow".to_owned()))?;
121 let data = bytes
122 .get(segment.offset as usize..file_end as usize)
123 .ok_or_else(|| VmError::Other("ELF PT_LOAD range outside file".to_owned()))?;
124
125 for (i, &byte) in data.iter().enumerate() {
126 bus.write_byte(mapped_vaddr + i as u64, byte)?;
127 }
128
129 if segment.mem_size > segment.file_size {
130 for addr in (mapped_vaddr + segment.file_size)..(mapped_vaddr + segment.mem_size) {
131 bus.write_byte(addr, 0)?;
132 }
133 }
134 }
135
136 let heap_base = align_up(highest_mapped, 0x1000);
137 bus.write_doubleword(HEAP_PTR_ADDR, heap_base)?;
138
139 bus.cold_cache_reset();
140
141 let stack_ptr = RAM_BASE + RAM_SIZE_DEFAULT as u64 - 16;
142 let cpu = Cpu::new(RAM_BASE + (elf.entry_point - image_base), stack_ptr);
143
144 Ok(Self { cpu, bus })
145 }
146}
147
148// --- Step / run ---
149
150impl VirtualMachine {
151 /// Configure blocking data-cache and DRAM latency. Disabled by default.
152 pub fn set_memory_latency_config(&mut self, config: MemoryLatencyConfig) {
153 self.bus.set_memory_latency_config(config);
154 }
155

Callers

nothing calls this directly

Calls 3

drain_outputMethod · 0.80
uart_mutMethod · 0.80
stepMethod · 0.45

Tested by

no test coverage detected