// File: /workspace/github_c_makefile_star2_O1/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 0xe5df
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 0xe508
movl 0x2f08a(%rip), %edi     # 0x3d674
callq 0x3110
testq %rax, %rax
jne 0xe613
leaq 0x86d4(%rip), %rdi      # 0x16ccf
leaq 0x86b1(%rip), %rsi      # 0x16cb3
leaq 0x86ef(%rip), %rcx      # 0x16cf8
movl $0x28, %edx
callq 0x3220
movl 0x2f05b(%rip), %edi     # 0x3d674
callq 0x3110
movl $0x1, 0xc8(%rax)
movl 0x2f046(%rip), %edi     # 0x3d674
callq 0x3110
movl %ebp, 0xcc(%rax)
movl 0x2f035(%rip), %edi     # 0x3d674
callq 0x3110
movl $0x0, 0xd0(%rax)
movl 0x2f020(%rip), %edi     # 0x3d674
callq 0x3110
movq %rbx, 0xd8(%rax)
testq %rbx, %rbx
je 0xe727
movq %rbx, %rdi
movl $0x25, %esi
callq 0x31c0
testq %rax, %rax
je 0xe727
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 0x33d0
testq %rax, %rax
jne 0xe6ea
leaq 0x8632(%rip), %r14      # 0x16d1a
jmp 0xe715
movq %rax, %r14
leaq 0x10(%rsp), %rcx
movq %rax, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x3100
movl 0x2ef6e(%rip), %edi     # 0x3d674
callq 0x3110
movl $0x1, 0xd0(%rax)
movl 0x2ef59(%rip), %edi     # 0x3d674
callq 0x3110
movq %r14, 0xd8(%rax)
movl 0x2ef47(%rip), %edi     # 0x3d674
callq 0x3110
movq %rax, %rdi
movl $0x1, %esi
callq 0x3470
nop