Beispiel #1
0
void memoryInitialize(void)
{
    MEMHeapHandle mem1_heap_handle = MEMGetBaseHeapHandle(MEM_BASE_HEAP_MEM1);
    unsigned int mem1_allocatable_size = MEMGetAllocatableSizeForFrmHeapEx(mem1_heap_handle, 4);
    void *mem1_memory = MEMAllocFromFrmHeapEx(mem1_heap_handle, mem1_allocatable_size, 4);
    if(mem1_memory)
        mem1_heap = MEMCreateExpHeapEx(mem1_memory, mem1_allocatable_size, 0);

    MEMHeapHandle bucket_heap_handle = MEMGetBaseHeapHandle(MEM_BASE_HEAP_FG);
    unsigned int bucket_allocatable_size = MEMGetAllocatableSizeForFrmHeapEx(bucket_heap_handle, 4);
    void *bucket_memory = MEMAllocFromFrmHeapEx(bucket_heap_handle, bucket_allocatable_size, 4);
    if(bucket_memory)
        bucket_heap = MEMCreateExpHeapEx(bucket_memory, bucket_allocatable_size, 0);
}
Beispiel #2
0
void
__preinit_user(MEMHeapHandle *mem1,
               MEMHeapHandle *foreground,
               MEMHeapHandle *mem2)
{
   uint32_t addr, size;

   MEMAllocFromDefaultHeap = CustomAllocFromDefaultHeap;
   MEMAllocFromDefaultHeapEx = CustomAllocFromDefaultHeapEx;
   MEMFreeToDefaultHeap = CustomFreeToDefaultHeap;

   if (OSGetForegroundBucket(NULL, NULL)) {
      OSGetMemBound(OS_MEM1, &addr, &size);
      *mem1 = MEMCreateFrmHeapEx((void *)addr, size, 0);

      OSGetForegroundBucketFreeArea(&addr, &size);
      *foreground = MEMCreateFrmHeapEx((void *)addr, size, 0);
   }

   OSGetMemBound(OS_MEM2, &addr, &size);
   sCustomHeap = MEMCreateExpHeapEx((void *)addr, size, MEM_HEAP_FLAG_USE_LOCK);
   sCustomHeapAddr = addr;
   sCustomHeapSize = size;
   *mem2 = sCustomHeap;

   OSDynLoad_SetAllocator(CustomDynLoadAlloc, CustomDynLoadFree);
   OSDynLoad_SetTLSAllocator(CustomDynLoadAlloc, CustomDynLoadFree);
}
void
initialiseSystemHeap(virt_ptr<void> base,
                     uint32_t size)
{
   if (internal::isAppDebugLevelVerbose()) {
      COSInfo(COSReportModule::Unknown2,
              "RPL_SYSHEAP:Event,Change,Hex Addr,Bytes,Available");
      COSInfo(
         COSReportModule::Unknown2,
         fmt::format("RPL_SYSHEAP:SYSHEAP START,CREATE,=\"{}\",{}",
                     base, size));
   }

   sSystemHeapData->handle = MEMCreateExpHeapEx(base,
                                                size,
                                                MEMHeapFlags::ThreadSafe);
   sSystemHeapData->numAllocs = 0u;
   sSystemHeapData->numFrees = 0u;
   OSMemoryBarrier();
}
/**
 * Initialise an expanded heap.
 */
ExpandedHeap *
MEMCreateExpHeap(ExpandedHeap *heap, uint32_t size)
{
   return MEMCreateExpHeapEx(heap, size, 0);
}