Loading...
--- libmalloc/libmalloc-283.100.6/src/base.h
+++ libmalloc/libmalloc-409.60.6/src/base.h
@@ -71,7 +71,7 @@
 #   define MALLOC_CACHE_LINE 128
 #   define MALLOC_NANO_CACHE_LINE 64
 #elif defined(__arm__) || defined(__arm64__)
-#   define MALLOC_CACHE_LINE 64
+# 	define MALLOC_CACHE_LINE 128
 #   define MALLOC_NANO_CACHE_LINE 64
 #else
 #   define MALLOC_CACHE_LINE 32
@@ -88,6 +88,8 @@
 #define MALLOC_PACKED __attribute__((packed))
 #define MALLOC_USED __attribute__((used))
 #define MALLOC_UNUSED __attribute__((unused))
+#define MALLOC_NORETURN __attribute__((noreturn))
+#define MALLOC_COLD __attribute__((cold))
 #define CHECK_MAGAZINE_PTR_LOCKED(szone, mag_ptr, fun) {}
 
 #define SCRIBBLE_BYTE 0xaa /* allocated scribble */
@@ -99,6 +101,21 @@
 #define round_page_quanta(x) round_page((x))
 #define vm_page_quanta_size (vm_page_size)
 #define vm_page_quanta_shift (vm_page_shift)
+
+/*
+ * Large rounds allocation sizes up to MAX(vm_kernel_page_size, page_size).
+ * This provides better death row caching performance when vm_kernel_page_size > page_size.
+ * The kernel allocates pages of vm_kernel_page_size to back our allocations,
+ * so there is no additional physical page cost to doing this.
+ * Guard pages are the same size to ensure the full vm allocation size is a multiple of MAX(vm_kernel_page_size, page_size).
+ */
+#define large_vm_page_quanta_size (vm_kernel_page_size > vm_page_size ? vm_kernel_page_size : vm_page_size)
+#define large_vm_page_quanta_mask (vm_kernel_page_mask > vm_page_mask ? vm_kernel_page_mask : vm_page_mask)
+#define large_vm_page_quanta_shift (vm_kernel_page_shift > vm_page_shift ? vm_kernel_page_shift : vm_page_shift)
+
+#define trunc_large_page_quanta(x) ((x) & (~large_vm_page_quanta_mask))
+#define round_large_page_quanta(x) (trunc_large_page_quanta((x) + large_vm_page_quanta_mask))
+
 
 // add a guard page before each VM region to help debug
 #define MALLOC_ADD_PRELUDE_GUARD_PAGE (1 << 0)