Conversation
|
|
| }*/ | ||
|
|
||
| pub fn reset_cursor(&self, top: Address) { | ||
| // top might be Address::ZERO |
There was a problem hiding this comment.
This is where I think Option<NonZeroAddress> can be useful. See #1223
| fn next(&mut self) -> Option<<Self as Iterator>::Item> { | ||
| while self.cursor < self.end { | ||
| if !self.cursor.is_aligned_to(ObjectReference::ALIGNMENT) { | ||
| self.cursor += VM::MIN_ALIGNMENT; |
There was a problem hiding this comment.
Currently ObjectReference is required to be aligned to ObjectReference::ALIGNMENT. So even if VM::MIN_ALIGNMENT is smaller than ObjectReference::ALIGNMENT, VO bits can only be set at addresses which are multiples of ObjectReference::ALIGNMENT. I think the algorithm here is wrong (or just outdated). It is pointless to increment the cursor by VM::MIN_ALIGNMENT. It should simply align the cursor up to the next multiple of ObjectReference::ALIGNMENT. And I wonder whether find_last_non_zero_bit_in_metadata_bytes could be more efficient (needs to search forward instead of backward).
Conflict resolution and fixes needed after the merge: - Adopt master's disable_collection()/enable_collection() API in place of the removed MockVM::is_collection_enabled. - Add GLOBAL_FIELD_UNLOG_BIT_SPEC to both mock metadata layouts, and keep the mark bit on the side in the header layout (required by LXR). - Make header metadata the default when mock_test_side_metadata is not set, so `--features mock_test` alone builds (used by ci-build.sh), and reject enabling both layouts. - Drop the mock-only side metadata base address; master computes it dynamically. - Run LXR mock tests with header metadata in ci-test.sh, as LXR requires in-header forwarding bits. - Port new master mock tests to this branch's MockVM: use fixture.mutator(), pass `force` to handle_user_collection_request, wrap mock_test_shutdown in with_mockvm, and stop the OOM-unwind test from spawning GC workers. - Use inspect_err now that MSRV is 1.84. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Resolve conflicts in the two allocate_no_gc_oom_on_acquire mock tests: keep this branch's fixture.mutator() API, and take master's page-sized allocation request. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This PR made some changes to
MockVMto allow us to run GC in the tests.mock_test_side_metadataandmock_test_header_metadata. We only test withmock_test_side_metadata(as some plans don't run with header metadata).MockVMinstance (otherwise it will cause deadlock when we reentryMockVM)MMTKinstance for mock tests.mock_apito create a mutator. This registers the mutator to mock VM, and can be blocked for GC.