Skip to content

Commit e8fc89a

Browse files
authored
chore: Remove wasm64 feature flag (#6354)
The wasm64 feature has been enabled for a long time and all tests etc already expect it to be enabled. Removing the flag as it's not needed anymore. The bulk of changes are in tests/fuzzers to remove enabling the flag in the config.
1 parent a7aedc3 commit e8fc89a

File tree

23 files changed

+106
-225
lines changed

23 files changed

+106
-225
lines changed

rs/config/src/embedders.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,6 @@ pub struct FeatureFlags {
124124
/// If this flag is enabled, then the output of the `debug_print` system-api
125125
/// call will be skipped based on heuristics.
126126
pub rate_limiting_of_debug_prints: FlagStatus,
127-
/// Indicates whether the support for 64 bit main memory is enabled
128-
pub wasm64: FlagStatus,
129127
/// Collect a backtrace from the canister when it panics.
130128
pub canister_backtrace: FlagStatus,
131129
/// If this flag is enabled, then the environment variables are supported.
@@ -136,7 +134,6 @@ impl FeatureFlags {
136134
const fn const_default() -> Self {
137135
Self {
138136
rate_limiting_of_debug_prints: FlagStatus::Enabled,
139-
wasm64: FlagStatus::Enabled,
140137
canister_backtrace: FlagStatus::Enabled,
141138
environment_variables: FlagStatus::Disabled,
142139
}

rs/drun/src/main.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ async fn drun_main() -> Result<(), String> {
6161
hypervisor_config.rate_limiting_of_heap_delta = FlagStatus::Disabled;
6262
hypervisor_config.rate_limiting_of_instructions = FlagStatus::Disabled;
6363
// For testing enhanced orthogonal persistence in Motoko,
64-
// enable Wasm Memory64 and re-configure the main memory capacity.
65-
hypervisor_config.embedders_config.feature_flags.wasm64 = FlagStatus::Enabled;
64+
// re-configure the main memory capacity.
6665
hypervisor_config.embedders_config.max_wasm64_memory_size = MAIN_MEMORY_CAPACITY;
6766
// Disable trap backtrace in `drun` to have less implementation-specific test outputs.
6867
hypervisor_config

rs/embedders/benches/embedders_bench/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ fn initialize_execution_test(
5656
.with_slice_instruction_limit(LARGE_INSTRUCTION_LIMIT);
5757

5858
if is_wasm64 {
59-
test = test.with_wasm64();
6059
// Set memory size to 8 GiB for Wasm64.
6160
test = test.with_max_wasm64_memory_size(NumBytes::from(8 * 1024 * 1024 * 1024));
6261
}

rs/embedders/fuzz/src/compile.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
use crate::ic_wasm::{generate_exports, ic_embedders_config, ic_wasm_config};
1+
use crate::ic_wasm::{generate_exports, ic_wasm_config};
22
use arbitrary::{Arbitrary, Result, Unstructured};
3+
use ic_config::embedders::Config as EmbeddersConfig;
34
use ic_embedders::{wasm_utils::compile, WasmtimeEmbedder};
45
use ic_logger::replica_logger::no_op_logger;
56
use ic_wasm_types::BinaryEncodedWasm;
@@ -10,17 +11,15 @@ use wasm_smith::{Config, MemoryOffsetChoices, Module};
1011
#[derive(Debug)]
1112
pub struct MaybeInvalidModule {
1213
pub module: Module,
13-
pub memory64_enabled: bool,
1414
}
1515

1616
const MAX_PARALLEL_EXECUTIONS: usize = 4;
1717

1818
impl<'a> Arbitrary<'a> for MaybeInvalidModule {
1919
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
2020
let mut config = if u.ratio(1, 2)? {
21-
let memory64_enabled = u.ratio(2, 3)?;
22-
let mut config = ic_wasm_config(ic_embedders_config(memory64_enabled));
23-
config.exports = generate_exports(ic_embedders_config(memory64_enabled), u)?;
21+
let mut config = ic_wasm_config(EmbeddersConfig::default());
22+
config.exports = generate_exports(EmbeddersConfig::default(), u)?;
2423
config.min_data_segments = 2;
2524
config.max_data_segments = 10;
2625
config
@@ -31,7 +30,6 @@ impl<'a> Arbitrary<'a> for MaybeInvalidModule {
3130
config.memory_offset_choices = MemoryOffsetChoices(40, 20, 40);
3231
Ok(MaybeInvalidModule {
3332
module: Module::new(config.clone(), u)?,
34-
memory64_enabled: config.memory64_enabled,
3533
})
3634
}
3735
}
@@ -46,24 +44,21 @@ pub fn run_fuzzer(bytes: &[u8]) {
4644
// 33% - Wasm with arbitrary wasm-smith config + maybe invalid functions
4745
// 33% - IC compliant wasm + maybe invalid functions
4846

49-
// Only used w/ random bytes
50-
let memory64_enabled = u.ratio(1, 2).unwrap_or(false);
51-
5247
let wasm = if u.ratio(1, 3).unwrap_or(false)
5348
|| bytes.len() < <MaybeInvalidModule as Arbitrary>::size_hint(0).0
5449
{
55-
config = ic_embedders_config(memory64_enabled);
50+
config = EmbeddersConfig::default();
5651
raw_wasm_bytes(bytes)
5752
} else {
5853
let data = <MaybeInvalidModule as Arbitrary>::arbitrary_take_rest(u);
5954

6055
match data {
6156
Ok(data) => {
62-
config = ic_embedders_config(data.memory64_enabled);
57+
config = EmbeddersConfig::default();
6358
data.module.to_bytes()
6459
}
6560
Err(_) => {
66-
config = ic_embedders_config(memory64_enabled);
61+
config = EmbeddersConfig::default();
6762
raw_wasm_bytes(bytes)
6863
}
6964
}

rs/embedders/fuzz/src/differential.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use crate::ic_wasm::{ic_embedders_config, ICWasmModule};
1+
use crate::ic_wasm::ICWasmModule;
2+
use ic_config::embedders::Config as EmbeddersConfig;
23
use ic_embedders::InstanceRunResult;
34
use ic_interfaces::execution_environment::HypervisorResult;
45
use ic_interfaces::execution_environment::SystemApi;
@@ -20,7 +21,6 @@ type DeterministicExecutionResult = Vec<(
2021
pub fn run_fuzzer(module: ICWasmModule) {
2122
let wasm = module.module.to_bytes();
2223
let wasm_methods: BTreeSet<WasmMethod> = module.exported_functions;
23-
let memory64_enabled = module.config.memory64_enabled;
2424

2525
if wasm_methods.is_empty() {
2626
return;
@@ -41,7 +41,7 @@ pub fn run_fuzzer(module: ICWasmModule) {
4141
let wasm = wasm.clone();
4242
let wasm_methods = wasm_methods.clone();
4343

44-
async move { execute_wasm(wasm, wasm_methods, memory64_enabled) }
44+
async move { execute_wasm(wasm, wasm_methods) }
4545
})
4646
})
4747
.collect::<Vec<_>>();
@@ -121,13 +121,9 @@ fn equal(first: DeterministicExecutionResult, second: DeterministicExecutionResu
121121
}
122122

123123
#[inline(always)]
124-
fn execute_wasm(
125-
wasm: Vec<u8>,
126-
wasm_methods: BTreeSet<WasmMethod>,
127-
memory64_enabled: bool,
128-
) -> DeterministicExecutionResult {
124+
fn execute_wasm(wasm: Vec<u8>, wasm_methods: BTreeSet<WasmMethod>) -> DeterministicExecutionResult {
129125
let mut result = vec![];
130-
let config = ic_embedders_config(memory64_enabled);
126+
let config = EmbeddersConfig::default();
131127
let instance_result = WasmtimeInstanceBuilder::new()
132128
.with_wasm(wasm)
133129
.with_config(config)

rs/embedders/fuzz/src/ic_wasm.rs

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::imports::{system_api_imports, SystemApiImportStore};
22
use crate::special_int::SpecialInt;
33
use arbitrary::{Arbitrary, Result, Unstructured};
44
use ic_config::embedders::Config as EmbeddersConfig;
5-
use ic_config::flag_status::FlagStatus;
65
use ic_embedders::wasm_utils::validation::{
76
RESERVED_SYMBOLS, WASM_FUNCTION_SIZE_LIMIT, WASM_VALID_SYSTEM_FUNCTIONS,
87
};
@@ -22,9 +21,9 @@ use wasmparser::*;
2221

2322
lazy_static! {
2423
static ref SYSTEM_API_IMPORTS_WASM32: SystemApiImportStore =
25-
system_api_imports(ic_embedders_config(false));
24+
system_api_imports(EmbeddersConfig::default());
2625
static ref SYSTEM_API_IMPORTS_WASM64: SystemApiImportStore =
27-
system_api_imports(ic_embedders_config(true));
26+
system_api_imports(EmbeddersConfig::default());
2827
}
2928

3029
const CANISTER_EXPORT_FUNCTION_PREFIX: &[&str] = &[
@@ -48,8 +47,7 @@ pub struct ICWasmModule {
4847

4948
impl<'a> Arbitrary<'a> for ICWasmModule {
5049
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
51-
let memory64_enabled = u.ratio(2, 3)?;
52-
let embedder_config = ic_embedders_config(memory64_enabled);
50+
let embedder_config = EmbeddersConfig::default();
5351
let exports = generate_exports(embedder_config.clone(), u)?;
5452
let mut config = ic_wasm_config(embedder_config);
5553
config.exports = exports;
@@ -249,7 +247,6 @@ impl ICWasmModule {
249247
}
250248

251249
pub fn ic_wasm_config(embedder_config: EmbeddersConfig) -> Config {
252-
let memory64_enabled = embedder_config.feature_flags.wasm64 == FlagStatus::Enabled;
253250
Config {
254251
min_funcs: 10,
255252
min_exports: 10,
@@ -266,32 +263,18 @@ pub fn ic_wasm_config(embedder_config: EmbeddersConfig) -> Config {
266263
bulk_memory_enabled: true,
267264
reference_types_enabled: true,
268265
simd_enabled: true,
269-
memory64_enabled,
266+
memory64_enabled: true,
270267

271268
threads_enabled: false,
272269
relaxed_simd_enabled: false,
273270
canonicalize_nans: false,
274271
exceptions_enabled: false,
275272

276-
available_imports: Some(if memory64_enabled {
277-
SYSTEM_API_IMPORTS_WASM64.module.to_vec()
278-
} else {
279-
SYSTEM_API_IMPORTS_WASM32.module.to_vec()
280-
}),
273+
available_imports: Some(SYSTEM_API_IMPORTS_WASM64.module.to_vec()),
281274
..Default::default()
282275
}
283276
}
284277

285-
pub fn ic_embedders_config(memory64_enabled: bool) -> EmbeddersConfig {
286-
let mut config = EmbeddersConfig::default();
287-
if memory64_enabled {
288-
config.feature_flags.wasm64 = FlagStatus::Enabled;
289-
} else {
290-
config.feature_flags.wasm64 = FlagStatus::Disabled;
291-
}
292-
config
293-
}
294-
295278
fn get_persisted_global(g: wasmparser::Global) -> Option<Global> {
296279
match (
297280
g.ty.content_type,

rs/embedders/fuzz/src/imports.rs

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::wasm_executor::{
44
get_execution_parameters, get_system_state, MAX_SUBNET_AVAILABLE_MEMORY,
55
};
66
use ic_config::embedders::Config as EmbeddersConfig;
7-
use ic_config::flag_status::FlagStatus;
87
use ic_embedders::{
98
wasm_utils::instrumentation::WasmMemoryType,
109
wasmtime_embedder::{
@@ -64,26 +63,13 @@ pub(crate) fn system_api_imports(config: EmbeddersConfig) -> SystemApiImportStor
6463
);
6564
let mut linker: wasmtime::Linker<StoreData> = wasmtime::Linker::new(&engine);
6665

67-
match config.feature_flags.wasm64 {
68-
FlagStatus::Enabled => {
69-
linker::syscalls::<u64>(
70-
&mut linker,
71-
config.feature_flags,
72-
config.stable_memory_dirty_page_limit,
73-
config.stable_memory_accessed_page_limit,
74-
WasmMemoryType::Wasm64,
75-
);
76-
}
77-
FlagStatus::Disabled => {
78-
linker::syscalls::<u32>(
79-
&mut linker,
80-
config.feature_flags,
81-
config.stable_memory_dirty_page_limit,
82-
config.stable_memory_accessed_page_limit,
83-
WasmMemoryType::Wasm32,
84-
);
85-
}
86-
}
66+
linker::syscalls::<u64>(
67+
&mut linker,
68+
config.feature_flags,
69+
config.stable_memory_dirty_page_limit,
70+
config.stable_memory_accessed_page_limit,
71+
WasmMemoryType::Wasm64,
72+
);
8773

8874
// to avoid store move
8975
let mut system_api_imports: Vec<(&str, &str, wasmtime::Func)> = linker

rs/embedders/fuzz/src/wasm_executor.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
use crate::ic_wasm::{ic_embedders_config, ICWasmModule};
1+
use crate::ic_wasm::ICWasmModule;
22
use ic_config::{
3-
execution_environment::Config as HypervisorConfig, flag_status::FlagStatus,
4-
subnet_config::SchedulerConfig,
3+
embedders::Config as EmbeddersConfig, execution_environment::Config as HypervisorConfig,
4+
flag_status::FlagStatus, subnet_config::SchedulerConfig,
55
};
66
use ic_cycles_account_manager::ResourceSaturation;
77
use ic_embedders::{
@@ -59,7 +59,7 @@ pub fn run_fuzzer(module: ICWasmModule) {
5959
let wasm_methods: BTreeSet<WasmMethod> = module.exported_functions;
6060

6161
let log = no_op_logger();
62-
let embedder_config = ic_embedders_config(module.config.memory64_enabled);
62+
let embedder_config = EmbeddersConfig::default();
6363
let metrics_registry = MetricsRegistry::new();
6464
let fd_factory = Arc::new(TestPageAllocatorFileDescriptorImpl::new());
6565

rs/embedders/fuzz/src/wasmtime.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use crate::ic_wasm::{ic_embedders_config, ICWasmModule};
1+
use crate::ic_wasm::ICWasmModule;
2+
use ic_config::embedders::Config as EmbeddersConfig;
23
use ic_test_utilities_embedders::WasmtimeInstanceBuilder;
34
use ic_types::methods::{FuncRef, WasmMethod};
45
use libfuzzer_sys::Corpus;
@@ -9,7 +10,7 @@ pub fn run_fuzzer(module: ICWasmModule) -> Corpus {
910
let wasm = module.module.to_bytes();
1011
let wasm_methods: BTreeSet<WasmMethod> = module.exported_functions;
1112

12-
let config = ic_embedders_config(module.config.memory64_enabled);
13+
let config = EmbeddersConfig::default();
1314

1415
let instance_result = WasmtimeInstanceBuilder::new()
1516
.with_wasm(wasm)

rs/embedders/fuzz/src/ws2wasm.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
use arbitrary::{Arbitrary, Unstructured};
22
use clap::Parser;
3+
use ic_config::embedders::Config as EmbeddersConfig;
34
use ic_logger::replica_logger::no_op_logger;
45
use std::fs::File;
56
use std::io;
67
use std::io::prelude::*;
78
use std::io::BufReader;
89
use std::path::PathBuf;
910
use std::sync::Arc;
10-
use wasm_fuzzers::ic_wasm::{ic_embedders_config, ICWasmModule};
11+
use wasm_fuzzers::ic_wasm::ICWasmModule;
1112
use wasmprinter::print_bytes;
1213

1314
use ic_embedders::{
@@ -56,7 +57,7 @@ fn main() -> io::Result<()> {
5657

5758
let instrumentation = CommandLineArgs::parse().inst;
5859
if instrumentation {
59-
let config = ic_embedders_config(module.config.memory64_enabled);
60+
let config = EmbeddersConfig::default();
6061
let decoded = decode_wasm(config.wasm_max_size, Arc::new(wasm))
6162
.expect("failed to decode canister module");
6263
let embedder = WasmtimeEmbedder::new(config, no_op_logger());

0 commit comments

Comments
 (0)