* 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).