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

```asm
<data_abort>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%r15
  mov    %rsi,%r14
  mov    %rdx,%r13
  mov    %rcx,%r12
  mov    %r8,%rbx
  mov    %r9,%rbp
  lea    D37(%rip),%rdi
  call   <uart0_write@plt>
  lea    D25(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r15,%rdi
  call   <uart0_write_hex@plt>
  lea    D24(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r14,%rdi
  call   <uart0_write_hex@plt>
  lea    D75(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r13,%rdi
  call   <uart0_write_hex@plt>
  lea    D7(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r12,%rdi
  call   <uart0_write_hex@plt>
  lea    D111(%rip),%rdi
  call   <uart0_write@plt>
  mov    %rbp,%rdi
  call   <uart0_write_hex@plt>
  lea    D154(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x40(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D79(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x48(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D17(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x50(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D42(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x58(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D23(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x60(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D78(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x68(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D43(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x70(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D118(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x78(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D120(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x80(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D18(%rip),%rdi
  call   <uart0_write@plt>
  mov    %rbx,%rdi
  call   <uart0_write_hex@plt>
  mov    $0x5dc,%edi
  call   <panic_blink@plt>
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D37
type: string
name: extract_symbolic_data
arguments: tag: D25
type: string
name: extract_symbolic_data
arguments: tag: D24
type: string
name: extract_symbolic_data
arguments: tag: D75
type: string
name: extract_symbolic_data
arguments: tag: D7
type: string
name: extract_symbolic_data
arguments: tag: D111
type: string
name: extract_symbolic_data
arguments: tag: D154
type: string
name: extract_symbolic_data
arguments: tag: D79
type: string
name: extract_symbolic_data
arguments: tag: D17
type: string
name: extract_symbolic_data
arguments: tag: D42
type: string
name: extract_symbolic_data
arguments: tag: D23
type: string
name: extract_symbolic_data
arguments: tag: D78
type: string
name: extract_symbolic_data
arguments: tag: D43
type: string
name: extract_symbolic_data
arguments: tag: D118
type: string
name: extract_symbolic_data
arguments: tag: D120
type: string
name: extract_symbolic_data
arguments: tag: D18
type: string

tool: D37: data abort!


tool: D25:  r0   

tool: D24:  r1   

tool: D75:  r2   

tool: D7:  r3   

tool: D111:  r4   

tool: D154:  r5   

tool: D79:  r6   

tool: D17:  r7   

tool: D42:  r8   

tool: D23:  r9   

tool: D78:  r10  

tool: D43:  r11  

tool: D118:  ip   

tool: D120:  pc   

tool: D18:  cpsr 

assistant: ```c
void data_abort(long r_0, long r_1, long r_2, long r_3, long spsr, long r_4, long r_5, long r_6, long r_7, long r_8, long r_9, long r_10, long r_11, long r_12, long prev_pc) {
  uart0_write("data abort!\r\n");
  uart0_write(" r0   ");
  uart0_write_hex(r_0);
  uart0_write(" r1   ");
  uart0_write_hex(r_1);
  uart0_write(" r2   ");
  uart0_write_hex(r_2);
  uart0_write(" r3   ");
  uart0_write_hex(r_3);
  uart0_write(" r4   ");
  uart0_write_hex(r_4);
  uart0_write(" r5   ");
  uart0_write_hex(r_5);
  uart0_write(" r6   ");
  uart0_write_hex(r_6);
  uart0_write(" r7   ");
  uart0_write_hex(r_7);
  uart0_write(" r8   ");
  uart0_write_hex(r_8);
  uart0_write(" r9   ");
  uart0_write_hex(r_9);
  uart0_write(" r10  ");
  uart0_write_hex(r_10);
  uart0_write(" r11  ");
  uart0_write_hex(r_11);
  uart0_write(" ip   ");
  uart0_write_hex(r_12);
  uart0_write(" pc   ");
  uart0_write_hex(prev_pc);
  uart0_write(" cpsr ");
  uart0_write_hex(spsr);
  panic_blink(1500);
}
```