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:
2020-02-10 16:31:08 -05:00
parent 6c352396fa
commit a4a37b5a27
8 changed files with 397 additions and 71 deletions

View File

@@ -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!();
}
}
*/