# XO0608: two C ABI export modules define the same function name

Every top level function of std/native/llrt/cabi.xo and the cabi_*.xo modules (except cabi_libc's, which keep their C names) becomes the C ABI symbol `xo_x_<name>`, and all of those modules share that one namespace. Two of them defining a function of the same name would give the program two definitions of one symbol, which the assembler or linker rejects. The checker reports the second definition and notes the first. Only the native std's own modules are export modules, so user code never sees this. Rename one of the two (grep the cabi modules for the name first).

## Example

```xo
// std/native/llrt/cabi_poll.xo
fn poll_wait(ep: Int, evs: Int, n: Int, ms: Int) -> Int { 0 }

// std/native/llrt/cabi.xo
fn poll_wait(c: Int) {}
```

## Fix

```xo
// std/native/llrt/cabi_poll.xo
fn poll_wait(ep: Int, evs: Int, n: Int, ms: Int) -> Int { 0 }

// std/native/llrt/cabi.xo
fn poll_park_wait(c: Int) {}
```

Run `xo explain XO0608` for this text in a terminal, or see
[section 10.6 of the specification](../../spec/core/#106-diagnostic-codes).

