Loading...
--- libmalloc/libmalloc-283.60.1/src/nano_zone.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2015 Apple 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,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * 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@
- */
-
-
-#ifndef __NANO_ZONE_H
-#define __NANO_ZONE_H
-
-#if CONFIG_NANOZONE
-
-/********************* DEFINITIONS ************************/
-
-#define MAX_RECORDER_BUFFER 256
-
-/************* nanozone address field layout ******************/
-
-#if defined(__x86_64)
-#define NANO_MAG_BITS 6
-#define NANO_BAND_BITS 17
-#define NANO_SLOT_BITS 4
-#define NANO_OFFSET_BITS 17
-
-#else
-#error Unknown Architecture
-#endif
-
-// clang-format really dislikes the bitfields here
-// clang-format off
-#if defined(__BIG_ENDIAN__)
-struct nano_blk_addr_s {
- uint64_t
- nano_signature:NANOZONE_SIGNATURE_BITS, // the address range devoted to us.
- nano_mag_index:NANO_MAG_BITS, // the core that allocated this block
- nano_band:NANO_BAND_BITS,
- nano_slot:NANO_SLOT_BITS, // bucket of homogenous quanta-multiple blocks
- nano_offset:NANO_OFFSET_BITS; // locates the block
-};
-#else
-// least significant bits declared first
-struct nano_blk_addr_s {
- uint64_t
- nano_offset:NANO_OFFSET_BITS, // locates the block
- nano_slot:NANO_SLOT_BITS, // bucket of homogenous quanta-multiple blocks
- nano_band:NANO_BAND_BITS,
- nano_mag_index:NANO_MAG_BITS, // the core that allocated this block
- nano_signature:NANOZONE_SIGNATURE_BITS; // the address range devoted to us.
-};
-#endif
-// clang-format on
-
-typedef union {
- uint64_t addr;
- struct nano_blk_addr_s fields;
-} nano_blk_addr_t;
-
-#define SLOT_IN_BAND_SIZE (1 << NANO_OFFSET_BITS)
-#define SLOT_KEY_LIMIT (1 << NANO_SLOT_BITS) /* Must track nano_slot width */
-#define BAND_SIZE (1 << (NANO_SLOT_BITS + NANO_OFFSET_BITS)) /* == Number of bytes covered by a page table entry */
-#define NANO_MAG_SIZE (1 << NANO_MAG_BITS)
-#define NANO_SLOT_SIZE (1 << NANO_SLOT_BITS)
-
-#ifdef __INTERNAL_H
-
-/****************************** zone itself ***********************************/
-
-/*
- * Note that objects whose adddress are held in pointers here must be pursued
- * individually in the nano_in_use_enumeration() routines.
- */
-
-typedef struct chained_block_s {
- uintptr_t double_free_guard;
- struct chained_block_s *next;
-} *chained_block_t;
-
-typedef struct nano_meta_s {
- OSQueueHead slot_LIFO MALLOC_NANO_CACHE_ALIGN;
- unsigned int slot_madvised_log_page_count;
- volatile uintptr_t slot_current_base_addr;
- volatile uintptr_t slot_limit_addr;
- volatile size_t slot_objects_mapped;
- volatile size_t slot_objects_skipped;
- bitarray_t slot_madvised_pages;
- // position on cache line distinct from that of slot_LIFO
- volatile uintptr_t slot_bump_addr MALLOC_NANO_CACHE_ALIGN;
- volatile boolean_t slot_exhausted;
- unsigned int slot_bytes;
- unsigned int slot_objects;
-} *nano_meta_admin_t;
-
-// vm_allocate()'d, so page-aligned to begin with.
-typedef struct nanozone_s {
- // first page will be given read-only protection
- malloc_zone_t basic_zone;
- uint8_t pad[PAGE_MAX_SIZE - sizeof(malloc_zone_t)];
-
- // remainder of structure is R/W (contains no function pointers)
- // page-aligned
- // max: NANO_MAG_SIZE cores x NANO_SLOT_SIZE slots for nano blocks {16 .. 256}
- struct nano_meta_s meta_data[NANO_MAG_SIZE][NANO_SLOT_SIZE];
- _malloc_lock_s band_resupply_lock[NANO_MAG_SIZE];
- uintptr_t band_max_mapped_baseaddr[NANO_MAG_SIZE];
- size_t core_mapped_size[NANO_MAG_SIZE];
-
- unsigned debug_flags;
-
- /* security cookie */
- uintptr_t cookie;
-
- /*
- * The nano zone constructed by create_nano_zone() would like to hand off tiny, small, and large
- * allocations to the default scalable zone. Record the latter as the "helper" zone here.
- */
- malloc_zone_t *helper_zone;
-} nanozone_t;
-
-#define NANOZONE_PAGED_SIZE ((sizeof(nanozone_t) + vm_page_size - 1) & ~ (vm_page_size - 1))
-
-#endif // __INTERNAL_H
-
-#endif // CONFIG_NANOZONE
-
-#endif // __NANO_ZONE_H