浏览代码

added extra code to ensure that requested addresses are gc-page aligned (osx)

ncannasse 6 年之前
父节点
当前提交
f976f361a7
共有 1 个文件被更改,包括 16 次插入0 次删除
  1. 16 0
      src/alloc.c

+ 16 - 0
src/alloc.c

@@ -1197,6 +1197,22 @@ static void *gc_alloc_page_memory( int size ) {
 	void *ptr = mmap(base_addr,size,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0);
 	void *ptr = mmap(base_addr,size,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0);
 	if( ptr == (void*)-1 )
 	if( ptr == (void*)-1 )
 		return NULL;
 		return NULL;
+	if( ((int_val)ptr) & (GC_PAGE_SIZE-1) ) {
+		munmap(ptr,size);
+		void *tmp;
+		int tmp_size = (int)((int_val)ptr - (int_val)base_addr);
+		if( tmp_size > 0 ) {
+			base_addr = (void*)((((int_val)ptr) & ~(GC_PAGE_SIZE-1)) + GC_PAGE_SIZE);
+			tmp = ptr;
+		} else {
+			base_addr = (void*)(((int_val)ptr) & ~(GC_PAGE_SIZE-1));
+			tmp = NULL;
+		}
+		if( tmp ) tmp = mmap(tmp,tmp_size,PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0);
+		ptr = gc_alloc_page_memory(size);
+		if( tmp ) munmap(tmp,tmp_size);
+		return ptr;
+	}
 	base_addr = (char*)ptr+size;
 	base_addr = (char*)ptr+size;
 	return ptr;
 	return ptr;
 #endif
 #endif