mdb_alloc(), mdb_zalloc() and mdb_free() Functions
void *mdb_alloc(size_t size, uint_t flags); void *mdb_zalloc(size_t size, uint_t flags); void mdb_free(void *buf, size_t size); void mdb_free_gc(void *buf, size_t size);
mdb_alloc() allocates size bytes of debugger memory and returns a pointer to the allocated memory. The allocated memory is at least double-word aligned, so it can hold any C data structure. No greater alignment can be assumed. The flags parameter should be the bitwise OR of one or more of the following values:
-
UM_NOSLEEP -
If sufficient memory to fulfill the request is not immediately available, return NULL to indicate failure. The caller must check for NULL and handle this case appropriately.
-
UM_SLEEP -
If sufficient memory to fulfill the request is not immediately available, sleep until such time as the request can be fulfilled. As a result,
UM_SLEEPallocations are guaranteed to succeed. The caller need not check for a NULL return value. -
UM_GC -
Garbage-collect allocation automatically at the end of this debugger command. The caller should not subsequently call
mdb_free() on this block, as the debugger will take care of deallocation automatically. All memory allocation from within a dcmd must useUM_GCso that if the dcmd is interrupted by the user, the debugger can garbage-collect the memory.
mdb_zalloc() is like mdb_alloc(), but the allocated memory is filled with zeroes before returning it to the caller. No guarantees are made about the initial contents of memory returned by mdb_alloc(). mdb_free() is used to free previously allocated memory (unless it was allocated UM_GC). The buffer address and size must exactly match the original allocation. It is not legal to free only a portion of an allocation with mdb_free(). It is not legal to free an allocation more than once. An allocation of zero bytes always returns NULL; freeing a NULL pointer with size zero always succeeds. mdb_free_gc() can be used to free memory previously allocated with UM_GC. It should only be used for larger buffers which are no longer in use.