public inbox for ecos-patches@sourceware.org
 help / color / mirror / Atom feed
* Re: [ECOS] strict aliasing problem?
       [not found] <A5EF2F2B9D31734CB122F378C1ADB5CB0335835E@uss-am-xch-02.am.trimblecorp.net>
@ 2010-05-15 16:34 ` Jonathan Larmour
  0 siblings, 0 replies; only message in thread
From: Jonathan Larmour @ 2010-05-15 16:34 UTC (permalink / raw)
  To: Will Lentz; +Cc: ecos-discuss, eCos Patches List

[-- Attachment #1: Type: text/plain, Size: 1310 bytes --]

Will Lentz wrote:
> Hi,
>  
> I'm using GCC 4.4.1 on an MPC5200 target and I was getting incorrect
> results from:
>   libm/current/src/double/ieee754-core/e_exp.c
> 
> Once I pass -fno-strict-aliasing to the math library, everything works
> fine.  (On a side note, everything works fine either way with GCC 3.3)
>  
> It looks like e_exp.c accesses the double "x" through CYG_LIBM_HI():
>   #define CYG_LIBM_HI(__x)  (((Cyg_libm_ieee_double_shape_type
> *)&__x)->parts.msw)
> where Cyg_libm_ieee_double_shape_type is a union type.
>  
> According to:
>  
> http://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/Optimize-Options.html#index-
> fstrict_002daliasing-750
> code such as the following results in undefined behavior:
>   union a_union {
>     int i;
>     double d;
>   };
>   int f() {
>     double d = 3.0;
>     return ((union a_union *) &d)->i;
>   }
> 
> Should all targets use -fno-strict-aliasing when building the math
> library for safety?

Looks like it in that case. I've applied the attached patch for this. 
Really it should be updated to be based on a newer libm from newlib, which 
has other feature improvements. (I know eCosCentric did this because I did 
it!). But this workaround will have to do for now.

Jifl
-- 
------["The best things in life aren't things."]------      Opinions==mine

[-- Attachment #2: libm.no.strict.aliasing.patch.txt --]
[-- Type: text/plain, Size: 3404 bytes --]

Index: ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libm/current/ChangeLog,v
retrieving revision 1.28
diff -u -5 -p -r1.28 ChangeLog
--- ChangeLog	29 Jan 2009 17:49:54 -0000	1.28
+++ ChangeLog	15 May 2010 16:32:08 -0000
@@ -1,5 +1,11 @@
+2010-05-15  Jonathan Larmour  <jifl@jifvik.org>
+
+	* cdl/libm.cdl (CYGPKG_LIBM_CFLAGS_ADD): Compile with
+	-fno-strict-aliasing to avoid miscompilation. Workaround for a more
+	fundamental problem with CYG_LIBM_HI/LO.
+
 2008-11-20  Jonathan Larmour  <jifl@eCosCentric.com>
 
 	* cdl/libm.cdl: Rename X_TLOSS CDL option to match normal convention.
 
 2007-09-04  Stephen Finney  <shf@pfinc.com>
@@ -811,11 +817,11 @@ Fri Jun  5 07:07:03 1998  Jonathan Larmo
 
 //===========================================================================
 // ####GPLCOPYRIGHTBEGIN####                                                
 // -------------------------------------------                              
 // This file is part of eCos, the Embedded Configurable Operating System.   
-// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2007, 2008, 2010 Free Software Foundation, Inc.
 //
 // This program is free software; you can redistribute it and/or modify     
 // it under the terms of the GNU General Public License as published by     
 // the Free Software Foundation; either version 2 or (at your option) any   
 // later version.                                                           
Index: cdl/libm.cdl
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libm/current/cdl/libm.cdl,v
retrieving revision 1.8
diff -u -5 -p -r1.8 libm.cdl
--- cdl/libm.cdl	29 Jan 2009 17:49:54 -0000	1.8
+++ cdl/libm.cdl	15 May 2010 16:32:08 -0000
@@ -6,11 +6,11 @@
 #
 # ====================================================================
 ## ####ECOSGPLCOPYRIGHTBEGIN####                                            
 ## -------------------------------------------                              
 ## This file is part of eCos, the Embedded Configurable Operating System.   
-## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2010 Free Software Foundation, Inc.
 ##
 ## eCos is free software; you can redistribute it and/or modify it under    
 ## the terms of the GNU General Public License as published by the Free     
 ## Software Foundation; either version 2 or (at your option) any later      
 ## version.                                                                 
@@ -227,11 +227,12 @@ cdl_package CYGPKG_LIBM {
 
         cdl_option CYGPKG_LIBM_CFLAGS_ADD {
             display "Additional compiler flags"
             flavor  data
             no_define
-            default_value { ((0 == CYGPKG_HAL_I386) && (0 == CYGPKG_HAL_SYNTH_I386)) ? "" : "-ffloat-store" }
+            default_value { "-fno-strict-aliasing " . \
+                                ((0 == CYGPKG_HAL_I386) && (0 == CYGPKG_HAL_SYNTH_I386)) ? "" : "-ffloat-store" }
             description   "
                 This option modifies the set of compiler flags for
                 building the math library. These flags are used in addition
                 to the set of global flags."
         }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-05-15 16:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <A5EF2F2B9D31734CB122F378C1ADB5CB0335835E@uss-am-xch-02.am.trimblecorp.net>
2010-05-15 16:34 ` [ECOS] strict aliasing problem? Jonathan Larmour

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).