Fix programs/bpf bpf_c and bpf_rust features to work independently
`cargo test --features="bpf_c"` fails to compile without this fix.
This commit is contained in:
parent
6e57a8f8a1
commit
09e26c7d29
|
@ -3,26 +3,61 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate solana_bpf_loader_program;
|
extern crate solana_bpf_loader_program;
|
||||||
|
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
use {
|
use {
|
||||||
itertools::izip,
|
itertools::izip,
|
||||||
log::{log_enabled, trace, Level::Trace},
|
|
||||||
solana_account_decoder::parse_bpf_loader::{
|
solana_account_decoder::parse_bpf_loader::{
|
||||||
parse_bpf_upgradeable_loader, BpfUpgradeableLoaderAccountType,
|
parse_bpf_upgradeable_loader, BpfUpgradeableLoaderAccountType,
|
||||||
},
|
},
|
||||||
|
solana_bpf_rust_invoke::instructions::*,
|
||||||
|
solana_bpf_rust_realloc::instructions::*,
|
||||||
|
solana_bpf_rust_realloc_invoke::instructions::*,
|
||||||
|
solana_ledger::token_balances::collect_token_balances,
|
||||||
|
solana_program_runtime::{compute_budget::ComputeBudget, timings::ExecuteTimings},
|
||||||
|
solana_runtime::{
|
||||||
|
bank::{
|
||||||
|
DurableNonceFee, TransactionBalancesSet, TransactionExecutionDetails,
|
||||||
|
TransactionExecutionResult, TransactionResults,
|
||||||
|
},
|
||||||
|
loader_utils::{
|
||||||
|
load_buffer_account, load_upgradeable_program, set_upgrade_authority, upgrade_program,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
solana_sdk::{
|
||||||
|
account::{ReadableAccount, WritableAccount},
|
||||||
|
account_utils::StateMut,
|
||||||
|
bpf_loader_upgradeable,
|
||||||
|
clock::MAX_PROCESSING_AGE,
|
||||||
|
compute_budget::ComputeBudgetInstruction,
|
||||||
|
entrypoint::MAX_PERMITTED_DATA_INCREASE,
|
||||||
|
feature_set::FeatureSet,
|
||||||
|
fee::FeeStructure,
|
||||||
|
fee_calculator::FeeRateGovernor,
|
||||||
|
instruction::CompiledInstruction,
|
||||||
|
loader_instruction,
|
||||||
|
message::{v0::LoadedAddresses, SanitizedMessage},
|
||||||
|
rent::Rent,
|
||||||
|
signature::keypair_from_seed,
|
||||||
|
stake,
|
||||||
|
system_instruction::{self, MAX_PERMITTED_DATA_LENGTH},
|
||||||
|
sysvar::{self, clock, rent},
|
||||||
|
transaction::VersionedTransaction,
|
||||||
|
},
|
||||||
|
solana_transaction_status::{
|
||||||
|
ConfirmedTransactionWithStatusMeta, InnerInstructions, TransactionStatusMeta,
|
||||||
|
TransactionWithStatusMeta, VersionedTransactionWithStatusMeta,
|
||||||
|
},
|
||||||
|
std::{collections::HashMap, str::FromStr},
|
||||||
|
};
|
||||||
|
use {
|
||||||
|
log::{log_enabled, trace, Level::Trace},
|
||||||
solana_bpf_loader_program::{
|
solana_bpf_loader_program::{
|
||||||
create_vm,
|
create_vm,
|
||||||
serialization::{deserialize_parameters, serialize_parameters},
|
serialization::{deserialize_parameters, serialize_parameters},
|
||||||
syscalls::register_syscalls,
|
syscalls::register_syscalls,
|
||||||
BpfError, ThisInstructionMeter,
|
BpfError, ThisInstructionMeter,
|
||||||
},
|
},
|
||||||
solana_bpf_rust_invoke::instructions::*,
|
solana_program_runtime::invoke_context::with_mock_invoke_context,
|
||||||
solana_bpf_rust_realloc::instructions::*,
|
|
||||||
solana_bpf_rust_realloc_invoke::instructions::*,
|
|
||||||
solana_ledger::token_balances::collect_token_balances,
|
|
||||||
solana_program_runtime::{
|
|
||||||
compute_budget::ComputeBudget, invoke_context::with_mock_invoke_context,
|
|
||||||
timings::ExecuteTimings,
|
|
||||||
},
|
|
||||||
solana_rbpf::{
|
solana_rbpf::{
|
||||||
elf::Executable,
|
elf::Executable,
|
||||||
static_analysis::Analysis,
|
static_analysis::Analysis,
|
||||||
|
@ -30,45 +65,24 @@ use {
|
||||||
vm::{Config, Tracer, VerifiedExecutable},
|
vm::{Config, Tracer, VerifiedExecutable},
|
||||||
},
|
},
|
||||||
solana_runtime::{
|
solana_runtime::{
|
||||||
bank::{
|
bank::Bank,
|
||||||
Bank, DurableNonceFee, TransactionBalancesSet, TransactionExecutionDetails,
|
|
||||||
TransactionExecutionResult, TransactionResults,
|
|
||||||
},
|
|
||||||
bank_client::BankClient,
|
bank_client::BankClient,
|
||||||
genesis_utils::{create_genesis_config, GenesisConfigInfo},
|
genesis_utils::{create_genesis_config, GenesisConfigInfo},
|
||||||
loader_utils::{
|
loader_utils::load_program,
|
||||||
load_buffer_account, load_program, load_upgradeable_program, set_upgrade_authority,
|
|
||||||
upgrade_program,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
solana_sdk::{
|
solana_sdk::{
|
||||||
account::{AccountSharedData, ReadableAccount, WritableAccount},
|
account::AccountSharedData,
|
||||||
account_utils::StateMut,
|
bpf_loader, bpf_loader_deprecated,
|
||||||
bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable,
|
|
||||||
client::SyncClient,
|
client::SyncClient,
|
||||||
clock::MAX_PROCESSING_AGE,
|
entrypoint::SUCCESS,
|
||||||
compute_budget::ComputeBudgetInstruction,
|
instruction::{AccountMeta, Instruction, InstructionError},
|
||||||
entrypoint::{MAX_PERMITTED_DATA_INCREASE, SUCCESS},
|
message::Message,
|
||||||
feature_set::FeatureSet,
|
|
||||||
fee::FeeStructure,
|
|
||||||
fee_calculator::FeeRateGovernor,
|
|
||||||
instruction::{AccountMeta, CompiledInstruction, Instruction, InstructionError},
|
|
||||||
loader_instruction,
|
|
||||||
message::{v0::LoadedAddresses, Message, SanitizedMessage},
|
|
||||||
pubkey::Pubkey,
|
pubkey::Pubkey,
|
||||||
rent::Rent,
|
signature::{Keypair, Signer},
|
||||||
signature::{keypair_from_seed, Keypair, Signer},
|
|
||||||
stake,
|
|
||||||
system_instruction::{self, MAX_PERMITTED_DATA_LENGTH},
|
|
||||||
system_program,
|
system_program,
|
||||||
sysvar::{self, clock, rent},
|
transaction::{SanitizedTransaction, Transaction, TransactionError},
|
||||||
transaction::{SanitizedTransaction, Transaction, TransactionError, VersionedTransaction},
|
|
||||||
},
|
},
|
||||||
solana_transaction_status::{
|
std::{env, fs::File, io::Read, path::PathBuf, sync::Arc},
|
||||||
ConfirmedTransactionWithStatusMeta, InnerInstructions, TransactionStatusMeta,
|
|
||||||
TransactionWithStatusMeta, VersionedTransactionWithStatusMeta,
|
|
||||||
},
|
|
||||||
std::{collections::HashMap, env, fs::File, io::Read, path::PathBuf, str::FromStr, sync::Arc},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// BPF program file extension
|
/// BPF program file extension
|
||||||
|
@ -130,6 +144,7 @@ fn write_bpf_program(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn load_upgradeable_bpf_program(
|
fn load_upgradeable_bpf_program(
|
||||||
bank_client: &BankClient,
|
bank_client: &BankClient,
|
||||||
payer_keypair: &Keypair,
|
payer_keypair: &Keypair,
|
||||||
|
@ -154,6 +169,7 @@ fn load_upgradeable_bpf_program(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn load_upgradeable_buffer(
|
fn load_upgradeable_buffer(
|
||||||
bank_client: &BankClient,
|
bank_client: &BankClient,
|
||||||
payer_keypair: &Keypair,
|
payer_keypair: &Keypair,
|
||||||
|
@ -176,6 +192,7 @@ fn load_upgradeable_buffer(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn upgrade_bpf_program(
|
fn upgrade_bpf_program(
|
||||||
bank_client: &BankClient,
|
bank_client: &BankClient,
|
||||||
payer_keypair: &Keypair,
|
payer_keypair: &Keypair,
|
||||||
|
@ -344,6 +361,7 @@ fn run_program(name: &str) -> u64 {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn process_transaction_and_record_inner(
|
fn process_transaction_and_record_inner(
|
||||||
bank: &Bank,
|
bank: &Bank,
|
||||||
tx: Transaction,
|
tx: Transaction,
|
||||||
|
@ -386,6 +404,7 @@ fn process_transaction_and_record_inner(
|
||||||
(result, inner_instructions, log_messages)
|
(result, inner_instructions, log_messages)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn execute_transactions(
|
fn execute_transactions(
|
||||||
bank: &Bank,
|
bank: &Bank,
|
||||||
txs: Vec<Transaction>,
|
txs: Vec<Transaction>,
|
||||||
|
@ -634,6 +653,7 @@ fn test_program_bpf_loader_deprecated() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_sol_alloc_free_no_longer_deployable() {
|
fn test_sol_alloc_free_no_longer_deployable() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -719,6 +739,7 @@ fn test_sol_alloc_free_no_longer_deployable() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_duplicate_accounts() {
|
fn test_program_bpf_duplicate_accounts() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -819,6 +840,7 @@ fn test_program_bpf_duplicate_accounts() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_error_handling() {
|
fn test_program_bpf_error_handling() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -975,6 +997,7 @@ fn test_return_data_and_log_data_syscall() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_invoke_sanity() {
|
fn test_program_bpf_invoke_sanity() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -1397,8 +1420,8 @@ fn test_program_bpf_invoke_sanity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_program_id_spoofing() {
|
fn test_program_bpf_program_id_spoofing() {
|
||||||
let GenesisConfigInfo {
|
let GenesisConfigInfo {
|
||||||
genesis_config,
|
genesis_config,
|
||||||
|
@ -1450,8 +1473,8 @@ fn test_program_bpf_program_id_spoofing() {
|
||||||
assert_eq!(0, bank.get_balance(&to_pubkey));
|
assert_eq!(0, bank.get_balance(&to_pubkey));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_caller_has_access_to_cpi_program() {
|
fn test_program_bpf_caller_has_access_to_cpi_program() {
|
||||||
let GenesisConfigInfo {
|
let GenesisConfigInfo {
|
||||||
genesis_config,
|
genesis_config,
|
||||||
|
@ -1488,8 +1511,8 @@ fn test_program_bpf_caller_has_access_to_cpi_program() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_ro_modify() {
|
fn test_program_bpf_ro_modify() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -1545,8 +1568,8 @@ fn test_program_bpf_ro_modify() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_call_depth() {
|
fn test_program_bpf_call_depth() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -1580,8 +1603,8 @@ fn test_program_bpf_call_depth() {
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_compute_budget() {
|
fn test_program_bpf_compute_budget() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -1678,8 +1701,8 @@ fn assert_instruction_count() {
|
||||||
assert!(passed);
|
assert!(passed);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "bpf_rust"))]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(any(feature = "bpf_rust"))]
|
||||||
fn test_program_bpf_instruction_introspection() {
|
fn test_program_bpf_instruction_introspection() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -1739,8 +1762,8 @@ fn test_program_bpf_instruction_introspection() {
|
||||||
assert!(bank.get_account(&sysvar::instructions::id()).is_none());
|
assert!(bank.get_account(&sysvar::instructions::id()).is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_test_use_latest_executor() {
|
fn test_program_bpf_test_use_latest_executor() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -1834,8 +1857,8 @@ fn test_program_bpf_test_use_latest_executor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[ignore] // Invoking BPF loaders from CPI not allowed
|
#[ignore] // Invoking BPF loaders from CPI not allowed
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_test_use_latest_executor2() {
|
fn test_program_bpf_test_use_latest_executor2() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -1964,8 +1987,8 @@ fn test_program_bpf_test_use_latest_executor2() {
|
||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_upgrade() {
|
fn test_program_bpf_upgrade() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2052,8 +2075,8 @@ fn test_program_bpf_upgrade() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_upgrade_and_invoke_in_same_tx() {
|
fn test_program_bpf_upgrade_and_invoke_in_same_tx() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2126,8 +2149,8 @@ fn test_program_bpf_upgrade_and_invoke_in_same_tx() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_invoke_upgradeable_via_cpi() {
|
fn test_program_bpf_invoke_upgradeable_via_cpi() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2297,8 +2320,8 @@ fn test_program_bpf_c_dup() {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_upgrade_via_cpi() {
|
fn test_program_bpf_upgrade_via_cpi() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2410,8 +2433,8 @@ fn test_program_bpf_upgrade_via_cpi() {
|
||||||
assert_ne!(programdata, original_programdata);
|
assert_ne!(programdata, original_programdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_upgrade_self_via_cpi() {
|
fn test_program_bpf_upgrade_self_via_cpi() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2499,8 +2522,8 @@ fn test_program_bpf_upgrade_self_via_cpi() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_set_upgrade_authority_via_cpi() {
|
fn test_program_bpf_set_upgrade_authority_via_cpi() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2587,8 +2610,8 @@ fn test_program_bpf_set_upgrade_authority_via_cpi() {
|
||||||
assert_eq!(Some(new_upgrade_authority_key), upgrade_authority_key);
|
assert_eq!(Some(new_upgrade_authority_key), upgrade_authority_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_upgradeable_locks() {
|
fn test_program_upgradeable_locks() {
|
||||||
fn setup_program_upgradeable_locks(
|
fn setup_program_upgradeable_locks(
|
||||||
payer_keypair: &Keypair,
|
payer_keypair: &Keypair,
|
||||||
|
@ -2719,8 +2742,8 @@ fn test_program_upgradeable_locks() {
|
||||||
assert_eq!(results2[1], Err(TransactionError::AccountInUse));
|
assert_eq!(results2[1], Err(TransactionError::AccountInUse));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_finalize() {
|
fn test_program_bpf_finalize() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2781,8 +2804,8 @@ fn test_program_bpf_finalize() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_ro_account_modify() {
|
fn test_program_bpf_ro_account_modify() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -2843,8 +2866,8 @@ fn test_program_bpf_ro_account_modify() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_realloc() {
|
fn test_program_bpf_realloc() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
@ -3843,8 +3866,8 @@ fn test_get_minimum_delegation() {
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "bpf_rust")]
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(feature = "bpf_rust")]
|
||||||
fn test_program_bpf_inner_instruction_alignment_checks() {
|
fn test_program_bpf_inner_instruction_alignment_checks() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue