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> #include <solana_sdk.h>
extern bool entrypoint(const uint8_t *input) { 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; uint64_t count = 0;
for (int i = 1; i <= x; i++) { 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 solana_rbpf;
extern crate test; extern crate test;
use byteorder::{LittleEndian, WriteBytesExt}; use byteorder::{ByteOrder, LittleEndian, WriteBytesExt};
use solana_rbpf::EbpfVmRaw; use solana_rbpf::EbpfVmRaw;
use std::env; use std::env;
use std::fs::File; use std::fs::File;
use std::io::Error; use std::io::Error;
use std::io::Read; use std::io::Read;
use std::mem;
use std::path::PathBuf; use std::path::PathBuf;
use test::Bencher; use test::Bencher;
@ -73,6 +74,7 @@ fn bench_program_alu(bencher: &mut Bencher) {
inner_iter inner_iter
.write_u64::<LittleEndian>(ARMSTRONG_LIMIT) .write_u64::<LittleEndian>(ARMSTRONG_LIMIT)
.unwrap(); .unwrap();
inner_iter.write_u64::<LittleEndian>(0).unwrap();
let mut file = File::open(create_bpf_path("bench_alu")).expect("file open failed"); let mut file = File::open(create_bpf_path("bench_alu")).expect("file open failed");
let mut elf = Vec::new(); let mut elf = Vec::new();
@ -81,9 +83,15 @@ fn bench_program_alu(bencher: &mut Bencher) {
println!("Interpreted:"); println!("Interpreted:");
assert_eq!( assert_eq!(
ARMSTRONG_EXPECTED, 1, /*true*/
vm.execute_program(&mut inner_iter).unwrap() 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(|| { bencher.iter(|| {
vm.execute_program(&mut inner_iter).unwrap(); vm.execute_program(&mut inner_iter).unwrap();
}); });
@ -100,10 +108,16 @@ fn bench_program_alu(bencher: &mut Bencher) {
vm.jit_compile().unwrap(); vm.jit_compile().unwrap();
unsafe { unsafe {
assert_eq!( assert_eq!(
ARMSTRONG_EXPECTED, 1, /*true*/
vm.execute_program_jit(&mut inner_iter).unwrap() 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 { bencher.iter(|| unsafe {
vm.execute_program_jit(&mut inner_iter).unwrap(); vm.execute_program_jit(&mut inner_iter).unwrap();
}); });