Loading...
include/malloc/malloc.h libmalloc-792.1.1 libmalloc-715.140.5
--- libmalloc/libmalloc-792.1.1/include/malloc/malloc.h
+++ libmalloc/libmalloc-715.140.5/include/malloc/malloc.h
@@ -2,14 +2,14 @@
  * Copyright (c) 1999-2023 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- *
+ * 
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * compliance with the License. Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this
  * file.
- *
+ * 
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -17,7 +17,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- *
+ * 
  * @APPLE_LICENSE_HEADER_END@
  */
 
@@ -62,52 +62,6 @@
 #endif // MALLOC_ZONE_FN_PTR
 
 __BEGIN_DECLS
-
-/*********  Typed zone functions        ************/
-
-#if defined(__has_attribute) && __has_attribute(swift_name)
-#define MALLOC_SWIFT_NAME(x) __attribute__((swift_name(#x)))
-#else
-#define MALLOC_SWIFT_NAME(x)
-#endif // defined(__has_attribute) && __has_attribute(swift_name)
-
-/*!
- * @constant MALLOC_ZONE_MALLOC_DEFAULT_ALIGN
- * Default alignment for malloc_type_zone_malloc_with_options
- */
-#define MALLOC_ZONE_MALLOC_DEFAULT_ALIGN __SIZEOF_POINTER__
-
-/*!
- * @enum malloc_zone_malloc_options_t
- *
- * @constant MALLOC_ZONE_MALLOC_OPTION_NONE
- * Empty placeholder option.
- *
- * @constant MALLOC_ZONE_MALLOC_OPTION_CLEAR
- * Zero out the allocated memory, similar to calloc().
- *
- */
-typedef enum __enum_options : uint64_t {
-	MALLOC_ZONE_MALLOC_OPTION_NONE = 0u,
-	MALLOC_ZONE_MALLOC_OPTION_CLEAR MALLOC_SWIFT_NAME(clear) = 1u << 0,
-} malloc_zone_malloc_options_t;
-
-/*!
- * @function malloc_type_zone_malloc_with_options
- *
- * Like the other functions declared in malloc/_malloc_type.h, this function
- * is not intended to be called directly, but is rather the rewrite target for
- * calls to malloc_zone_malloc_with_options when typed memory operations are
- * enabled.
- */
-#if defined(__LP64__)
-__API_AVAILABLE(macos(16.0), ios(19.0), tvos(19.0), watchos(12.0), bridgeos(10.0), visionos(3.0), driverkit(25.0))
-void * __sized_by_or_null(size) malloc_type_zone_malloc_with_options(malloc_zone_t *zone, size_t alignment, size_t size, malloc_type_id_t type_id, malloc_zone_malloc_options_t opts) __result_use_check __alloc_align(2) __alloc_size(3);
-#endif /* __LP64__ */
-
-// The remainder of these functions are declared in malloc/_malloc_type.h, and
-// the backdeployment variant definitions are at the bottom of this file.
-
 /*********	Type definitions	************/
 
 /*
@@ -206,7 +160,8 @@
 			void * __unsafe_indexable ptr);
 
 	/*
-	 * Memory allocation with an extensible binary flags option.
+	 * Memory allocation with an extensible binary flags option. Currently for
+	 * libmalloc-internal zone implementations only - should be NULL otherwise.
 	 * Added in version >= 15.
 	 */
 	void * __sized_by_or_null(size) (* MALLOC_ZONE_FN_PTR(malloc_with_options))(
@@ -233,9 +188,10 @@
 			struct _malloc_zone_t *zone, size_t alignment, size_t size,
 			malloc_type_id_t type_id);
 
+	/* Must be NULL for non-libmalloc zone implementations */
 	void * __sized_by_or_null(size) (* MALLOC_ZONE_FN_PTR(malloc_type_malloc_with_options))(
-			struct _malloc_zone_t *zone, size_t align, size_t size,
-			uint64_t options, malloc_type_id_t type_id);
+			struct _malloc_zone_t *zone, size_t align, size_t size, uint64_t options,
+			malloc_type_id_t type_id);
 } malloc_zone_t;
 
 /*!
@@ -395,38 +351,6 @@
 
 extern void * __sized_by_or_null(size) malloc_zone_malloc(malloc_zone_t *zone, size_t size) __alloc_size(2) _MALLOC_TYPED(malloc_type_zone_malloc, 2);
 	/* Allocates a new pointer of size size; zone must be non-NULL */
-
-/*!
- * @function malloc_zone_malloc_with_options
- *
- * @param zone
- * The malloc zone that should be used to used to serve the allocation. This
- * parameter may be NULL, in which case the default zone will be used.
- *
- * @param align
- * The minimum alignment of the requested allocation. This parameter must be
- * MALLOC_ZONE_MALLOC_DEFAULT_ALIGN to request default alignment, or a power
- * of 2 >= sizeof(void *).
- *
- * @param size
- * The size, in bytes, of the requested allocation. Must be an integral
- * multiple of align if align is non-zero.
- *
- * @param options
- * A bitmask of options defining how the memory should be allocated. See the
- * available bit values in the malloc_zone_malloc_options_t enum definition.
- *
- * @result
- * A pointer to the newly allocated block of memory, or NULL if the allocation
- * failed.
- *
- * @discussion
- * This API does not use errno to signal information about the reason for its
- * success or failure, and makes no guarantees about preserving or settings its
- * value in any case.
- */
-__API_AVAILABLE(macos(16.0), ios(19.0), tvos(19.0), watchos(12.0), bridgeos(10.0), visionos(3.0), driverkit(25.0))
-extern void * __sized_by_or_null(size) malloc_zone_malloc_with_options(malloc_zone_t *zone, size_t align, size_t size, malloc_zone_malloc_options_t opts) __alloc_align(2) __alloc_size(3) _MALLOC_TYPED(malloc_type_zone_malloc_with_options, 3);
 
 extern void * __sized_by_or_null(num_items * size) malloc_zone_calloc(malloc_zone_t *zone, size_t num_items, size_t size) __alloc_size(2,3) _MALLOC_TYPED(malloc_type_zone_calloc, 3);
 	/* Allocates a new pointer of size num_items * size; block is cleared; zone must be non-NULL */
@@ -666,80 +590,22 @@
 // Version 13:
 //   - malloc_zone_t::malloc and malloc_zone_t::calloc assume responsibility for
 //     setting errno to ENOMEM on failure
-//   - malloc_zone_t::try_free_default (libmalloc only, NULL otherwise)
+//   - malloc_zone_t::try_free_default
 // Version 14:
-//   malloc_introspection_t::zone_type (mandatory, should be 0)
+//   malloc_introspection_t::zone_type
 // Version 15:
-//   malloc_zone_t::malloc_with_options (optional)
+//   malloc_zone_t::malloc_with_options
 // Version 16:
-//   malloc_zone_t::malloc_type_malloc (mandatory)
-//   malloc_zone_t::malloc_type_calloc (mandatory)
-//   malloc_zone_t::malloc_type_realloc (mandatory)
-//   malloc_zone_t::malloc_type_memalign (mandatory)
-//   malloc_zone_t::malloc_type_malloc_with_options (optional)
-
-// Zone functions are optional unless specified otherwise above. Calling a zone
-// function requires two checks:
+//   malloc_zone_t::malloc_type_malloc
+//   malloc_zone_t::malloc_type_calloc
+//   malloc_zone_t::malloc_type_realloc
+//   malloc_zone_t::malloc_type_memalign
+//   malloc_zone_t::malloc_type_malloc_with_options
+
+// These functions are optional and calling them requires two checks:
 //  * Check zone version to ensure zone struct is large enough to include the member.
 //  * Check that the function pointer is not null.
 
-#if defined(_MALLOC_TYPE_MALLOC_IS_BACKDEPLOYING) && _MALLOC_TYPE_MALLOC_IS_BACKDEPLOYING
-static void * __sized_by_or_null(size) __attribute__((always_inline)) malloc_type_zone_malloc_backdeploy(malloc_zone_t *zone, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(2) {
-	__attribute__((weak_import)) void * __sized_by_or_null(size) malloc_type_zone_malloc(malloc_zone_t *zone, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(2);
-	__auto_type func = malloc_zone_malloc;
-	if (malloc_type_zone_malloc) {
-		return malloc_type_zone_malloc(zone, size, type_id);
-	}
-	return func(zone, size);
-}
-
-static void * __sized_by_or_null(count * size) __attribute__((always_inline)) malloc_type_zone_calloc_backdeploy(malloc_zone_t *zone, size_t count, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(2,3) {
-	__attribute__((weak_import)) void * __sized_by_or_null(count * size) malloc_type_zone_calloc(malloc_zone_t *zone, size_t count, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(2,3);
-	__auto_type func = malloc_zone_calloc;
-	if (malloc_type_zone_calloc) {
-		return malloc_type_zone_calloc(zone, count, size, type_id);
-	}
-	return func(zone, count, size);
-}
-
-static void __attribute__((always_inline)) malloc_type_zone_free_backdeploy(malloc_zone_t *zone, void * __unsafe_indexable ptr, malloc_type_id_t type_id) {
-	__attribute__((weak_import)) void malloc_type_zone_free(malloc_zone_t *zone, void * __unsafe_indexable ptr, malloc_type_id_t type_id);
-	__auto_type func = malloc_zone_free;
-	if (malloc_type_zone_free) {
-		malloc_type_zone_free(zone, ptr, type_id);
-	} else {
-		func(zone, ptr);
-	}
-}
-
-static void * __sized_by_or_null(size) __attribute__((always_inline)) malloc_type_zone_realloc_backdeploy(malloc_zone_t *zone, void * __unsafe_indexable ptr, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(3) {
-	__auto_type func = malloc_zone_realloc;
-	__attribute__((weak_import)) void * __sized_by_or_null(size) malloc_type_zone_realloc(malloc_zone_t *zone, void * __unsafe_indexable ptr, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(3);
-	if (malloc_type_zone_realloc) {
-		return malloc_type_zone_realloc(zone, ptr, size, type_id);
-	}
-	return func(zone, ptr, size);
-}
-
-static void *__sized_by_or_null(size) __attribute__((always_inline)) malloc_type_zone_valloc_backdeploy(malloc_zone_t *zone, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(2) {
-	__attribute__((weak_import)) void *__sized_by_or_null(size) malloc_type_zone_valloc(malloc_zone_t *zone, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_size(2);
-	__auto_type func = malloc_zone_valloc;
-	if (malloc_type_zone_valloc) {
-		return malloc_type_zone_valloc(zone, size, type_id);
-	}
-	return func(zone, size);
-}
-
-static void *__sized_by_or_null(size) __attribute__((always_inline)) malloc_type_zone_memalign_backdeploy(malloc_zone_t *zone, size_t alignment, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_align(2) __alloc_size(3) {
-	__attribute__((weak_import)) void *__sized_by_or_null(size) malloc_type_zone_memalign(malloc_zone_t *zone, size_t alignment, size_t size, malloc_type_id_t type_id) __result_use_check __alloc_align(2) __alloc_size(3);
-	__auto_type func = malloc_zone_memalign;
-	if (malloc_type_zone_memalign) {
-		return malloc_type_zone_memalign(zone, alignment, size, type_id);
-	}
-	return func(zone, alignment, size);
-}
-#endif // defined(_MALLOC_TYPE_MALLOC_IS_BACKDEPLOYING) && _MALLOC_TYPE_MALLOC_IS_BACKDEPLOYING
-
 __END_DECLS
 
 #endif /* _MALLOC_MALLOC_H_ */