Elf relocations (#1724)

Use relocatable BPF ELFs
This commit is contained in:
jackcmay
2018-11-06 14:28:46 -08:00
committed by Grimes
parent 863a0c3f8f
commit 1075a73902
7 changed files with 105 additions and 85 deletions

View File

@@ -18,6 +18,10 @@ use solana_sdk::pubkey::Pubkey;
#[cfg(feature = "bpf_c")]
use std::env;
#[cfg(feature = "bpf_c")]
use std::fs::File;
#[cfg(feature = "bpf_c")]
use std::io::Read;
#[cfg(feature = "bpf_c")]
use std::path::PathBuf;
/// BPF program file extension
@@ -117,7 +121,7 @@ struct Program {
}
impl Program {
pub fn new(loader: &Loader, userdata: Vec<u8>) -> Self {
pub fn new(loader: &Loader, userdata: &Vec<u8>) -> Self {
let program = Keypair::new();
// allocate, populate, finalize and spawn program
@@ -181,7 +185,7 @@ fn test_program_native_noop() {
let loader = Loader::new_native();
let name = String::from("noop");
let userdata = name.as_bytes().to_vec();
let program = Program::new(&loader, userdata);
let program = Program::new(&loader, &userdata);
// Call user program
let tx = Transaction::new(
@@ -211,7 +215,7 @@ fn test_program_lua_move_funds() {
accounts[2].tokens = accounts[2].tokens + tokens
"#.as_bytes()
.to_vec();
let program = Program::new(&loader, userdata);
let program = Program::new(&loader, &userdata);
let from = Keypair::new();
let to = Keypair::new().pubkey();
@@ -269,16 +273,12 @@ fn test_program_lua_move_funds() {
fn test_program_builtin_bpf_noop() {
logger::setup();
let mut file = File::open(create_bpf_path("noop")).expect("file open failed");
let mut elf = Vec::new();
file.read_to_end(&mut elf).unwrap();
let loader = Loader::new_bpf();
let program = Program::new(
&loader,
elf::File::open_path(&create_bpf_path("noop"))
.unwrap()
.get_section(PLATFORM_SECTION_C)
.unwrap()
.data
.clone(),
);
let program = Program::new(&loader, &elf);
// Call user program
let tx = Transaction::new(
@@ -301,16 +301,12 @@ fn test_program_builtin_bpf_noop() {
fn test_program_bpf_noop_c() {
logger::setup();
let mut file = File::open(create_bpf_path("noop")).expect("file open failed");
let mut elf = Vec::new();
file.read_to_end(&mut elf).unwrap();
let loader = Loader::new_dynamic("solana_bpf_loader");
let program = Program::new(
&loader,
elf::File::open_path(&create_bpf_path("noop"))
.unwrap()
.get_section(PLATFORM_SECTION_C)
.unwrap()
.data
.clone(),
);
let program = Program::new(&loader, &elf);
// Call user program
let tx = Transaction::new(