mmtk/util/metadata/side_metadata/
mod.rs1pub(crate) mod helpers;
5#[cfg(target_pointer_width = "32")]
6mod helpers_32;
7mod layout;
8
9mod global;
10pub(crate) mod ranges;
11mod sanity;
12mod side_metadata_tests;
13pub(crate) mod spec_defs;
14
15pub use global::*;
16pub use layout::*;
17
18use crate::util::options::Options;
19use crate::vm::ObjectModel;
20use crate::vm::VMBinding;
21
22pub fn initialize_side_metadata<VM: VMBinding>(options: &Options) {
24 let vm_side_metadata_specs = super::extract_side_metadata(&[
25 *VM::VMObjectModel::GLOBAL_LOG_BIT_SPEC,
26 *VM::VMObjectModel::LOCAL_FORWARDING_POINTER_SPEC,
27 *VM::VMObjectModel::LOCAL_FORWARDING_BITS_SPEC,
28 *VM::VMObjectModel::LOCAL_MARK_BIT_SPEC,
29 #[cfg(feature = "object_pinning")]
30 *VM::VMObjectModel::LOCAL_PINNING_BIT_SPEC,
31 *VM::VMObjectModel::LOCAL_LOS_MARK_NURSERY_SPEC,
32 ]);
33 debug!(
34 "initialize_side_metadata(): collected {} VM side metadata specs",
35 vm_side_metadata_specs.len()
36 );
37 for spec in &vm_side_metadata_specs {
38 debug!(" VM side metadata spec: {:?}", spec);
39 }
40 set_vm_side_metadata_specs(&vm_side_metadata_specs);
41 initialize_side_metadata_base(
42 *options.side_metadata_base_address,
43 options.transparent_hugepages_as_huge_page_support(),
44 );
45}
46
47#[cfg(test)]
48pub(crate) fn core_test_initialize_side_metadata() {
49 use crate::util::os::HugePageSupport;
50 use crate::util::Address;
51
52 if is_side_metadata_initialized() {
53 return;
54 }
55
56 set_vm_side_metadata_specs(&[]);
57 initialize_side_metadata_base(Address::ZERO, HugePageSupport::No);
58}
59
60#[allow(unused_imports)]
62pub(crate) use helpers::*;
63#[cfg(target_pointer_width = "32")]
64#[allow(unused_imports)]
65pub(crate) use helpers_32::*;
66pub(crate) use sanity::SideMetadataSanity;