From a1f809fcc5dd91d2393e2ec3f6044e1afeb83438 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 15 Oct 2018 15:02:56 +0800 Subject: [PATCH] bootloader: provide implementation of `abort` ROM definition of `abort` was removed in 9240bbb. The old definition resulted in a panic due to a jump to a null pointer (abort member in ROM stub table was zero). The new definition triggers a debug exception if JTAG is connected, or goes into an infinite loop to be reset by the WDT. --- components/bootloader_support/src/bootloader_init.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/components/bootloader_support/src/bootloader_init.c b/components/bootloader_support/src/bootloader_init.c index 68e2101ef..22636be94 100644 --- a/components/bootloader_support/src/bootloader_init.c +++ b/components/bootloader_support/src/bootloader_init.c @@ -537,3 +537,14 @@ void __assert_func(const char *file, int line, const char *func, const char *exp ESP_LOGE(TAG, "Assert failed in %s, %s:%d (%s)", func, file, line, expr); while(1) {} } + +void abort() +{ +#if !CONFIG_ESP32_PANIC_SILENT_REBOOT + ets_printf("abort() was called at PC 0x%08x\r\n", (intptr_t)__builtin_return_address(0) - 3); +#endif + if (esp_cpu_in_ocd_debug_mode()) { + __asm__ ("break 0,0"); + } + while(1) {} +}