[fpc-devel] Re: vfp exception issues with freepascal

shawn shawnlandden at gmail.com
Sat Jul 28 19:30:38 CEST 2012


On Sat, 2012-07-28 at 16:42 +0100, peter green wrote: 
> I am involved in a project called raspbian to produce a hard-float 
> derivative of debian for the raspberry pi. Within this port we had 
> problems with floating point exceptions while running the compiler. 
> These problems were tracked down by masta (a freepascal upstream 
> developer) to reversed logic in a routine for controlling floating point 
> exception settings (attempting to disable an exception enabled it and 
> vice-versa)
> 
> Howevr this then left the question of "why didn't I see this problem 
> when preparing the freepascal packages for debian armhf?". The 
> conclusion i've come to is that on the armv7 systems i've tested (a 
> beagleboard XM running 2.6.39.2-x2 and an IMX53 quickstart board running 
> ) the method freepascal uses for enabling vfp exceptions simply doesn't 
> work.
> 
> I've written a small test program in C and inline assembler to 
> demonstrate this. It tries to enable a number of floating point 
> exceptions using a price of inline assembly I copied from the freepascal 
> run time library and then does a division of the command line arguments. 
> When I test this on a Pi running raspbian I get a floating point 
> exception as expected.
> 
> root at raspbian:~# ./a.out 1 0
> Floating point exception
> root at raspbian:~#
> 
> but when I try it on my beagleboard XM or IMX53 board I don't get any 
> exception.
> 
> root at plugwash:/home/plugwash# ./a.out 1 0
> inf
> root at plugwash:/home/plugwash#
> 
> Any vfp experts able to help get to the bottom of what is going on here?

http://sourceware.org/ml/libc-ports/2012-06/msg00021.html

I quote: "ARM VFPv3 and VFPv4 do not support trapping floating-point
exceptions; 
VFPv2, VFPv3U and VFPv4U do.  The lack of support causes the glibc 
math/test-fenv test to fail on VFPv3 and VFPv4 systems.

The natural fix for that would be for fesetenv (FE_NOMASK_ENV) to fail
on 
hardware not supporting trapping exceptions.  There is, however, no
HWCAP 
bit to indicate whether trapping floating-point exceptions is
supported.  
Could one be added to the kernel, or is there a good way fesetenv could 
detect this from userspace without a new HWCAP bit?"

-- 
-Shawn Landden




More information about the fpc-devel mailing list