public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* [patch, howto, gfortan] make check fix ppc64/darwin8
@ 2008-06-17 10:41 IainS
  0 siblings, 0 replies; only message in thread
From: IainS @ 2008-06-17 10:41 UTC (permalink / raw)
  To: Fortran List, GCC Development

I came across a "gotcha" whilst trying to test the static  
implementation of libgfortran on PPC64-apple-darwin8.
Thanks to Tobias B for pointing me at 99% of the solution.

Probably the number of affected systems is small ;) - but, FWIW,  
here's HOWTO and a fix.

-----
If you host on {powerpc, i686}-apple-darwin8 and you want to static  
link (or check libgfortran) -m64 for PPC64  then this applies to you.

There is an incompatibility [presumably in ld64] between the default  
debug symbol generation (stabs) and what's required
for linking/checking PPC64 on darwin8 ...  this incompatibility  "is  
not going to be fixed".

The specific crunch is that every -O3  torture test is compiled with -g
    =>  in gfortran this causes every -O3 torture test to fail when  
checking -m64.

----

The solution is to build the required code with -gdwarf-2,  
unfortunately the "-g" flag is hard-coded in a couple of relevant  
places:

(a) in  "fortran-torture.exp"  and in "gcc-dg.exp" (which is included  
in gfortran-dg.exp)
[ the change to gcc-dg.exp makes this non-local to gfortran ]

(b) in the top level configure (as a default C/CXX/FLAGS_FOR_TARGET).

The minimum change work-around is this:

1/ configure/make gcc with CFLAGS_FOR_TARGET = "-02 -gdwarf-2 - 
pipe" (and CXXFLAGS_FOR_TARGET the same)

2/ apply the following :

Index: gcc/testsuite/lib/gcc-dg.exp
===================================================================
--- gcc/testsuite/lib/gcc-dg.exp        (revision 136861)
+++ gcc/testsuite/lib/gcc-dg.exp        (working copy)
@@ -48,9 +48,15 @@
         { -O2 } \
         { -O3 -fomit-frame-pointer } \
         { -O3 -fomit-frame-pointer -funroll-loops } \
-       { -O3 -fomit-frame-pointer -funroll-all-loops -finline- 
functions } \
-       { -O3 -g } \
-       { -Os } ]
+       { -O3 -fomit-frame-pointer -funroll-all-loops -finline- 
functions } ]
+
+       if { [istarget "*-*-darwin8"] } {
+       lappend DG_TORTURE_OPTIONS  { -O3 -gdwarf-2 }
+       } else {
+       lappend DG_TORTURE_OPTIONS  { -O3 -g }
+       }
+
+       lappend DG_TORTURE_OPTIONS { -Os }
  }

  global GCC_UNDER_TEST
Index: gcc/testsuite/lib/fortran-torture.exp
===================================================================
--- gcc/testsuite/lib/fortran-torture.exp       (revision 136861)
+++ gcc/testsuite/lib/fortran-torture.exp       (working copy)
@@ -73,9 +73,16 @@
         { -O2 } \
         { -O2 -fomit-frame-pointer -finline-functions } \
         { -O2 -fomit-frame-pointer -finline-functions -funroll- 
loops } \
-       { -O2 -fbounds-check } \
-       { -O3 -g } \
-       { -Os }
+       { -O2 -fbounds-check }
+
+       if { [istarget "*-*-darwin8"] } {
+       lappend options  { -O3 -gdwarf-2 }
+       } else {
+       lappend options  { -O3 -g }
+       }
+
+       lappend options { -Os }
+
      if { $test_tree_vectorize } {
         lappend options $vectorizer_options
      }


*************************************
COMPARISONs of make check-host with and without the changes

This is on darwin 8.11.0

*************************************
make check-host   (default, m32)
one extra pass, no regressions
*************************************

g++
-----
	no change

gcc
-----
one extra pass from using dwarf-2
FAIL: gcc.dg/pch/save-temps-1.c  -O3 -g  assembly comparison
PASS: gcc.dg/pch/save-temps-1.c  -O3 -gdwarf-2  assembly comparison

gfortran
----------
	no change

obj-c++
----------
	no change

obj-c
------
	no change


*************************************
make check-host   (m64) RUNTESTFLAGS="--target_board=unix/-m64"
69 extra passes, no regressions
*************************************

g++
------
one extra pass from using dwarf-2
FAIL: g++.old-deja/g++.eh/badalloc1.C execution test (-g)
PASS: g++.old-deja/g++.eh/badalloc1.C execution test (-gdwarf-2)

gcc
-----
one extra pass from using dwarf-2
FAIL: gcc.dg/pch/save-temps-1.c  -O3 -g  assembly comparison
PASS: gcc.dg/pch/save-temps-1.c  -O3 -gdwarf-2  assembly comparison

gfortran (every test with -O3 -g fails )
----------
67 extra passes using -gdwarf-2

		=== gfortran Summary  (-g) ===

# of expected passes		26196
# of unexpected failures	85
# of expected failures		46
# of unsupported tests		59
/Volumes/SwapScratch/OS-source/gcc-44-build/n2n/gcc/testsuite/ 
gfortran/../../gfortran  version 4.4.0 20080612 (experimental) (GCC)

		=== gfortran Summary (-gdwarf-2)  ===

# of expected passes		26263
# of unexpected failures	18
# of expected failures		46
# of unsupported tests		59
/Volumes/SwapScratch/OS-source/gcc-44-build/n2n/gcc/testsuite/ 
gfortran/../../gfortran  version 4.4.0 20080612 (experimental) (GCC)

obj-c++
----------
	no change

obj-c
------
	no change

----
I guess, there's one residual puzzle to me;   from the doc. I'd  
understand that the -O3 optimizations are in the back end and therefore
common to all the tools.  However, this problem only really shows up  
to any significant extent with gfortran.

ttfn,
Iain

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

only message in thread, other threads:[~2008-06-17 10:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-06-17 10:41 [patch, howto, gfortan] make check fix ppc64/darwin8 IainS

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