Hi AJ. Exception support can still be turned on in C code when it's supposed to interoperate with C++ code. An example is the 64 bit division routine in libgcc - it could potentially throw a division by zero exception when called from C++ code even though the function is written in C.
-- Michael
On Tue, Apr 19, 2011 at 10:38 AM, AJ ONeal coolaj86@gmail.com wrote:
What is an "exception" in C? There is no CPP (.cpp or .cxx) code in any of these libraries.
Interesting thing though: cmem has a userspace and kernelspace component. TI does really nasty stuff, like pull in .h files from the kernel and whatnot. I just tried again against the 2.6.38 kernel (was 2.6.36 this morning) and there is no error. http://lxr.free-electrons.com/ident?i=__aeabi_unwind_cpp_pr0 Perhaps it's just something in my .config that turns that on or off in the kernel. AJ ONeal
On Mon, Apr 18, 2011 at 3:06 PM, Michael Hope michael.hope@linaro.org wrote:
On Tue, Apr 19, 2011 at 5:39 AM, AJ ONeal coolaj86@gmail.com wrote:
I'm compiling an application built with TI's DVSDK 3 *[0].
/home/user/ti/dvsdk/dvsdk_3_01_00_10/linuxutils_2_25_02_08/packages/ti/sdo/linuxutils/cmem/lib/cmem.a470MV(cmem.o470MV):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
arm-linux-gnueabi-gcc --version arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.5.2-5ubuntu2~ppa1) 4.5.2 arm-linux-gnueabi-ld --version GNU ld (GNU Binutils for Ubuntu) 2.21.0.20110302
More full output is here (but it isn't particularly helpful due to TI's RTSC make system's black-magic) https://gist.github.com/925674 FYI: the MV in cmem.a470MV stands for MontaVista. This name is hard-coded somewhere even though it's not being linked against a MontaVista system. I believe the 470 means that it should work with ARMv4 through ARMv7, but I'm not positive.
My googling suggest that this is a toolchain bug and that the best way around the issue is to create a file which defines the function as a void dummy and include it. http://www.codesourcery.com/archives/arm-gnu/msg03604.html http://comments.gmane.org/gmane.comp.boot-loaders.u-boot/78649
http://www.cs.fsu.edu/~baker/devices/lxr/http/ident?i=__aeabi_unwind_cpp_pr0
I have a script that I'll post shortly with instructions as to how to setup TI's DVSDK with Linaro AJ ONeal
[0] I'm not using the latest DVSDK version 4 because the paths and such are so hard-coded for the 2009q3 version of codesourcery on ubuntu 10.04 LTS that I don't know where to start fixing it.
Hi AJ. __aeabi_unwind_cpp_pr0 is part of the standard ARM exception handling code and helps in unwinding the stack frame when an exception occurs. This suggests that the binary cmem.a470MV can throw exceptions and therefore needs exception handling.
I don't think this is a toolchain bug as this function is included in libgcc_eh.a and is normally pulled in automatically. Could you add '-v' to your linker flags and send through the result?
-- Michael