[Bug 282705] Undefined symbols on armv7: "ld: error: undefined symbol: __truncdfsf2", "ld: error: undefined symbol: __nedf2", etc on the port graphics/oculante
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 15 Nov 2024 18:00:57 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=282705 --- Comment #3 from Dimitry Andric <dim@FreeBSD.org> --- Looks like the rabbit hole goes a little deeper. We already compile VFP versions of these, via the Makefile.inc fragment: .for file in ${SRCF} .if ${MACHINE_CPUARCH} == "arm" && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "") \ && exists(${CRTSRC}/${CRTARCH}/${file}vfp.S) SRCS+= ${file}vfp.S . elif exists(${CRTSRC}/${CRTARCH}/${file}.S) SRCS+= ${file}.S . else SRCS+= ${file}.c . endif .endfor In contrib/llvm-project/compiler-rt/lib/builtins/arm there are: adddf3vfp.S addsf3vfp.S divdf3vfp.S divsf3vfp.S extendsfdf2vfp.S fixdfsivfp.S fixsfsivfp.S floatsidfvfp.S floatsisfvfp.S muldf3vfp.S mulsf3vfp.S subdf3vfp.S subsf3vfp.S truncdfsf2vfp.S and a bunch more. However, llvm does not emit these on FreeBSD. In contrib/llvm-project/llvm/lib/Target/ARM/ARMISelLowering.cpp there is: ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM, const ARMSubtarget &STI) ... if (Subtarget->isTargetMachO()) { // Uses VFP for Thumb libfuncs if available. if (Subtarget->isThumb() && Subtarget->hasVFP2Base() && Subtarget->hasARMOps() && !Subtarget->useSoftFloat()) { static const struct { const RTLIB::Libcall Op; const char * const Name; const ISD::CondCode Cond; } LibraryCalls[] = { // Single-precision floating-point arithmetic. { RTLIB::ADD_F32, "__addsf3vfp", ISD::SETCC_INVALID }, { RTLIB::SUB_F32, "__subsf3vfp", ISD::SETCC_INVALID }, { RTLIB::MUL_F32, "__mulsf3vfp", ISD::SETCC_INVALID }, { RTLIB::DIV_F32, "__divsf3vfp", ISD::SETCC_INVALID }, ... I am unsure whether the VFP routines are ABI compatible with the non-VFP ones. If they are, we could alias them somehow. If they are not, we should stop compiling the VFP versions, and compile the regular versions. -- You are receiving this mail because: You are the assignee for the bug.