// File: /workspace/github_c_makefile_star2_O0/cogbee[P]vmir-latest/src/vmir_libc.c
// Function: libc_initialize
static void
libc_initialize(ir_unit_t *iu)
{
  iu->iu_vfd_free = -1;

  if(iu->iu_fsops == NULL)
    iu->iu_fsops = &vmir_sysio_fsops;

  iu->iu_stdin  = vFILE_open(iu, "/dev/stdin",  "r", 1);
  iu->iu_stdout = vFILE_open(iu, "/dev/stdout", "w", 1);
  iu->iu_stderr = vFILE_open(iu, "/dev/stderr", "w", 1);

  const uint32_t vm_stdin  = vmir_host_to_vmaddr(iu, iu->iu_stdin);
  const uint32_t vm_stdout = vmir_host_to_vmaddr(iu, iu->iu_stdout);
  const uint32_t vm_stderr = vmir_host_to_vmaddr(iu, iu->iu_stderr);

  for(int i = 0; i < iu->iu_next_value; i++) {
    ir_value_t *iv = value_get(iu, i);
    if(iv->iv_class != IR_VC_GLOBALVAR)
      continue;

    ir_globalvar_t *ig = iv->iv_gvar;
    if(ig->ig_name == NULL)
      continue;

    const char *name = ig->ig_name;
    if(!strcmp(name, "stdin")) {
      mem_wr32(iu->iu_mem + ig->ig_addr, vm_stdin, iu);
    } else if(!strcmp(name, "stdout")) {
      mem_wr32(iu->iu_mem + ig->ig_addr, vm_stdout, iu);
    } else if(!strcmp(name, "stderr")) {
      mem_wr32(iu->iu_mem + ig->ig_addr, vm_stderr, iu);
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl $0xffffffff, 0xe8(%rax) # imm = 0xFFFFFFFF
movq -0x8(%rbp), %rax
cmpq $0x0, 0xc8(%rax)
jne 0x1803a
movq -0x8(%rbp), %rax
leaq 0x31d6d(%rip), %rcx     # 0x49da0
movq %rcx, 0xc8(%rax)
movq -0x8(%rbp), %rdi
leaq 0x2941f(%rip), %rsi     # 0x41464
leaq 0x263b3(%rip), %rdx     # 0x3e3ff
movl $0x1, %ecx
callq 0x1b210
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0xb0(%rax)
movq -0x8(%rbp), %rdi
leaq 0x29400(%rip), %rsi     # 0x4146f
leaq 0x26d6d(%rip), %rdx     # 0x3ede3
movl $0x1, %ecx
callq 0x1b210
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0xb8(%rax)
movq -0x8(%rbp), %rdi
leaq 0x293e2(%rip), %rsi     # 0x4147b
leaq 0x26d43(%rip), %rdx     # 0x3ede3
movl $0x1, %ecx
callq 0x1b210
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0xc0(%rax)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0xb0(%rax), %rsi
callq 0x39190
movl %eax, -0xc(%rbp)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0xb8(%rax), %rsi
callq 0x39190
movl %eax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0xc0(%rax), %rsi
callq 0x39190
movl %eax, -0x14(%rbp)
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl 0x198(%rcx), %eax
jge 0x1820e
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x20ee0
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x2, (%rax)
je 0x18135
jmp 0x18200
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x18151
jmp 0x18200
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
leaq 0x29301(%rip), %rsi     # 0x41469
callq 0x32d0
cmpl $0x0, %eax
jne 0x18192
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movl 0x28(%rax), %eax
addq %rax, %rdi
movl -0xc(%rbp), %esi
movq -0x8(%rbp), %rdx
callq 0x192c0
jmp 0x181fe
movq -0x30(%rbp), %rdi
leaq 0x292d7(%rip), %rsi     # 0x41474
callq 0x32d0
cmpl $0x0, %eax
jne 0x181c7
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movl 0x28(%rax), %eax
addq %rax, %rdi
movl -0x10(%rbp), %esi
movq -0x8(%rbp), %rdx
callq 0x192c0
jmp 0x181fc
movq -0x30(%rbp), %rdi
leaq 0x292ae(%rip), %rsi     # 0x41480
callq 0x32d0
cmpl $0x0, %eax
jne 0x181fa
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movl 0x28(%rax), %eax
addq %rax, %rdi
movl -0x14(%rbp), %esi
movq -0x8(%rbp), %rdx
callq 0x192c0
jmp 0x181fc
jmp 0x181fe
jmp 0x18200
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x18104
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)