Lines Matching full:desc
162 MallocDesc* desc;
232 const MallocDesc* desc);
317 * desc - MallocDesc instance to dump.
320 #define log_mdesc(type, desc, fmt, ...) \
329 (desc)); \
363 * desc - Allocation descriptor.
367 static inline void* mallocdesc_user_ptr(const MallocDesc* desc) {
368 return static_cast<char*>(desc->ptr) + desc->prefix_size;
374 * desc - Allocation descriptor.
378 static inline uint32_t mallocdesc_alloc_size(const MallocDesc* desc) {
379 return desc->prefix_size + desc->requested_bytes + desc->suffix_size;
384 * desc - Descriptor for the memory block, allocated in malloc handler.
388 static inline void* mallocdesc_alloc_end(const MallocDesc* desc) {
389 return static_cast<char*>(desc->ptr) + mallocdesc_alloc_size(desc);
424 * desc - Pointer to MallocDesc instance containing allocated block
428 * the desc parameter passed to this routine has been zeroed out by the
431 static inline int notify_qemu_malloc(volatile MallocDesc* desc) {
432 desc->libc_pid = malloc_pid;
433 desc->allocator_pid = getpid();
434 desc->av_count = 0;
435 notify_qemu(TRACE_DEV_REG_MALLOC, (uint32_t)desc);
439 return desc->libc_pid != 0 ? 0 : -1;
464 * desc - Pointer to MallocDesc instance that will receive allocation
472 static inline int query_qemu_malloc_info(const void* ptr, MallocDesc* desc, uint32_t routine) {
479 query.desc = desc;
532 * desc - Descriptor to dump.
534 static void dump_malloc_descriptor(char* str, size_t str_buf_size, const MallocDesc* desc) {
538 mallocdesc_user_ptr(desc), (uint32_t)desc->ptr,
539 (uint32_t)mallocdesc_alloc_end(desc), desc->prefix_size,
540 desc->requested_bytes, desc->suffix_size, desc->allocator_pid,
541 desc->libc_pid);
550 static void test_access_violation(const MallocDesc* desc) {
553 volatile char* prefix = (volatile char*)desc->ptr;
554 volatile char* suffix = (volatile char*)mallocdesc_user_ptr(desc) +
555 desc->requested_bytes;
562 if (!query_qemu_malloc_info(mallocdesc_user_ptr(desc), &desc_chk, 2) &&
563 desc_chk.av_count != (desc->av_count + 2)) {
567 malloc_pid, getpid(), desc->av_count + 2,
678 MallocDesc desc;
682 desc.prefix_size = DEFAULT_PREFIX_SIZE;
683 desc.requested_bytes = bytes;
684 desc.suffix_size = DEFAULT_SUFFIX_SIZE;
685 desc.ptr = dlmalloc(mallocdesc_alloc_size(&desc));
686 if (desc.ptr == NULL) {
688 malloc_pid, getpid(), bytes, mallocdesc_alloc_size(&desc));
693 if (notify_qemu_malloc(&desc)) {
694 log_mdesc(error, &desc, "<libc_pid=%03u, pid=%03u>: malloc: notify_malloc failed for ",
696 dlfree(desc.ptr);
700 test_access_violation(&desc);
702 log_mdesc(info, &desc, "+++ <libc_pid=%03u, pid=%03u> malloc(%u) -> ",
704 return mallocdesc_user_ptr(&desc);
713 MallocDesc desc;
722 if (query_qemu_malloc_info(mem, &desc, 1)) {
729 test_access_violation(&desc);
735 if (mem != mallocdesc_user_ptr(&desc)) {
736 log_mdesc(error, &desc, "<libc_pid=%03u, pid=%03u>: free(%p) is invalid for ",
743 log_mdesc(error, &desc, "<libc_pid=%03u, pid=%03u>: free(%p) notify_free failed for ",
746 log_mdesc(info, &desc, "--- <libc_pid=%03u, pid=%03u> free(%p) -> ",
748 dlfree(desc.ptr);
769 MallocDesc desc;
776 desc.prefix_size = DEFAULT_PREFIX_SIZE;
780 desc.suffix_size = (DEFAULT_PREFIX_SIZE % elem_size) +
785 desc.prefix_size = elem_size + DEFAULT_PREFIX_SIZE - 1;
786 desc.prefix_size &= ~(malloc_alignment - 1);
787 desc.suffix_size = DEFAULT_SUFFIX_SIZE;
789 desc.requested_bytes = n_elements * elem_size;
790 size_t total_size = desc.requested_bytes + desc.prefix_size + desc.suffix_size;
796 desc.suffix_size += (elem_size - total_size);
798 desc.ptr = dlcalloc(total_elements, elem_size);
799 if (desc.ptr == NULL) {
802 desc.prefix_size, desc.suffix_size);
806 if (notify_qemu_malloc(&desc)) {
807 log_mdesc(error, &desc, "<libc_pid=%03u, pid=%03u>: calloc(%u(%u), %u): notify_malloc failed for ",
809 dlfree(desc.ptr);
813 test_access_violation(&desc);
815 log_mdesc(info, &desc, "### <libc_pid=%03u, pid=%03u> calloc(%u(%u), %u) -> ",
817 return mallocdesc_user_ptr(&desc);
932 MallocDesc desc;
945 desc.prefix_size = alignment > DEFAULT_PREFIX_SIZE ? alignment :
947 desc.requested_bytes = bytes;
948 desc.suffix_size = DEFAULT_SUFFIX_SIZE;
949 desc.ptr = dlmemalign(desc.prefix_size, mallocdesc_alloc_size(&desc));
950 if (desc.ptr == NULL) {
953 mallocdesc_alloc_size(&desc));
956 if (notify_qemu_malloc(&desc)) {
957 log_mdesc(error, &desc, "<libc_pid=%03u, pid=%03u>: memalign(%X, %u): notify_malloc failed for ",
959 dlfree(desc.ptr);
964 test_access_violation(&desc);
967 log_mdesc(info, &desc, "@@@ <libc_pid=%03u, pid=%03u> memalign(%X, %u) -> ",
969 return mallocdesc_user_ptr(&desc);