// File: /workspace/github_c_makefile_star2_O3/madler[P]pigz/try.c
// Function: try_throw_
void try_throw_(int code, char *fmt, ...)
{
    /* save the thrown information in the try stack before jumping */
    try_setup_();
    assert(try_stack_ != NULL && "try: naked throw");
    try_stack_->ball.ret = 1;
    try_stack_->ball.code = code;
    try_stack_->ball.free = 0;
    try_stack_->ball.why = fmt;

    /* consider the second argument to be a string, and if it has formatting
       commands, process them with the subsequent arguments of throw, saving
       the result in allocated memory -- this if statement and clause must be
       updated for a different interpretation of the throw() arguments and
       different contents of the ball_t structure */
    if (fmt != NULL && strchr(fmt, '%') != NULL) {
        char *why, nul[1];
        size_t len;
        va_list ap1, ap2;

        va_start(ap1, fmt);
        va_copy(ap2, ap1);
        len = vsnprintf(nul, 1, fmt, ap1);
        va_end(ap1);
        why = malloc(len + 1);
        if (why == NULL)
            try_stack_->ball.why = "try: out of memory";
        else {
            vsnprintf(why, len + 1, fmt, ap2);
            va_end(ap2);
            try_stack_->ball.free = 1;
            try_stack_->ball.why = why;
        }
    }

    /* jump to the end of the nearest enclosing try block */
    longjmp(try_stack_->env, 1);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rsi, %rbx
movl %edi, %ebp
movq %rdx, 0x60(%rsp)
movq %rcx, 0x68(%rsp)
movq %r8, 0x70(%rsp)
movq %r9, 0x78(%rsp)
testb %al, %al
je 0xe977
movaps %xmm0, 0x80(%rsp)
movaps %xmm1, 0x90(%rsp)
movaps %xmm2, 0xa0(%rsp)
movaps %xmm3, 0xb0(%rsp)
movaps %xmm4, 0xc0(%rsp)
movaps %xmm5, 0xd0(%rsp)
movaps %xmm6, 0xe0(%rsp)
movaps %xmm7, 0xf0(%rsp)
callq 0xe8a0
movl 0x2ed02(%rip), %edi     # 0x3d684
callq 0x3110
testq %rax, %rax
jne 0xe9ab
leaq 0x833c(%rip), %rdi      # 0x16ccf
leaq 0x8319(%rip), %rsi      # 0x16cb3
leaq 0x8357(%rip), %rcx      # 0x16cf8
movl $0x28, %edx
callq 0x3220
movl 0x2ecd3(%rip), %edi     # 0x3d684
callq 0x3110
movl $0x1, 0xc8(%rax)
movl 0x2ecbe(%rip), %edi     # 0x3d684
callq 0x3110
movl %ebp, 0xcc(%rax)
movl 0x2ecad(%rip), %edi     # 0x3d684
callq 0x3110
movl $0x0, 0xd0(%rax)
movl 0x2ec98(%rip), %edi     # 0x3d684
callq 0x3110
movq %rbx, 0xd8(%rax)
testq %rbx, %rbx
je 0xeabf
movq %rbx, %rdi
movl $0x25, %esi
callq 0x31c0
testq %rax, %rax
je 0xeabf
movabsq $0x3000000010, %rax     # imm = 0x3000000010
leaq 0x30(%rsp), %rcx
movq %rax, (%rcx)
leaq 0x130(%rsp), %rax
movq %rax, 0x8(%rcx)
leaq 0x50(%rsp), %rax
movq %rax, 0x10(%rcx)
movq %rax, 0x20(%rsp)
movq (%rcx), %rax
movq %rax, 0x10(%rsp)
movq 0x8(%rcx), %rax
movq %rax, 0x18(%rsp)
leaq 0xf(%rsp), %rdi
movl $0x1, %esi
movq %rbx, %rdx
callq 0x3100
movslq %eax, %r15
incq %r15
movq %r15, %rdi
callq 0x33e0
testq %rax, %rax
jne 0xea82
leaq 0x829a(%rip), %r14      # 0x16d1a
jmp 0xeaad
movq %rax, %r14
leaq 0x10(%rsp), %rcx
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x3100
movl 0x2ebe6(%rip), %edi     # 0x3d684
callq 0x3110
movl $0x1, 0xd0(%rax)
movl 0x2ebd1(%rip), %edi     # 0x3d684
callq 0x3110
movq %r14, 0xd8(%rax)
movl 0x2ebbf(%rip), %edi     # 0x3d684
callq 0x3110
movq %rax, %rdi
movl $0x1, %esi
callq 0x3480
nop