Add Disassemble, fix bug in position calculation
* Disassemble structure can be used for dumping an object section * Assembler position calculation was messing up, causing jump addresses to be wrong. This is fixed. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
26
src/main.rs
26
src/main.rs
@@ -1,7 +1,6 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
mod common;
|
||||
//mod syn;
|
||||
mod vm;
|
||||
|
||||
use std::{convert::TryFrom, env, fs, io, process};
|
||||
@@ -32,10 +31,31 @@ fn main() -> Result<()> {
|
||||
}
|
||||
};
|
||||
let obj = vm::obj::obj::Object::try_from(&ast)?;
|
||||
//println!("{:#?}", obj);
|
||||
let mut vm = vm::vm::Vm::new();
|
||||
vm.load_object(obj, 1024 * 1024 * 64)?; // 64mb
|
||||
let status = vm.run()?;
|
||||
println!("status: {}", status);
|
||||
println!("{}", status);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
fn dump(obj: &Object) {
|
||||
use vm::obj::obj::Section;
|
||||
use vm::visit::VisitInst;
|
||||
let mut stdout = io::stdout();
|
||||
for section in &obj.sections {
|
||||
let mut disasm = match section {
|
||||
Section::Code { start, contents, .. }
|
||||
| Section::Data { start, contents, .. } => {
|
||||
vm::disassemble::Disassemble::new(&mut stdout, contents, *start)
|
||||
}
|
||||
Section::Meta { .. } => continue,
|
||||
};
|
||||
while !disasm.is_done() {
|
||||
disasm.visit_inst()?;
|
||||
}
|
||||
println!();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user