diff --git a/mmtk/Cargo.lock b/mmtk/Cargo.lock index 7eaf0dd..8e4d462 100644 --- a/mmtk/Cargo.lock +++ b/mmtk/Cargo.lock @@ -437,8 +437,8 @@ dependencies = [ [[package]] name = "mmtk" -version = "0.27.0" -source = "git+https://github.com/mmtk/mmtk-core.git?rev=45cdf31055b1b6a629bdb8032adaa6dd5a8e32b9#45cdf31055b1b6a629bdb8032adaa6dd5a8e32b9" +version = "0.30.0" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=ec745353a8de72b645613e0fef3ab7f5f1ad9bd1#ec745353a8de72b645613e0fef3ab7f5f1ad9bd1" dependencies = [ "atomic", "atomic-traits", @@ -473,8 +473,8 @@ dependencies = [ [[package]] name = "mmtk-macros" -version = "0.27.0" -source = "git+https://github.com/mmtk/mmtk-core.git?rev=45cdf31055b1b6a629bdb8032adaa6dd5a8e32b9#45cdf31055b1b6a629bdb8032adaa6dd5a8e32b9" +version = "0.30.0" +source = "git+https://github.com/mmtk/mmtk-core.git?rev=ec745353a8de72b645613e0fef3ab7f5f1ad9bd1#ec745353a8de72b645613e0fef3ab7f5f1ad9bd1" dependencies = [ "proc-macro-error", "proc-macro2", diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index eb09c04..6f764ff 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -27,7 +27,7 @@ log = "*" # - change branch # - change repo name # But other changes including adding/removing whitespaces in commented lines may break the CI. -mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "45cdf31055b1b6a629bdb8032adaa6dd5a8e32b9" } +mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "ec745353a8de72b645613e0fef3ab7f5f1ad9bd1" } # Uncomment the following and fix the path to mmtk-core to build locally # mmtk = { path = "../repos/mmtk-core" } diff --git a/mmtk/rust-toolchain b/mmtk/rust-toolchain index 79e15fd..6b4de0a 100644 --- a/mmtk/rust-toolchain +++ b/mmtk/rust-toolchain @@ -1 +1 @@ -1.77.0 +1.83.0 diff --git a/mmtk/src/api.rs b/mmtk/src/api.rs index abce066..808089f 100644 --- a/mmtk/src/api.rs +++ b/mmtk/src/api.rs @@ -129,12 +129,6 @@ pub extern "C" fn total_bytes(mmtk: &mut MMTK) -> usize { memory_manager::total_bytes(&*mmtk) } -#[no_mangle] -#[cfg(feature = "sanity")] -pub extern "C" fn scan_region(mmtk: &mut MMTK) { - memory_manager::scan_region(mmtk); -} - #[no_mangle] pub extern "C" fn is_live_object(object: ObjectReference) -> bool { memory_manager::is_live_object(object) diff --git a/mmtk/src/object_archive.rs b/mmtk/src/object_archive.rs index 45085e7..0d4266b 100644 --- a/mmtk/src/object_archive.rs +++ b/mmtk/src/object_archive.rs @@ -17,19 +17,26 @@ pub extern "C" fn tph_archive_delete(arch: *mut c_void) { }; } +fn with_archive_raw_pointer(arch: *mut c_void, f: F) -> R +where + F: Fn(&mut ObjectArchive) -> R, +{ + let mut arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; + let res = f(&mut arch); + let _ = Box::into_raw(arch); + res +} + #[no_mangle] pub extern "C" fn tph_archive_iter_reset(arch: *mut c_void) { - let mut arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; - arch.reset_iterator(); - Box::into_raw(arch); + with_archive_raw_pointer(arch, |arch| { + arch.reset_iterator(); + }) } #[no_mangle] pub extern "C" fn tph_archive_iter_next(arch: *mut c_void) -> *mut c_void { - let mut arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; - let res = arch.next_object(); - Box::into_raw(arch); - res.to_mut_ptr() + with_archive_raw_pointer(arch, |arch| arch.next_object().to_mut_ptr()) } #[no_mangle] @@ -37,10 +44,10 @@ pub extern "C" fn tph_archive_inner_to_obj( arch: *mut c_void, inner_ptr: *mut c_void, ) -> *mut c_void { - let arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; - let res = arch.inner_addr_to_object(Address::from_mut_ptr(inner_ptr)); - Box::into_raw(arch); - res.to_mut_ptr() + with_archive_raw_pointer(arch, |arch| { + arch.inner_addr_to_object(Address::from_mut_ptr(inner_ptr)) + .to_mut_ptr() + }) } #[no_mangle] @@ -48,18 +55,17 @@ pub extern "C" fn tph_archive_obj_to_isolate( arch: *mut c_void, obj_ptr: *mut c_void, ) -> *mut c_void { - let arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; - let res = arch.object_to_isolate(Address::from_mut_ptr(obj_ptr)); - Box::into_raw(arch); - res.to_mut_ptr() + with_archive_raw_pointer(arch, |arch| { + arch.object_to_isolate(Address::from_mut_ptr(obj_ptr)) + .to_mut_ptr() + }) } #[no_mangle] pub extern "C" fn tph_archive_obj_to_space(arch: *mut c_void, obj_ptr: *mut c_void) -> u8 { - let arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; - let res = arch.object_to_space(Address::from_mut_ptr(obj_ptr)); - Box::into_raw(arch); - res + with_archive_raw_pointer(arch, |arch| { + arch.object_to_space(Address::from_mut_ptr(obj_ptr)) + }) } #[no_mangle] @@ -69,19 +75,19 @@ pub extern "C" fn tph_archive_insert( iso_ptr: *mut c_void, space: u8, ) { - let obj_addr = Address::from_mut_ptr(obj_ptr); - let iso_addr = Address::from_mut_ptr(iso_ptr); - let mut arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; - arch.insert_object(obj_addr, iso_addr, space); - Box::into_raw(arch); + with_archive_raw_pointer(arch, |arch| { + let obj_addr = Address::from_mut_ptr(obj_ptr); + let iso_addr = Address::from_mut_ptr(iso_ptr); + arch.insert_object(obj_addr, iso_addr, space); + }) } #[no_mangle] pub extern "C" fn tph_archive_remove(arch: *mut c_void, obj_ptr: *mut c_void) { - let obj_addr = Address::from_mut_ptr(obj_ptr); - let mut arch = unsafe { Box::from_raw(arch as *mut ObjectArchive) }; - arch.remove_object(obj_addr); - Box::into_raw(arch); + with_archive_raw_pointer(arch, |arch| { + let obj_addr = Address::from_mut_ptr(obj_ptr); + arch.remove_object(obj_addr); + }) } pub struct ObjectArchive {