Avoid subverting bool return value

This commit is contained in:
Michael Vines 2018-11-26 07:49:23 -08:00
parent 4506584c48
commit 826ac80e62
2 changed files with 21 additions and 5 deletions

View File

@ -7,7 +7,8 @@
#include <solana_sdk.h>
extern bool entrypoint(const uint8_t *input) {
uint64_t x = *(uint64_t *)input;
uint64_t x = *(uint64_t *) input;
uint64_t *result = (uint64_t *) input + 1;
uint64_t count = 0;
for (int i = 1; i <= x; i++) {
@ -23,5 +24,6 @@ extern bool entrypoint(const uint8_t *input) {
}
}
return count;
*result = count;
return true;
}

View File

@ -5,12 +5,13 @@ extern crate solana_bpf_loader;
extern crate solana_rbpf;
extern crate test;
use byteorder::{LittleEndian, WriteBytesExt};
use byteorder::{ByteOrder, LittleEndian, WriteBytesExt};
use solana_rbpf::EbpfVmRaw;
use std::env;
use std::fs::File;
use std::io::Error;
use std::io::Read;
use std::mem;
use std::path::PathBuf;
use test::Bencher;
@ -73,6 +74,7 @@ fn bench_program_alu(bencher: &mut Bencher) {
inner_iter
.write_u64::<LittleEndian>(ARMSTRONG_LIMIT)
.unwrap();
inner_iter.write_u64::<LittleEndian>(0).unwrap();
let mut file = File::open(create_bpf_path("bench_alu")).expect("file open failed");
let mut elf = Vec::new();
@ -81,9 +83,15 @@ fn bench_program_alu(bencher: &mut Bencher) {
println!("Interpreted:");
assert_eq!(
ARMSTRONG_EXPECTED,
1, /*true*/
vm.execute_program(&mut inner_iter).unwrap()
);
assert_eq!(ARMSTRONG_LIMIT, LittleEndian::read_u64(&inner_iter));
assert_eq!(
ARMSTRONG_EXPECTED,
LittleEndian::read_u64(&inner_iter[mem::size_of::<u64>()..])
);
bencher.iter(|| {
vm.execute_program(&mut inner_iter).unwrap();
});
@ -100,10 +108,16 @@ fn bench_program_alu(bencher: &mut Bencher) {
vm.jit_compile().unwrap();
unsafe {
assert_eq!(
ARMSTRONG_EXPECTED,
1, /*true*/
vm.execute_program_jit(&mut inner_iter).unwrap()
);
}
assert_eq!(ARMSTRONG_LIMIT, LittleEndian::read_u64(&inner_iter));
assert_eq!(
ARMSTRONG_EXPECTED,
LittleEndian::read_u64(&inner_iter[mem::size_of::<u64>()..])
);
bencher.iter(|| unsafe {
vm.execute_program_jit(&mut inner_iter).unwrap();
});