user: Please show me the C implementation that matches the assembly code listed below:

```asm
<send_error>:
  endbr64
  lea    -0x80(%rdi),%eax
  cmp    $0xa,%eax
  ja     L0
  lea    D45(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  lea    D21(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  cs nopw 0x0(%rax,%rax,1)
  lea    D27(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D60(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D116(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D12(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D38(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D81(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D16(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D80(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D118(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
  xchg   %ax,%ax
  lea    D94(%rip),%rdi
  xor    %eax,%eax
  jmp    1050 <info_log@plt>
L0:
  mov    %edi,%esi
  xor    %eax,%eax
  lea    D20(%rip),%rdi
  jmp    1050 <info_log@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D21
type_guessed: string
name: extract_symbolic_data
arguments: label: D27
type_guessed: string
name: extract_symbolic_data
arguments: label: D60
type_guessed: string
name: extract_symbolic_data
arguments: label: D116
type_guessed: string
name: extract_symbolic_data
arguments: label: D12
type_guessed: string
name: extract_symbolic_data
arguments: label: D38
type_guessed: string
name: extract_symbolic_data
arguments: label: D81
type_guessed: string
name: extract_symbolic_data
arguments: label: D16
type_guessed: string
name: extract_symbolic_data
arguments: label: D80
type_guessed: string
name: extract_symbolic_data
arguments: label: D118
type_guessed: string
name: extract_symbolic_data
arguments: label: D94
type_guessed: string
name: extract_symbolic_data
arguments: label: D20
type_guessed: string

tool: D21: send error: EBADF (bad file descriptor)


tool: D27: send error: EAGAIN(would have blocked)


tool: D60: send error: EPIPE


tool: D116: send error: EOPNOTSUPP


tool: D12: send error: ENOTSOCK:(not a socket)


tool: D38: send error: ENOTCONN:(socket not connected


tool: D81: send error: EMSGSIZE(message size too big)


tool: D16: send error: EINVAL(Invalid arguement)


tool: D80: send error: EINTR(Interrupted by signal)


tool: D118: send error: EFAULT(invalid userspace address)


tool: D94: send error: ECONNRESET(connection reset by peer)


tool: D20: Send: (%i)unknown errror


assistant: ```c
void send_error(int err) {
  switch (err) {
  case EBADF: {
    info_log("send error: EBADF (bad file descriptor)\n");
    return;
  }
  case EAGAIN: {
    info_log("send error: EAGAIN(would have blocked)\n");
    return;
  }
  case ECONNRESET: {
    info_log("send error: ECONNRESET(connection reset by peer)\n");
    return;
  }
  case EFAULT: {
    info_log("send error: EFAULT(invalid userspace address)\n");
    return;
  }
  case EINTR: {
    info_log("send error: EINTR(Interrupted by signal)\n");
    return;
  }
  case EINVAL: {
    info_log("send error: EINVAL(Invalid arguement)\n");
    return;
  }
  case EMSGSIZE: {
    info_log("send error: EMSGSIZE(message size too big)\n");
    return;
  }
  case ENOTSOCK: {
    info_log("send error: ENOTSOCK:(not a socket)\n");
    return;
  }
  case ENOTCONN: {
    info_log("send error: ENOTCONN:(socket not connected\n");
    return;
  }
  case EOPNOTSUPP: {
    info_log("send error: EOPNOTSUPP\n");
    return;
  }
  case EPIPE: {
    info_log("send error: EPIPE\n");
    return;
  }
  default: {
    info_log("Send: (%i)unknown errror\n", err);
    return;
  }
  }
}
```