ports/121363: Be causious compiling with -O2 (use -fno-strict-aliasing) Redux

David O'Brien obrien at FreeBSD.org
Tue Mar 4 19:50:01 UTC 2008


>Number:         121363
>Category:       ports
>Synopsis:       Be causious compiling with -O2 (use -fno-strict-aliasing) Redux
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Mar 04 19:50:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     David O'Brien
>Release:        FreeBSD 8.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD dragon.NUXI.org 8.0-CURRENT FreeBSD 8.0-CURRENT #592: Sat Feb 16 21:08:06 PST 2008 rootk at dragon.NUXI.org:/src/fbsd/sys/i386/compile/DRAGON i386

	
>Description:

	Some (much?) 3rd party software does not realize that GCC 4's -O2
	and -O3 implies -fstrict-aliasing.  Some of this 3rd party code
	has bugs that are tripped over when building with -fstrict-aliasing.

	src/share/mk/sys.mk is moving to not adding "-fno-strict-aliasing"
	to CFLAGS.

	"-fno-strict-aliasing" hides real bugs and we need the warnings
	generated from "-fstrict-aliasing" to find them.  We also want
	/usr/src to be compiled in a manner that matches the tenderbox
	builds.  See src/share/mk/sys.mk rev 1.96 commit log.

>How-To-Repeat:

	Build Firefox and other ports with -O2 (or -O3).

>Fix:

	Of course I expect that Portmgr can come up with tweaks to this patch
	to acheive the goal of compiling ports with -fno-strict-aliasing.

	http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/73797
	was closed with a flippent answer and that is not acceptable this
	time around.

	We may also be able to use the GCC_OPTIONS environmental variable
	to pass this option to GCC down thru configure steps, etc...
	(untested if setting GCC_OPTIONS=-fno-strict-aliasing and specifing
	 -O2 on the command line reenables strict aliasing)
		_GCC_OPTIONS=-fno-strict-aliasing
		MAKE_ENV+=	GCC_OPTIONS="${GCC_OPTIONS} ${_GCC_OPTIONS}"
	is an example of how this may be used.


Index: bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.589
diff -u -p -r1.589 bsd.port.mk
--- bsd.port.mk	17 Oct 2007 10:12:24 -0000	1.589
+++ bsd.port.mk	4 Mar 2008 19:35:54 -0000
@@ -2148,6 +2164,12 @@ MAKE_ENV+=		PREFIX=${PREFIX} \
 			MOTIFLIB="${MOTIFLIB}" LIBDIR="${LIBDIR}" CFLAGS="${CFLAGS}" \
 			CXXFLAGS="${CXXFLAGS}" MANPREFIX="${MANPREFIX}"
 
+.if !defined(WITHOUT_NO_STRICT_ALIASING)
+. if !empty(CFLAGS:M-O[23s]) && empty(CFLAGS:M-fno-strict-aliasing)
+CFLAGS+=	-fno-strict-aliasing
+. endif
+.endif
+
 PTHREAD_CFLAGS?=
 PTHREAD_LIBS?=		-pthread
 
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list