diff --git a/build.rs b/build.rs index 2cbf54e..ba7fea0 100644 --- a/build.rs +++ b/build.rs @@ -23,7 +23,7 @@ fn main() { let dst = autotools::Config::new(LIB_GC_DIR) .cflag(format!( - "-I{} -L/lib/x86_64-linux-gnu -lpthread -fPIC", + "-I{} -L/lib/x86_64-linux-gnu -lpthread -fPIC -D POINTER_MASK=0x7", dst.join("include").display() )) .build(); @@ -59,7 +59,10 @@ fn main() { let dst = Config::new(LIB_GC_DIR) .profile("Release") .define("BUILD_SHARED_LIBS", "FALSE") - .cflag(format!("-I{}", libatomic_include_path)) + .cflag(format!( + "-I{} -DPOINTER_MASK=0x7", + libatomic_include_path, foo + )) .build(); println!( diff --git a/src/lib.rs b/src/lib.rs index f84c7cc..e7f0574 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,6 +25,7 @@ extern "C" { fn GC_get_stack_base(stack_base: *mut GcStackBase) -> c_int; fn GC_init(); fn GC_malloc(size: size_t) -> *mut c_void; + fn GC_memalign(align: size_t, size: size_t) -> *mut c_void; fn GC_realloc(ptr: *mut c_void, size: size_t) -> *mut c_void; fn GC_register_my_thread(stack_base: *const GcStackBase) -> c_int; fn GC_set_stackbottom(thread: *const c_void, stack_bottom: *const GcStackBase); @@ -126,7 +127,7 @@ impl Allocator { unsafe impl GlobalAlloc for Allocator { unsafe fn alloc(&self, layout: Layout) -> *mut u8 { - GC_malloc(layout.size()) as *mut u8 + GC_memalign(layout.align(), layout.size()) as *mut u8 } unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {