Migrate to latest rbpf (#1605)

Migrate to updated rbpf
This commit is contained in:
jackcmay 2018-10-25 02:58:04 -07:00 committed by GitHub
parent b982595c73
commit 24b513c3c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 8 deletions

View File

@ -10,7 +10,7 @@ elf = "0.0.10"
env_logger = "0.5.12"
libc = "0.2.43"
log = "0.4.2"
rbpf = { git = "https://github.com/qmonnet/rbpf", rev="bc41ec47d9b51751585f6ddcde1d1eb1afe2be69" }
rbpf = "0.1.0"
serde = "1.0.27"
serde_derive = "1.0.27"
solana_program_interface = { path = "../../../common" }

View File

@ -21,18 +21,18 @@ use std::sync::{Once, ONCE_INIT};
fn create_vm(prog: &[u8]) -> Result<rbpf::EbpfVmRaw, Error> {
let mut vm = rbpf::EbpfVmRaw::new(None)?;
vm.set_verifier(bpf_verifier::check)?;
vm.set_prog(&prog)?;
vm.set_program(&prog)?;
vm.register_helper(
rbpf::helpers::BPF_TRACE_PRINTK_IDX,
rbpf::helpers::bpf_trace_printf,
);
)?;
Ok(vm)
}
#[allow(dead_code)]
fn dump_prog(name: &str, prog: &[u8]) {
fn dump_program(key: &Pubkey, prog: &[u8]) {
let mut eight_bytes: Vec<u8> = Vec::new();
println!("BPF Program: {}", name);
println!("BPF Program: {:?}", key);
for i in prog.iter() {
if eight_bytes.len() >= 7 {
println!("{:02X?}", eight_bytes);
@ -91,6 +91,7 @@ pub extern "C" fn process(keyed_accounts: &mut [KeyedAccount], tx_data: &[u8]) -
if keyed_accounts[0].account.executable {
let prog = keyed_accounts[0].account.userdata.clone();
trace!("Call BPF, {} Instructions", prog.len() / 8);
//dump_program(keyed_accounts[0].key, &prog);
let vm = match create_vm(&prog) {
Ok(vm) => vm,
Err(e) => {
@ -99,9 +100,14 @@ pub extern "C" fn process(keyed_accounts: &mut [KeyedAccount], tx_data: &[u8]) -
}
};
let mut v = serialize_parameters(&mut keyed_accounts[1..], &tx_data);
if 0 == vm.prog_exec(v.as_mut_slice()) {
warn!("BPF program failed");
return false;
match vm.execute_program(v.as_mut_slice()) {
Ok(status) => if 0 == status {
return false;
},
Err(e) => {
warn!("{}", e);
return false;
}
}
deserialize_parameters(&mut keyed_accounts[1..], &v);
} else if let Ok(instruction) = deserialize(tx_data) {