Add BPF-to-BPF and PC relative call tests (#2395)
This commit is contained in:
16
programs/bpf/c/src/relative_call/relative_call.c
Normal file
16
programs/bpf/c/src/relative_call/relative_call.c
Normal file
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* @brief test program that generates BPF PC relative call instructions
|
||||
*/
|
||||
|
||||
#include <solana_sdk.h>
|
||||
|
||||
void __attribute__ ((noinline)) helper() {
|
||||
sol_log(__func__);
|
||||
}
|
||||
|
||||
extern bool entrypoint(const uint8_t *input) {
|
||||
sol_log(__func__);
|
||||
helper();
|
||||
return true;
|
||||
}
|
||||
|
@ -1,11 +0,0 @@
|
||||
#include <criterion/criterion.h>
|
||||
#include "../src/bench_alu.c"
|
||||
|
||||
Test(bench_alu, sanity) {
|
||||
uint64_t input[] = {500, 0};
|
||||
|
||||
cr_assert(entrypoint((uint8_t *) input));
|
||||
|
||||
cr_assert_eq(input[0], 500);
|
||||
cr_assert_eq(input[1], 5);
|
||||
}
|
@ -18,7 +18,7 @@ byteorder = "1.2.1"
|
||||
elf = "0.0.10"
|
||||
libc = "0.2.46"
|
||||
log = "0.4.2"
|
||||
solana_rbpf = "=0.1.6"
|
||||
solana_rbpf = "=0.1.8"
|
||||
serde = "1.0.84"
|
||||
solana-logger = { path = "../../../logger", version = "0.12.0" }
|
||||
solana-sdk = { path = "../../../sdk", version = "0.12.0" }
|
||||
|
@ -3,7 +3,7 @@ pub mod bpf_verifier;
|
||||
use byteorder::{ByteOrder, LittleEndian, WriteBytesExt};
|
||||
use libc::c_char;
|
||||
use log::*;
|
||||
use solana_rbpf::EbpfVmRaw;
|
||||
use solana_rbpf::{EbpfVmRaw, RegionPtrs};
|
||||
use solana_sdk::account::KeyedAccount;
|
||||
use solana_sdk::loader_instruction::LoaderInstruction;
|
||||
use solana_sdk::native_program::ProgramError;
|
||||
@ -36,15 +36,13 @@ pub fn helper_sol_log_verify(
|
||||
unused3: u64,
|
||||
unused4: u64,
|
||||
unused5: u64,
|
||||
ro_regions: &[&[u8]],
|
||||
unused7: &[&[u8]],
|
||||
ro_regions: &[RegionPtrs],
|
||||
unused7: &[RegionPtrs],
|
||||
) -> Result<(()), Error> {
|
||||
for region in ro_regions.iter() {
|
||||
if region.as_ptr() as u64 <= addr
|
||||
&& addr as u64 <= region.as_ptr() as u64 + region.len() as u64
|
||||
{
|
||||
if region.bot <= addr && addr as u64 <= region.top {
|
||||
let c_buf: *const c_char = addr as *const c_char;
|
||||
let max_size = (region.as_ptr() as u64 + region.len() as u64) - addr;
|
||||
let max_size = region.top - addr;
|
||||
unsafe {
|
||||
for i in 0..max_size {
|
||||
if std::ptr::read(c_buf.offset(i as isize)) == 0 {
|
||||
|
Reference in New Issue
Block a user