Revert "Revert "Fix more BPF alignment issues on arm64""
This reverts commit bdaac86f84
.
This commit is contained in:
committed by
Tyera Eulberg
parent
58e46e107c
commit
7621fa3c25
@@ -3,15 +3,12 @@ use solana_rbpf::{aligned_memory::AlignedMemory, ebpf::HOST_ALIGN};
|
||||
use solana_sdk::{
|
||||
account::{ReadableAccount, WritableAccount},
|
||||
bpf_loader_deprecated,
|
||||
entrypoint::{MAX_PERMITTED_DATA_INCREASE, PARAMETER_ALIGNMENT},
|
||||
entrypoint::{BPF_ALIGN_OF_U128, MAX_PERMITTED_DATA_INCREASE},
|
||||
instruction::InstructionError,
|
||||
keyed_account::KeyedAccount,
|
||||
pubkey::Pubkey,
|
||||
};
|
||||
use std::{
|
||||
io::prelude::*,
|
||||
mem::{align_of, size_of},
|
||||
};
|
||||
use std::{io::prelude::*, mem::size_of};
|
||||
|
||||
/// Look for a duplicate account and return its position if found
|
||||
pub fn is_dup(accounts: &[KeyedAccount], keyed_account: &KeyedAccount) -> (bool, usize) {
|
||||
@@ -168,7 +165,7 @@ pub fn get_serialized_account_size_aligned(
|
||||
+ size_of::<u64>() // data len
|
||||
+ data_len
|
||||
+ MAX_PERMITTED_DATA_INCREASE
|
||||
+ (data_len as *const u8).align_offset(align_of::<u128>())
|
||||
+ (data_len as *const u8).align_offset(BPF_ALIGN_OF_U128)
|
||||
+ size_of::<u64>(), // rent epoch
|
||||
)
|
||||
}
|
||||
@@ -227,7 +224,7 @@ pub fn serialize_parameters_aligned(
|
||||
.map_err(|_| InstructionError::InvalidArgument)?;
|
||||
v.resize(
|
||||
MAX_PERMITTED_DATA_INCREASE
|
||||
+ (v.write_index() as *const u8).align_offset(PARAMETER_ALIGNMENT),
|
||||
+ (v.write_index() as *const u8).align_offset(BPF_ALIGN_OF_U128),
|
||||
0,
|
||||
)
|
||||
.map_err(|_| InstructionError::InvalidArgument)?;
|
||||
@@ -277,7 +274,7 @@ pub fn deserialize_parameters_aligned(
|
||||
|
||||
account.set_data_from_slice(&buffer[start..data_end]);
|
||||
start += pre_len + MAX_PERMITTED_DATA_INCREASE; // data
|
||||
start += (start as *const u8).align_offset(align_of::<u128>());
|
||||
start += (start as *const u8).align_offset(BPF_ALIGN_OF_U128);
|
||||
start += size_of::<u64>(); // rent_epoch
|
||||
}
|
||||
}
|
||||
@@ -406,7 +403,7 @@ mod tests {
|
||||
assert_eq!(&program_id, de_program_id);
|
||||
assert_eq!(instruction_data, de_instruction_data);
|
||||
assert_eq!(
|
||||
(&de_instruction_data[0] as *const u8).align_offset(align_of::<u128>()),
|
||||
(&de_instruction_data[0] as *const u8).align_offset(BPF_ALIGN_OF_U128),
|
||||
0
|
||||
);
|
||||
for ((account, account_info), key) in accounts.iter().zip(de_accounts).zip(keys.clone()) {
|
||||
@@ -419,7 +416,7 @@ mod tests {
|
||||
assert_eq!(account.rent_epoch(), account_info.rent_epoch);
|
||||
|
||||
assert_eq!(
|
||||
(*account_info.lamports.borrow() as *const u64).align_offset(align_of::<u64>()),
|
||||
(*account_info.lamports.borrow() as *const u64).align_offset(BPF_ALIGN_OF_U128),
|
||||
0
|
||||
);
|
||||
assert_eq!(
|
||||
@@ -427,7 +424,7 @@ mod tests {
|
||||
.data
|
||||
.borrow()
|
||||
.as_ptr()
|
||||
.align_offset(align_of::<u128>()),
|
||||
.align_offset(BPF_ALIGN_OF_U128),
|
||||
0
|
||||
);
|
||||
}
|
||||
|
@@ -16,7 +16,7 @@ use solana_sdk::{
|
||||
bpf_loader, bpf_loader_deprecated,
|
||||
bpf_loader_upgradeable::{self, UpgradeableLoaderState},
|
||||
clock::Clock,
|
||||
entrypoint::{MAX_PERMITTED_DATA_INCREASE, SUCCESS},
|
||||
entrypoint::{BPF_ALIGN_OF_U128, MAX_PERMITTED_DATA_INCREASE, SUCCESS},
|
||||
epoch_schedule::EpochSchedule,
|
||||
feature_set::{
|
||||
allow_native_ids, check_seed_length, close_upgradeable_program_accounts, cpi_data_cost,
|
||||
@@ -825,7 +825,7 @@ impl SyscallObject<BpfError> for SyscallAllocFree {
|
||||
result: &mut Result<u64, EbpfError<BpfError>>,
|
||||
) {
|
||||
let align = if self.aligned {
|
||||
align_of::<u128>()
|
||||
BPF_ALIGN_OF_U128
|
||||
} else {
|
||||
align_of::<u8>()
|
||||
};
|
||||
|
Reference in New Issue
Block a user