circuitpython/supervisor
Jeff Epler 726dcdb60a Add some NORETURN attributes
I have a function where it should be impossible to reach the end, so I put in a safe-mode reset at the bottom:
```
int find_unused_slot(void) {
    // precondition: you already verified that a slot was available
    for (int i=0; i<NUM_SLOTS; i++) {
        if( slot_free(i)) {
            return i;
        }
    }
    safe_mode_reset(MICROPY_FATAL_ERROR);
}
```
However, the compiler still gave a diagnostic, because safe_mode_reset was not declared NORETURN.

So I started by teaching the compiler that reset_into_safe_mode never returned.  This leads at least one level deeper due to reset_cpu needing to be a NORETURN function.  Each port is a little different in this area.  I also marked reset_to_bootloader as NORETURN.
Additional notes:

 * stm32's reset_to_bootloader was not implemented, but now does a bare reset.  Most stm32s are not fitted with uf2 bootloaders anyway.
 * ditto cxd56
 * esp32s2 did not implement reset_cpu at all.  I used esp_restart().  (not tested)
 * litex did not implement reset_cpu at all.  I used reboot_ctrl_write.  But notably this is what reset_to_bootloader already did, so one or the other must be incorrect (not tested).  reboot_ctrl_write cannot be declared NORETURN, as it returns unless the special value 0xac is written), so a new unreachable forever-loop is added.
 * cxd56's reset is via a boardctl() call which can't generically be declared NORETURN, so a new unreacahble "for(;;)" forever-loop is added.
 * In several places, NVIC_SystemReset is redeclared with NORETURN applied.  This is accepted just fine by gcc.  I chose this as preferable to editing the multiple copies of CMSIS headers where it is normally declared.
 * the stub safe_mode reset simply aborts.  This is used in mpy-cross.
2020-09-28 18:55:56 -05:00
..
messages Support internationalisation. 2018-08-07 14:58:57 -07:00
shared Add some NORETURN attributes 2020-09-28 18:55:56 -05:00
stub Add some NORETURN attributes 2020-09-28 18:55:56 -05:00
background_callback.h background_callback: Add gc collect callback 2020-07-17 08:36:26 -05:00
cpu.h Mark pointers in cpu registers as in use. 2018-07-03 05:45:50 -07:00
filesystem.h flush flash filesystem once a second 2019-03-20 12:21:36 -04:00
flash_root_pointers.h Move atmel-samd to tinyusb and support nRF flash. 2018-11-08 17:25:30 -08:00
flash.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
linker.h Linker file restructure, TCM and MPU additions 2020-04-03 16:33:18 -04:00
memory.h allow retrieving info about a supervisor allocation 2020-04-14 18:24:54 -05:00
port.h Add some NORETURN attributes 2020-09-28 18:55:56 -05:00
serial.h supervisor: Improve serial connection detection 2020-09-17 18:32:06 -05:00
spi_flash_api.h Implement requested changes 2020-01-28 17:11:25 -05:00
supervisor.mk Merge remote-tracking branch 'adafruit/main' into ble_hci 2020-08-21 10:45:05 -04:00
usb.h Merge pull request #3223 from dhalbert/unmount-before-reset 2020-07-29 10:47:24 -07:00