When compiling the following code in Thumb mode on armv6 FreeBSD 13, linking fails due to an undefined symbol __aeabi_d2iz. On armv7 FreeBSD 13 the issue is not directly reproducible because this support function is not needed, but you can pass -march=armv6 to make it fail the same way. #include <stdio.h> #include <stdlib.h> int main() { double f; f = strtod("1.0", NULL); printf("%u\n", (unsigned int)f); } To compile, type: $ cc -mthumb -o x x.c ld: error: undefined symbol: __aeabi_d2uiz >>> referenced by x.c >>> /tmp/x-c2541a.o:(main) >>> did you mean: __aeabi_d2iz >>> defined in: /lib/libc.so.7 cc: error: linker command failed with exit code 1 (use -v to see invocation) It appears that this function is missing despite being provided in contrib/llvm-project/compiler-rt/lib/builtins/fixunsdfsi.c.
Sorry, it's __aeabi_d2uiz of course.
contrib/llvm-project/compiler-rt/lib/builtins/fixunsdfsi.c: COMPILER_RT_ABI su_int __fixunsdfsi(fp_t a) { return __fixuint(a); } #if defined(__ARM_EABI__) #if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI su_int __aeabi_d2uiz(fp_t a) { return __fixunsdfsi(a); } #else COMPILER_RT_ALIAS(__fixunsdfsi, __aeabi_d2uiz) #endif #endif Presumably making this available is just a matter of #defines and Symbol.map entries.
*** This bug has been marked as a duplicate of bug 271087 ***