A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd

arm: add div0 handler for 64-bit division on ARMv7-M

Even though ARMv7-M has a hardware divider, 64-bit division is
handled in software and needs a div0 handler. The libgcc routines
call __aeabi_{i,l}div0 so we alias those to __div0.

Change-Id: I5152c43d39e25e03f31404753f13978a614aca06

+14 -1
+5
apps/plugins/lib/gcc-support.c
··· 27 27 { 28 28 asm volatile("bx %0" : : "r"(rb->__div0)); 29 29 } 30 + 31 + #if defined(CPU_ARM_MICRO) 32 + void __aeabi_idiv0(void) __attribute__((alias("__div0"))); 33 + void __aeabi_ldiv0(void) __attribute__((alias("__div0"))); 34 + #endif 30 35 #endif 31 36 32 37 void *memcpy(void *dest, const void *src, size_t n)
+1 -1
firmware/export/config.h
··· 710 710 # elif ARM_PROFILE == ARM_PROFILE_CLASSIC 711 711 # define CPU_ARM_CLASSIC 712 712 # endif 713 - # if !defined(ARM_HAVE_HW_DIV) && (CONFIG_PLATFORM & PLATFORM_NATIVE) 713 + # if (CONFIG_PLATFORM & PLATFORM_NATIVE) 714 714 # define ARM_NEED_DIV0 715 715 # endif 716 716 #endif
+8
firmware/target/arm/system-arm-micro.c
··· 38 38 while (1); 39 39 } 40 40 41 + void __div0(void) 42 + { 43 + while (1); 44 + } 45 + 46 + void __aeabi_idiv0(void) __attribute__((alias("__div0"))); 47 + void __aeabi_ldiv0(void) __attribute__((alias("__div0"))); 48 + 41 49 #define ATTR_IRQ_HANDLER __attribute__((weak, alias("UIE"))) 42 50 43 51 void nmi_handler(void) ATTR_IRQ_HANDLER;