Oliver, Linaro solved this issue. I changed the *_ARMLINUXGCC_AARCH64_DLINK_PATH to link with gcc in Conf/tools_def.txt. Added -lgcc to linker. Regards, Mike
From: Olivier Martin [mailto:[email protected]] Sent: Thursday, October 30, 2014 11:50 AM To: [email protected] Subject: Re: [edk2] error in AppPkg (StdLib build) If we looked at the code that generates the "undefined reference to `__trunctfdf2'", we find these lines: if (flags & LONGDBL) { _double = (double) GETARG(long double); } else { _double = GETARG(double); } __trunctfdf2 is actually the equivalent of float128_to_float64(). There is no ARM instruction in the instruction set that generates this operation. And there is no equivalent of this function in BaseLib we could replace by. So the compiler introduces an 'intrinsic' to 'workaround'. As Andrew said, there is the ArmPkg/Library/CompilerIntrinsicsLib for ARM and AARCH64 that should implement the needed intrinsics. This library is automatically added to all the UEFI binaries at build time. To solve this issue there are two solutions: - the good solution: add __trunctfdf2 to CompilerIntrinsicsLib - less good solution remove '-fno-builtin -nostdlib and -nodefaultlibs' from the compiler flag to rely on the intrinsics provided by the compiler We actually have some code at ARM we should be able to contribute soon to fill some missing floating point intrinsics - code we borrowed from NetBSD project. To summarize, the issue is not a Linaro issue. It is a ARM/AARCH64 EDK2 issue. From: Brainerd, Mike [mailto:[email protected]] Sent: 06 October 2014 21:12 To: [email protected]<mailto:[email protected]> Subject: Re: [edk2] error in AppPkg (StdLib build) Andrew, Thanks for the reply. I believe you are confirming that this is a Linaro issue that I need to work with them? Regards, Mike Brainerd From: Andrew Fish [mailto:[email protected]] Sent: Monday, October 06, 2014 2:25 PM To: [email protected]<mailto:[email protected]> Subject: Re: [edk2] error in AppPkg (StdLib build) On Oct 6, 2014, at 11:45 AM, Brainerd, Mike <[email protected]<mailto:[email protected]>> wrote: I found a build error that will not let me build AppPkg. Mike, /home/mbrainer/DS-5-Workspace/edk2/Build/AppPkg/DEBUG_ARMLINUXGCC/AARCH64/StdLib/LibC/Stdio/Stdio/OUTPUT/LibStdio.lib(vfprintf.obj): In function `__vfprintf_unlocked': /home/mbrainer/DS-5-Workspace/edk2/StdLib/LibC/Stdio/vfwprintf.c:1186: undefined reference to `__trunctfdf2' /home/mbrainer/DS-5-Workspace/edk2/StdLib/LibC/Stdio/vfwprintf.c:1186: undefined reference to `__trunctfdf2' make: *** [/home/mbrainer/DS-5-Workspace/edk2/Build/AppPkg/DEBUG_ARMLINUXGCC/AARCH64/AppPkg/Applications/Main/Main/DEBUG/Main.dll] Error 1 This is the compiler emitting an intrinsic to do a floating point operation, and the CompilerIntrinsicsLib does not contain this intrinsic so you get a link failure. If you look at the code this is a cast of a long double to a double is what is causing the compiler to emit the intrinsic. If you disassemble vfprintf.obj you would see the assembly language calling the __truncfdf2 function getting called. Different compilers, versions of the compilers, and optimization levels can change what intrinsics get emitted by a compiler. Historically we tried to avoid writing code that caused intrinsics to be emitted due to the fact that issues like this can just pop up. But for ARM there was less math support than for IA32 so we ended up adding the CompilerIntrinsicLib. The need to avoid intrinsics is the reason the BaseLib has 64-bit math functions, since they would cause intrinsics to be emitted for IA32. You could comment/#ifdef out the failing code to make progress. If some one decides the intrinsics are needed the llvm (clang) project has implementations of the intrinsics that have a BSD compatible license. http://compiler-rt.llvm.org Thanks, Andrew Fish Invocation: ~/DS-5-Workspace/edk2$ build -v Build environment: Linux-3.13.0-36-generic-x86_64-with-Ubuntu-14.04-trusty Build start time: 14:31:56, Oct.03 2014 Initialize build database started ... Initialize table DataModel started ... Initialize build database ... DONE! WORKSPACE = /home/mbrainer/DS-5-Workspace/edk2 ECP_SOURCE = /home/mbrainer/DS-5-Workspace/edk2/EdkCompatibilityPkg EDK_SOURCE = /home/mbrainer/DS-5-Workspace/edk2/EdkCompatibilityPkg EFI_SOURCE = /home/mbrainer/DS-5-Workspace/edk2/EdkCompatibilityPkg EDK_TOOLS_PATH = /home/mbrainer/DS-5-Workspace/edk2/BaseTools Architecture(s) = AARCH64 Build target = DEBUG Toolchain = ARMLINUXGCC Active Platform = /home/mbrainer/DS-5-Workspace/edk2/AppPkg/AppPkg.dsc FLASH_DEFINITION = Processing meta-data .Found forced library for arch=AARCH64 ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf [NULL1] Using edk2 svn:16190 I captured the output in the attached file "errors_vfwprintf.txt" It looks to me to be a LINARO binutils error. Has anyone else seen this? Am I finding a true bug or setup wrong? Regards, MICHAEL BRAINERD <image004.png> Contractor | AMD Server 7171 Southwest Parkway, Austin, TX 78735 USA O +(1) 512-602-3491 <image003.png> facebook<https://www.facebook.com/AMD> | amd.com<http://www.amd.com/> ------------------------------------------------------------------------------ Slashdot TV. Videos for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk_______________________________________________ edk2-devel mailing list [email protected]<mailto:[email protected]> https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
_______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
