1616#include <time.h>
1717#include <zephyr/drivers/pinctrl.h>
1818
19- #define FORCE_EXPORT_SYM (name ) \
20- extern void name(void); \
21- EXPORT_SYMBOL(name);
19+ #define FORCE_EXPORT_SYM (name ) \
20+ extern void name(void); \
21+ EXPORT_SYMBOL(name);
2222
2323/*
2424 * Libc functions are exported with a __real_ prefix so that the sketch
2828 */
2929#define EXPORT_LIBC_SYM (name ) EXPORT_SYMBOL_NAMED(name, __real_##name)
3030
31+ /*
32+ * ARM RTABI __aeabi_* functions need naked assembly trampolines to avoid
33+ * corrupting argument registers with standard C function prologue/epilogue.
34+ */
35+ #define EXPORT_AEABI_SYM (name ) \
36+ extern void name(void); \
37+ EXPORT_LIBC_SYM(name)
38+
3139// string.h
3240EXPORT_LIBC_SYM (memcpy );
3341EXPORT_LIBC_SYM (memmove );
@@ -290,8 +298,8 @@ EXPORT_SYMBOL(k_work_schedule_for_queue);
290298EXPORT_SYMBOL (k_work_reschedule_for_queue );
291299EXPORT_SYMBOL (k_work_queue_start );
292300EXPORT_SYMBOL (k_work_submit_to_queue );
293- //FORCE_EXPORT_SYM(k_timer_user_data_set);
294- //FORCE_EXPORT_SYM(k_timer_start);
301+ // FORCE_EXPORT_SYM(k_timer_user_data_set);
302+ // FORCE_EXPORT_SYM(k_timer_start);
295303
296304EXPORT_SYMBOL (time );
297305EXPORT_SYMBOL (sys_clock_settime );
@@ -316,39 +324,45 @@ EXPORT_SYMBOL(ring_buf_area_finish);
316324#endif
317325
318326EXPORT_SYMBOL (sys_clock_cycle_get_32 );
319- FORCE_EXPORT_SYM (__aeabi_dcmpun );
320- FORCE_EXPORT_SYM (__aeabi_dcmple );
321- FORCE_EXPORT_SYM (__aeabi_d2lz );
322- FORCE_EXPORT_SYM (__aeabi_uldivmod );
323- FORCE_EXPORT_SYM (__aeabi_ui2d );
324- FORCE_EXPORT_SYM (__aeabi_dcmplt );
325- FORCE_EXPORT_SYM (__aeabi_ddiv );
326- FORCE_EXPORT_SYM (__aeabi_dmul );
327- FORCE_EXPORT_SYM (__aeabi_d2f );
328- FORCE_EXPORT_SYM (__aeabi_fcmpun );
329- extern double __aeabi_dadd (double , double );
330- EXPORT_LIBC_SYM (__aeabi_dadd );
331- FORCE_EXPORT_SYM (__aeabi_fcmple );
332- FORCE_EXPORT_SYM (__aeabi_idiv );
333- extern int __aeabi_dcmpgt (double , double );
334- EXPORT_LIBC_SYM (__aeabi_dcmpgt );
335- FORCE_EXPORT_SYM (__aeabi_dsub );
336- FORCE_EXPORT_SYM (__aeabi_i2d );
337- FORCE_EXPORT_SYM (__aeabi_uidiv );
338- FORCE_EXPORT_SYM (__aeabi_l2d );
339- FORCE_EXPORT_SYM (__aeabi_d2uiz );
340- FORCE_EXPORT_SYM (__aeabi_uidivmod );
341- FORCE_EXPORT_SYM (__aeabi_dcmpeq );
342- FORCE_EXPORT_SYM (__aeabi_d2iz );
343- FORCE_EXPORT_SYM (__aeabi_f2d );
344- FORCE_EXPORT_SYM (__aeabi_ul2d );
345- FORCE_EXPORT_SYM (__aeabi_l2f );
346- FORCE_EXPORT_SYM (__aeabi_idivmod );
347- FORCE_EXPORT_SYM (__aeabi_ldivmod );
348- FORCE_EXPORT_SYM (__aeabi_ul2f );
349- FORCE_EXPORT_SYM (__aeabi_dcmpge );
350-
351- #if defined (CONFIG_CPP )
327+
328+ /* compiler ABI helpers: exported as __real_##name for VN() trampolines in llext_wrappers.c */
329+ /* double arithmetic */
330+ EXPORT_AEABI_SYM (__aeabi_dadd );
331+ EXPORT_AEABI_SYM (__aeabi_dsub );
332+ EXPORT_AEABI_SYM (__aeabi_dmul );
333+ EXPORT_AEABI_SYM (__aeabi_ddiv );
334+ /* double comparisons */
335+ EXPORT_AEABI_SYM (__aeabi_dcmpeq );
336+ EXPORT_AEABI_SYM (__aeabi_dcmplt );
337+ EXPORT_AEABI_SYM (__aeabi_dcmple );
338+ EXPORT_AEABI_SYM (__aeabi_dcmpgt );
339+ EXPORT_AEABI_SYM (__aeabi_dcmpge );
340+ EXPORT_AEABI_SYM (__aeabi_dcmpun );
341+ /* float comparisons */
342+ EXPORT_AEABI_SYM (__aeabi_fcmple );
343+ EXPORT_AEABI_SYM (__aeabi_fcmpun );
344+ /* double <-> integer conversions */
345+ EXPORT_AEABI_SYM (__aeabi_d2iz );
346+ EXPORT_AEABI_SYM (__aeabi_d2uiz );
347+ EXPORT_AEABI_SYM (__aeabi_d2lz );
348+ EXPORT_AEABI_SYM (__aeabi_i2d );
349+ EXPORT_AEABI_SYM (__aeabi_ui2d );
350+ EXPORT_AEABI_SYM (__aeabi_l2d );
351+ EXPORT_AEABI_SYM (__aeabi_ul2d );
352+ /* float <-> double / integer conversions */
353+ EXPORT_AEABI_SYM (__aeabi_d2f );
354+ EXPORT_AEABI_SYM (__aeabi_f2d );
355+ EXPORT_AEABI_SYM (__aeabi_l2f );
356+ EXPORT_AEABI_SYM (__aeabi_ul2f );
357+ /* integer division */
358+ EXPORT_AEABI_SYM (__aeabi_idiv );
359+ EXPORT_AEABI_SYM (__aeabi_uidiv );
360+ EXPORT_AEABI_SYM (__aeabi_idivmod );
361+ EXPORT_AEABI_SYM (__aeabi_uidivmod );
362+ EXPORT_AEABI_SYM (__aeabi_ldivmod );
363+ EXPORT_AEABI_SYM (__aeabi_uldivmod );
364+
365+ #if defined(CONFIG_CPP )
352366FORCE_EXPORT_SYM (__cxa_pure_virtual );
353367#endif
354368
0 commit comments