Loading...
libkern/libclosure/runtime.cpp xnu-12377.101.15 xnu-7195.60.75
--- xnu/xnu-12377.101.15/libkern/libclosure/runtime.cpp
+++ xnu/xnu-7195.60.75/libkern/libclosure/runtime.cpp
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <dlfcn.h>
 #include <os/assumes.h>
-#include <TargetConditionals.h>
 
 #else /* !KERNEL */
 #define TARGET_OS_WIN32 0
@@ -25,34 +24,20 @@
 #include <kern/kalloc.h>
 __END_DECLS
 
-/* void * is a bit of a lie, but that will have to do */
-KALLOC_TYPE_VAR_DEFINE(KT_BLOCK_LAYOUT, struct Block_layout, void *, KT_DEFAULT);
-KALLOC_TYPE_VAR_DEFINE(KT_BLOCK_BYREF, struct Block_byref, void *, KT_DEFAULT);
-
-static inline struct Block_layout *
-block_layout_alloc(size_t size)
-{
-	return (struct Block_layout *)kalloc_type_var_impl(KT_BLOCK_LAYOUT,
-	           size, Z_WAITOK_ZERO_NOFAIL, NULL);
+static inline void *
+malloc(size_t size)
+{
+	if (size == 0) {
+		return NULL;
+	}
+	return kheap_alloc_tag_bt(KHEAP_DEFAULT, size,
+	           (zalloc_flags_t) (Z_WAITOK | Z_ZERO), VM_KERN_MEMORY_LIBKERN);
 }
 
 static inline void
-block_layout_free(Block_layout *ptr, size_t size)
-{
-	kfree_type_var_impl(KT_BLOCK_LAYOUT, ptr, size);
-}
-
-static inline struct Block_byref *
-block_byref_alloc(size_t size)
-{
-	return (struct Block_byref *)kalloc_type_var_impl(KT_BLOCK_BYREF,
-	           size, Z_WAITOK_ZERO_NOFAIL, NULL);
-}
-
-static inline void
-block_byref_free(Block_byref *ptr, size_t size)
-{
-	kfree_type_var_impl(KT_BLOCK_BYREF, ptr, size);
+free(void *addr)
+{
+	kheap_free_addr(KHEAP_DEFAULT, addr);
 }
 
 #endif /* KERNEL */
@@ -216,7 +201,6 @@
  *  Accessors for block descriptor fields
  *****************************************************************************/
 
-#if BLOCK_SMALL_DESCRIPTOR_SUPPORTED
 template <class T>
 static T *
 unwrap_relative_pointer(int32_t &offset)
@@ -230,7 +214,6 @@
 	uintptr_t pointer = base + extendedOffset;
 	return (T *)pointer;
 }
-#endif
 
 #if 0
 static struct Block_descriptor_2 *
@@ -298,7 +281,10 @@
 	} else {
 		// Its a stack block.  Make a copy.
 		size_t size = Block_size(aBlock);
-		struct Block_layout *result = block_layout_alloc(size);
+		struct Block_layout *result = (struct Block_layout *)malloc(size);
+		if (!result) {
+			return NULL;
+		}
 		memmove(result, aBlock, size); // bitcopy first
 #if __has_feature(ptrauth_calls)
 		// Resign the invoke pointer as it uses address authentication.
@@ -342,7 +328,7 @@
 
 	if ((src->forwarding->flags & BLOCK_REFCOUNT_MASK) == 0) {
 		// src points to stack
-		struct Block_byref *copy = block_byref_alloc(src->size);
+		struct Block_byref *copy = (struct Block_byref *)malloc(src->size);
 		copy->isa = NULL;
 		// byref value 4 is logical refcount of 2: one for caller, one for stack
 		copy->flags = src->flags | BLOCK_BYREF_NEEDS_FREE | 4;
@@ -395,7 +381,7 @@
 				struct Block_byref_2 *byref2 = (struct Block_byref_2 *)(byref + 1);
 				(*byref2->byref_destroy)(byref);
 			}
-			block_byref_free(byref, byref->size);
+			free(byref);
 		}
 	}
 }
@@ -431,7 +417,7 @@
 	if (latching_decr_int_should_deallocate(&aBlock->flags)) {
 		_Block_call_dispose_helper(aBlock);
 		_Block_destructInstance(aBlock);
-		block_layout_free(aBlock, Block_size(aBlock));
+		free(aBlock);
 	}
 }
 
@@ -461,11 +447,9 @@
 {
 	auto *layout = (Block_layout *)aBlock;
 	void *desc = _Block_get_descriptor(layout);
-#if BLOCK_SMALL_DESCRIPTOR_SUPPORTED
 	if (layout->flags & BLOCK_SMALL_DESCRIPTOR) {
 		return ((Block_descriptor_small *)desc)->size;
 	}
-#endif
 	return ((Block_descriptor_1 *)desc)->size;
 }
 
@@ -493,12 +477,10 @@
 		return nullptr;
 	}
 
-#if BLOCK_SMALL_DESCRIPTOR_SUPPORTED
 	if (layout->flags & BLOCK_SMALL_DESCRIPTOR) {
 		auto *bds = (Block_descriptor_small *)_Block_get_descriptor(layout);
 		return unwrap_relative_pointer<const char>(bds->signature);
 	}
-#endif
 
 	struct Block_descriptor_3 *desc3 = _Block_descriptor_3(layout);
 	return desc3->signature;
@@ -514,12 +496,10 @@
 		return nullptr;
 	}
 
-#if BLOCK_SMALL_DESCRIPTOR_SUPPORTED
 	if (layout->flags & BLOCK_SMALL_DESCRIPTOR) {
 		auto *bds = (Block_descriptor_small *)_Block_get_descriptor(layout);
 		return unwrap_relative_pointer<const char>(bds->layout);
 	}
-#endif
 
 	Block_descriptor_3 *desc = _Block_descriptor_3(layout);
 	return desc->layout;
@@ -536,7 +516,6 @@
 	}
 
 	const char *extLayout;
-#if BLOCK_SMALL_DESCRIPTOR_SUPPORTED
 	if (layout->flags & BLOCK_SMALL_DESCRIPTOR) {
 		auto *bds = (Block_descriptor_small *)_Block_get_descriptor(layout);
 		if (layout->flags & BLOCK_INLINE_LAYOUT_STRING) {
@@ -544,9 +523,7 @@
 		} else {
 			extLayout = unwrap_relative_pointer<const char>(bds->layout);
 		}
-	} else
-#endif
-	{
+	} else {
 		Block_descriptor_3 *desc3 = _Block_descriptor_3(layout);
 		extLayout = desc3->layout;
 	}