user: What is the c source code of the assembly code below?

```asm
<check_errno>:
  endbr64
  push   %rbp
  xor    %eax,%eax
  lea    D57(%rip),%rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x8,%rsp
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  lea    D65(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  add    $0xffffff80,%ebx
  mov    $0xa,%edi
  call   <putchar@plt>
  cmp    $0x4,%ebx
  ja     L46
  lea    D5(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   (%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D20(%rip),%rdi
L10:
  xor    %eax,%eax
  call   <printf@plt>
  add    $0x8,%rsp
  mov    $0xa,%edi
  pop    %rbx
  pop    %rbp
  jmp    1080 <putchar@plt>
  nopl   0x0(%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D62(%rip),%rdi
  jmp    L10
  nopl   0x0(%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D19(%rip),%rdi
  jmp    L10
  nopl   0x0(%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D79(%rip),%rdi
  jmp    L10
  nop
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D67(%rip),%rdi
  jmp    L10
L46:
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D46(%rip),%rdi
  jmp    L10
```

tool_calls: name: disassemble_data
arguments: tag: D57
datatype: string
name: disassemble_data
arguments: tag: D65
datatype: string
name: disassemble_data
arguments: tag: D20
datatype: string
name: disassemble_data
arguments: tag: D62
datatype: string
name: disassemble_data
arguments: tag: D19
datatype: string
name: disassemble_data
arguments: tag: D79
datatype: string
name: disassemble_data
arguments: tag: D67
datatype: string
name: disassemble_data
arguments: tag: D46
datatype: string

tool: D57:  -- [%lu]

tool: D65: errno = [%d]

tool: D20: EDEADLK

tool: D62: EAGAIN

tool: D19: ESRCH

tool: D79: EPERM

tool: D67: EINVAL

tool: D46: no such errno

assistant: ```c
void check_errno(int err) {
  do {
    show_time();
    printf(" -- [%lu]", (unsigned long int)pthread_self());
    printf("errno = [%d]", err);
    printf("\n");
  } while (0);
  switch (err) {
  case EDEADLK:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EDEADLK");
      printf("\n");
    } while (0);
    break;
  case EINVAL:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EINVAL");
      printf("\n");
    } while (0);
    break;
  case ESRCH:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("ESRCH");
      printf("\n");
    } while (0);
    break;
  case EAGAIN:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EAGAIN");
      printf("\n");
    } while (0);
    break;
  case EPERM:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EPERM");
      printf("\n");
    } while (0);
    break;
  default:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("no such errno");
      printf("\n");
    } while (0);
  }
}
```