user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<check_errno>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    $0x0,%eax
  call   <show_time@plt>
  mov    $0x0,%eax
  call   <pthread_self@plt>
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x4(%rbp),%eax
  mov    %eax,%esi
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    -0x4(%rbp),%eax
  add    $0xffffff80,%eax
  cmp    $0x4,%eax
  ja     L47
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D32(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D32(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  call   <show_time@plt>
  mov    $0x0,%eax
  call   <pthread_self@plt>
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L44
  mov    $0x0,%eax
  call   <show_time@plt>
  mov    $0x0,%eax
  call   <pthread_self@plt>
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L44
  mov    $0x0,%eax
  call   <show_time@plt>
  mov    $0x0,%eax
  call   <pthread_self@plt>
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L44
  mov    $0x0,%eax
  call   <show_time@plt>
  mov    $0x0,%eax
  call   <pthread_self@plt>
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L44
  mov    $0x0,%eax
  call   <show_time@plt>
  mov    $0x0,%eax
  call   <pthread_self@plt>
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  jmp    L44
L47:
  mov    $0x0,%eax
  call   <show_time@plt>
  mov    $0x0,%eax
  call   <pthread_self@plt>
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  nop
L44:
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D30
type: string
name: disassemble_data
arguments: data_label: D93
type: string
name: disassemble_data
arguments: data_label: D154
type: string
name: disassemble_data
arguments: data_label: D47
type: string
name: disassemble_data
arguments: data_label: D26
type: string
name: disassemble_data
arguments: data_label: D95
type: string
name: disassemble_data
arguments: data_label: D90
type: string
name: disassemble_data
arguments: data_label: D128
type: string

tool: D30:  -- [%lu]

tool: D93: errno = [%d]

tool: D154: EDEADLK

tool: D47: EINVAL

tool: D26: ESRCH

tool: D95: EAGAIN

tool: D90: EPERM

tool: D128: 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);
  }
}
```