Skip to content

Commit 21a782a

Browse files
authored
Merge pull request #1 from caizixian/jdk-20+15-mmtk-zero
Zero interpreter support + merge mmtk-openjdk 0.15
2 parents f309a4e + 92a627a commit 21a782a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+621
-367
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
0.15.0 (2022-09-20)
2+
===
3+
4+
* Add MMTk build info to `-Xinternalversion`.
5+
* Implement `arraycopy` barriers.
6+
* Update to mmtk-core 0.15.0.
7+
18
0.14.1 (2022-08-10)
29
===
310

mmtk/Cargo.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mmtk/Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mmtk_openjdk"
3-
version = "0.14.1"
3+
version = "0.15.0"
44
authors = [" <>"]
55
rust-version = "1.57.0"
66
build = "build.rs"
@@ -29,7 +29,7 @@ once_cell = "1.10.0"
2929
# - change branch
3030
# - change repo name
3131
# But other changes including adding/removing whitespaces in commented lines may break the CI.
32-
mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "4ae23b1dc0e14f62c196c12c93818e00e9de7cc5" }
32+
mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "c5d62c4354fe091b7bc4d3bc39d570b7986b93de" }
3333
# Uncomment the following to build locally
3434
# mmtk = { path = "../repos/mmtk-core" }
3535

@@ -58,3 +58,5 @@ gencopy = []
5858
marksweep = []
5959
pageprotect = []
6060
immix = []
61+
62+
jfr = []

mmtk/src/abi.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ pub struct Klass {
6666
pub class_loader_data: OpaquePointer, // ClassLoaderData*
6767
pub vtable_len: i32,
6868
pub access_flags: i32, // AccessFlags
69+
#[cfg(feature = "jfr")]
6970
pub trace_id: u64, // JFR_ONLY(traceid _trace_id;)
7071
pub shared_class_flags: u16,
7172
pub archived_mirror_index: i32,

mmtk/src/api.rs

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use mmtk::plan::BarrierSelector;
99
use mmtk::scheduler::GCController;
1010
use mmtk::scheduler::GCWorker;
1111
use mmtk::util::alloc::AllocatorSelector;
12+
use mmtk::util::constants::LOG_BYTES_IN_ADDRESS;
1213
use mmtk::util::opaque_pointer::*;
1314
use mmtk::util::{Address, ObjectReference};
1415
use mmtk::AllocationSemantics;
@@ -308,21 +309,71 @@ pub extern "C" fn executable() -> bool {
308309
true
309310
}
310311

312+
/// Full pre barrier
311313
#[no_mangle]
312-
pub extern "C" fn post_write_barrier(mutator: &'static mut Mutator<OpenJDK>, obj: ObjectReference) {
314+
pub extern "C" fn mmtk_object_reference_write_pre(
315+
mutator: &'static mut Mutator<OpenJDK>,
316+
src: ObjectReference,
317+
slot: Address,
318+
target: ObjectReference,
319+
) {
320+
mutator
321+
.barrier()
322+
.object_reference_write_pre(src, slot, target);
323+
}
324+
325+
/// Full post barrier
326+
#[no_mangle]
327+
pub extern "C" fn mmtk_object_reference_write_post(
328+
mutator: &'static mut Mutator<OpenJDK>,
329+
src: ObjectReference,
330+
slot: Address,
331+
target: ObjectReference,
332+
) {
333+
mutator
334+
.barrier()
335+
.object_reference_write_post(src, slot, target);
336+
}
337+
338+
/// Barrier slow-path call
339+
#[no_mangle]
340+
pub extern "C" fn mmtk_object_reference_write_slow(
341+
mutator: &'static mut Mutator<OpenJDK>,
342+
src: ObjectReference,
343+
slot: Address,
344+
target: ObjectReference,
345+
) {
346+
mutator
347+
.barrier()
348+
.object_reference_write_slow(src, slot, target);
349+
}
350+
351+
/// Array-copy pre-barrier
352+
#[no_mangle]
353+
pub extern "C" fn mmtk_array_copy_pre(
354+
mutator: &'static mut Mutator<OpenJDK>,
355+
src: Address,
356+
dst: Address,
357+
count: usize,
358+
) {
359+
let bytes = count << LOG_BYTES_IN_ADDRESS;
313360
mutator
314361
.barrier()
315-
.post_write_barrier(mmtk::plan::BarrierWriteTarget::Object(obj))
362+
.memory_region_copy_pre(src..src + bytes, dst..dst + bytes);
316363
}
317364

365+
/// Array-copy post-barrier
318366
#[no_mangle]
319-
pub extern "C" fn post_write_barrier_slow(
367+
pub extern "C" fn mmtk_array_copy_post(
320368
mutator: &'static mut Mutator<OpenJDK>,
321-
obj: ObjectReference,
369+
src: Address,
370+
dst: Address,
371+
count: usize,
322372
) {
373+
let bytes = count << LOG_BYTES_IN_ADDRESS;
323374
mutator
324375
.barrier()
325-
.post_write_barrier_slow(mmtk::plan::BarrierWriteTarget::Object(obj))
376+
.memory_region_copy_post(src..src + bytes, dst..dst + bytes);
326377
}
327378

328379
// finalization

mmtk/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ extern crate lazy_static;
55
extern crate once_cell;
66

77
use std::collections::HashMap;
8+
use std::ops::Range;
89
use std::ptr::null_mut;
910
use std::sync::atomic::AtomicUsize;
1011
use std::sync::Mutex;
@@ -122,6 +123,7 @@ impl VMBinding for OpenJDK {
122123
type VMReferenceGlue = reference_glue::VMReferenceGlue;
123124

124125
type VMEdge = OpenJDKEdge;
126+
type VMMemorySlice = Range<Address>;
125127
}
126128

127129
use std::sync::atomic::AtomicBool;

openjdk/CompileThirdPartyHeap.gmk

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@ ifeq ($(MMTK_EXTREME_ASSERTIONS), 1)
3838
endif
3939
endif
4040

41+
ifeq ($(call check-jvm-feature, jfr), true)
42+
ifndef GC_FEATURES
43+
GC_FEATURES=--features jfr
44+
else
45+
GC_FEATURES:=$(strip $(GC_FEATURES))",jfr"
46+
endif
47+
endif
48+
4149
LIB_MMTK := $(JVM_LIB_OUTPUTDIR)/libmmtk_openjdk.so
4250

4351
ifeq ($(DEBUG_LEVEL), release)
@@ -63,8 +71,8 @@ JVM_LDFLAGS += '-Wl,-rpath,$$ORIGIN'
6371
FORCE:
6472

6573
TARGETS += $(LIB_MMTK)
66-
JVM_SRC_DIRS += $(MMTK_CPP_ROOT) $(MMTK_CPP_ROOT)/barriers
67-
JVM_CFLAGS += -std=c++14 -fpermissive -DINCLUDE_THIRD_PARTY_HEAP -DTHIRD_PARTY_HEAP_SRC=$(MMTK_CPP_ROOT)
74+
JVM_SRC_DIRS += $(MMTK_CPP_ROOT)/share $(MMTK_CPP_ROOT)/share/barriers $(MMTK_CPP_ROOT)/cpu/$(HOTSPOT_TARGET_CPU_ARCH)
75+
JVM_CFLAGS += -std=c++14 -fpermissive -DINCLUDE_THIRD_PARTY_HEAP -DTHIRD_PARTY_HEAP_SRC=$(MMTK_CPP_ROOT)/share -I$(MMTK_CPP_ROOT)/share -I$(MMTK_CPP_ROOT)/cpu/$(HOTSPOT_TARGET_CPU_ARCH)
6876
ifeq ($(GLOBAL_ALLOC_BIT), 1)
6977
JVM_CFLAGS += -DMMTK_ENABLE_GLOBAL_ALLOC_BIT
7078
endif

0 commit comments

Comments
 (0)