diff options
Diffstat (limited to 'src/oracle/runtime_ref.c')
| -rw-r--r-- | src/oracle/runtime_ref.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/oracle/runtime_ref.c b/src/oracle/runtime_ref.c new file mode 100644 index 0000000..659661b --- /dev/null +++ b/src/oracle/runtime_ref.c @@ -0,0 +1,19 @@ +/* The few libc symbols ESP-IDF's LL code reaches for, supplied so the reference can link into a + * freestanding image. + * + * There is exactly one so far, and it is reached by design rather than by accident: + * `_uart_ll_set_baudrate` (uart_ll.h:532-535) calls `abort()` when handed an LP_UART instance, + * because that path needs `lp_uart_ll_set_baudrate` instead. The differential harness only ever + * passes HP UART instances, so this is unreachable in practice - but the linker does not know that, + * and a missing `abort` fails the build with a symbol name that explains nothing about why. + * + * Spinning rather than resetting is deliberate: if a reference implementation ever does call this, + * the board stops with its last console line intact, which is the difference between a diagnosable + * failure and a reboot loop. + */ + +__attribute__((noreturn)) void abort(void) +{ + for (;;) { + } +} |
