// File: /workspace/github_c_makefile_star2_O0/haxlang[P]hax/haxCkalloc.c
// Function: Hax_DbCkalloc
void *
Hax_DbCkalloc(
    Hax_Memoryp *memoryp,
    unsigned long int size,
    char        *file,
    int          line)
{
    Memoryp           *memCtx = (Memoryp *) memoryp;
    struct mem_header *result;

    if (memCtx->validate_memory)
        Hax_ValidateAllMemory (memoryp, file, line);

    result = (struct mem_header *)malloc(size +
                              sizeof(struct mem_header) + GUARD_SIZE);
    if (result == NULL) {
        dump_memory_info(memCtx);
        Hax_Panic((char *) "unable to alloc %lu bytes, %s line %d", size, file,
              line);
    }

    /*
     * Fill in guard zones and size.  Link into allocated list.
     */
    result->length = size;
    result->file = file;
    result->line = line;
    memset ((char *) result->low_guard, GUARD_VALUE, GUARD_SIZE);
    memset (result->body + size, GUARD_VALUE, GUARD_SIZE);
    result->flink = memCtx->allocHead;
    result->blink = NULL;
    if (memCtx->allocHead != NULL)
        memCtx->allocHead->blink = result;
    memCtx->allocHead = result;

    memCtx->total_mallocs++;
    if (memCtx->trace_on_at_malloc &&
	(memCtx->total_mallocs >= memCtx->trace_on_at_malloc)) {
        printf("reached malloc trace enable point (%lld)\n",
                memCtx->total_mallocs);
        memCtx->alloc_tracing = TRUE;
        memCtx->trace_on_at_malloc = 0;
    }

    if (memCtx->alloc_tracing)
        printf("ckalloc %p %lu %s %d\n", result->body, size,
                file, line);

    if (memCtx->break_on_malloc &&
	(memCtx->total_mallocs >= memCtx->break_on_malloc)) {
        memCtx->break_on_malloc = 0;
        printf("reached malloc break limit (%lld)\n",
                memCtx->total_mallocs);
        printf("program will now enter C debugger\n");
	Hax_Breakpoint();
    }

    memCtx->current_malloc_packets++;
    if (memCtx->current_malloc_packets > memCtx->maximum_malloc_packets)
        memCtx->maximum_malloc_packets = memCtx->current_malloc_packets;
    memCtx->current_bytes_malloced += size;
    if (memCtx->current_bytes_malloced > memCtx->maximum_bytes_malloced)
        memCtx->maximum_bytes_malloced = memCtx->current_bytes_malloced;

    if (memCtx->init_malloced_bodies)
        memset (result->body, 0xff, (int) size);

    return result->body;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x48(%rax)
je 0x8769
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %edx
callq 0x42e0
movq -0x10(%rbp), %rdi
addq $0x38, %rdi
addq $0x8, %rdi
callq 0x4410
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x87a7
movq -0x28(%rbp), %rdi
callq 0x89b0
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movl -0x1c(%rbp), %ecx
leaq 0x14c8f(%rip), %rdi     # 0x1d42f
movb $0x0, %al
callq 0x4120
movq -0x10(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x8(%rax)
movl -0x1c(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x30(%rbp), %rdi
addq $0x28, %rdi
movl $0xe1, %esi
movl $0x8, %edx
callq 0x4290
movq -0x30(%rbp), %rdi
addq $0x30, %rdi
addq -0x10(%rbp), %rdi
movl $0xe1, %esi
movl $0x8, %edx
callq 0x4290
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x30(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0x882e
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rcx, 0x20(%rax)
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x3c(%rax)
je 0x8894
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
movslq 0x3c(%rcx), %rcx
cmpq %rcx, %rax
jl 0x8894
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x14bde(%rip), %rdi     # 0x1d455
movb $0x0, %al
callq 0x4240
movq -0x28(%rbp), %rax
movl $0x1, 0x40(%rax)
movq -0x28(%rbp), %rax
movl $0x0, 0x3c(%rax)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x40(%rax)
je 0x88c0
movq -0x30(%rbp), %rsi
addq $0x30, %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
movl -0x1c(%rbp), %r8d
leaq 0x14bc6(%rip), %rdi     # 0x1d47f
movb $0x0, %al
callq 0x4240
movq -0x28(%rbp), %rax
cmpl $0x0, 0x38(%rax)
je 0x8913
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
movslq 0x38(%rcx), %rcx
cmpq %rcx, %rax
jl 0x8913
movq -0x28(%rbp), %rax
movl $0x0, 0x38(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x14b9c(%rip), %rdi     # 0x1d495
movb $0x0, %al
callq 0x4240
leaq 0x14bb1(%rip), %rdi     # 0x1d4b8
movb $0x0, %al
callq 0x4240
callq 0x4270
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jbe 0x8945
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rcx
movq -0x28(%rbp), %rax
addq 0x18(%rax), %rcx
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jbe 0x8977
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x44(%rax)
je 0x899a
movq -0x30(%rbp), %rdi
addq $0x30, %rdi
movq -0x10(%rbp), %rax
movslq %eax, %rdx
movl $0xff, %esi
callq 0x4290
movq -0x30(%rbp), %rax
addq $0x30, %rax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)