diff mbox

[v2] gpsd: add work-around and re-enable for microblaze

Message ID 1448195040-8082-1-git-send-email-sergio.prado@e-labworks.com
State Accepted
Headers show

Commit Message

Sergio Prado Nov. 22, 2015, 12:24 p.m. UTC
Fix (works around) bug #6872
https://bugs.busybox.net/show_bug.cgi?id=6872

The gpsd package was disabled due to an internal compiler error for
the microblaze architecture in the following commit:
http://git.buildroot.net/buildroot/commit/?id=d517415bcda380336f4a27bf248cef4d81791c9e

The problem is due to an specific GCC optimization flag
(-fexpensive-optimizations), so disabling it we can work around this
problem and compile gpsd for the microblaze architecture.

Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
Changes v1 -> v2:
  - added a comment explaining why we are disabling the optimization flag.
---
 package/gpsd/Config.in        | 3 ---
 package/gpsd/gpsd.mk          | 8 +++++++-
 package/sconeserver/Config.in | 2 --
 3 files changed, 7 insertions(+), 6 deletions(-)

Comments

Thomas Petazzoni Nov. 22, 2015, 12:57 p.m. UTC | #1
Dear Sergio Prado,

On Sun, 22 Nov 2015 10:24:00 -0200, Sergio Prado wrote:
> Fix (works around) bug #6872
> https://bugs.busybox.net/show_bug.cgi?id=6872
> 
> The gpsd package was disabled due to an internal compiler error for
> the microblaze architecture in the following commit:
> http://git.buildroot.net/buildroot/commit/?id=d517415bcda380336f4a27bf248cef4d81791c9e
> 
> The problem is due to an specific GCC optimization flag
> (-fexpensive-optimizations), so disabling it we can work around this
> problem and compile gpsd for the microblaze architecture.
> 
> Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>
> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
> ---
> Changes v1 -> v2:
>   - added a comment explaining why we are disabling the optimization flag.
> ---
>  package/gpsd/Config.in        | 3 ---
>  package/gpsd/gpsd.mk          | 8 +++++++-
>  package/sconeserver/Config.in | 2 --
>  3 files changed, 7 insertions(+), 6 deletions(-)

Applied to master, thanks. Could you test with gcc 5.x, and if the
problem still exists, report a bug to the gcc bug tracker ? While your
workaround is OK, it is not good for gcc to fail this way when building
gpsd.

Thanks a lot!

Thomas
Sergio Prado Nov. 22, 2015, 3:27 p.m. UTC | #2
Hello Thomas,

I have tested with GCC 5.2.0. The bug persists and was reported in the gcc
bug tracker:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68485

Actually, in GCC 5.X I had to also disable another optimization flag
(-fschedule-insns). I'm finishing the tests of this change with both GCC
4.9 and GCC 5.2 to send you a new patch to fix it.

Regards,

Sergio Prado
Embedded Labworks
Office: +55 11 2628-3461
Mobile: +55 11 97123-3420

2015-11-22 10:57 GMT-02:00 Thomas Petazzoni <
thomas.petazzoni@free-electrons.com>:

> Dear Sergio Prado,
>
> On Sun, 22 Nov 2015 10:24:00 -0200, Sergio Prado wrote:
> > Fix (works around) bug #6872
> > https://bugs.busybox.net/show_bug.cgi?id=6872
> >
> > The gpsd package was disabled due to an internal compiler error for
> > the microblaze architecture in the following commit:
> >
> http://git.buildroot.net/buildroot/commit/?id=d517415bcda380336f4a27bf248cef4d81791c9e
> >
> > The problem is due to an specific GCC optimization flag
> > (-fexpensive-optimizations), so disabling it we can work around this
> > problem and compile gpsd for the microblaze architecture.
> >
> > Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>
> > Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
> > ---
> > Changes v1 -> v2:
> >   - added a comment explaining why we are disabling the optimization
> flag.
> > ---
> >  package/gpsd/Config.in        | 3 ---
> >  package/gpsd/gpsd.mk          | 8 +++++++-
> >  package/sconeserver/Config.in | 2 --
> >  3 files changed, 7 insertions(+), 6 deletions(-)
>
> Applied to master, thanks. Could you test with gcc 5.x, and if the
> problem still exists, report a bug to the gcc bug tracker ? While your
> workaround is OK, it is not good for gcc to fail this way when building
> gpsd.
>
> Thanks a lot!
>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
>
Thomas Petazzoni Nov. 22, 2015, 3:32 p.m. UTC | #3
Sergio,

On Sun, 22 Nov 2015 13:27:13 -0200, Sergio Prado wrote:

> I have tested with GCC 5.2.0. The bug persists and was reported in the gcc
> bug tracker:
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68485
> 
> Actually, in GCC 5.X I had to also disable another optimization flag
> (-fschedule-insns). I'm finishing the tests of this change with both GCC
> 4.9 and GCC 5.2 to send you a new patch to fix it.

Great, thanks a lot for the additional testing. Please add a reference
to this gcc bug report in a comment above the CFLAGS modification in
gpsd.mk, so that we keep track of why we're doing this work-around.

Thanks!

Thomas
diff mbox

Patch

diff --git a/package/gpsd/Config.in b/package/gpsd/Config.in
index fa8b8f6b2ad5..b4008ebd8353 100644
--- a/package/gpsd/Config.in
+++ b/package/gpsd/Config.in
@@ -1,7 +1,6 @@ 
 comment "gpsd needs a toolchain w/ threads, dynamic library"
 	depends on BR2_USE_MMU
 	depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS
-	depends on !BR2_microblaze
 
 config BR2_PACKAGE_GPSD
 	bool "gpsd"
@@ -10,8 +9,6 @@  config BR2_PACKAGE_GPSD
 	depends on BR2_TOOLCHAIN_HAS_THREADS
 	# Always tries to build a shared library
 	depends on !BR2_STATIC_LIBS
-	# triggers gcc ice
-	depends on !BR2_microblaze
 	help
 	  gpsd is a service daemon that monitors one or more GPSes or AIS
 	  receivers attached to a host computer through serial or USB ports,
diff --git a/package/gpsd/gpsd.mk b/package/gpsd/gpsd.mk
index 87911c3905fe..aa35053baf09 100644
--- a/package/gpsd/gpsd.mk
+++ b/package/gpsd/gpsd.mk
@@ -13,6 +13,7 @@  GPSD_INSTALL_STAGING = YES
 GPSD_DEPENDENCIES = host-scons host-pkgconf
 
 GPSD_LDFLAGS = $(TARGET_LDFLAGS)
+GPSD_CFLAGS = $(TARGET_CFLAGS)
 
 GPSD_SCONS_ENV = $(TARGET_CONFIGURE_OPTS)
 
@@ -37,6 +38,11 @@  else
 GPSD_SCONS_OPTS += libgpsmm=no
 endif
 
+# prevents from triggering GCC ICE
+ifeq ($(BR2_microblaze),y)
+GPSD_CFLAGS += -fno-expensive-optimizations
+endif
+
 # Enable or disable Qt binding
 ifeq ($(BR2_PACKAGE_QT_NETWORK),y)
 GPSD_SCONS_ENV += QMAKE="$(QT_QMAKE)"
@@ -185,7 +191,7 @@  ifeq ($(BR2_PACKAGE_GPSD_MAX_DEV),y)
 GPSD_SCONS_OPTS += limited_max_devices=$(BR2_PACKAGE_GPSD_MAX_DEV_VALUE)
 endif
 
-GPSD_SCONS_ENV += LDFLAGS="$(GPSD_LDFLAGS)"
+GPSD_SCONS_ENV += LDFLAGS="$(GPSD_LDFLAGS)" CFLAGS="$(GPSD_CFLAGS)"
 
 define GPSD_BUILD_CMDS
 	(cd $(@D); \
diff --git a/package/sconeserver/Config.in b/package/sconeserver/Config.in
index f16e683bf563..4083aa7dce36 100644
--- a/package/sconeserver/Config.in
+++ b/package/sconeserver/Config.in
@@ -63,7 +63,6 @@  config BR2_PACKAGE_SCONESERVER_LOCATION
 	bool "location"
 	depends on BR2_USE_MMU # gpsd
 	depends on BR2_TOOLCHAIN_HAS_THREADS # gpsd
-	depends on !BR2_microblaze # gpsd
 	depends on !BR2_STATIC_LIBS # gpsd
 	select BR2_PACKAGE_GPSD
 	help
@@ -72,7 +71,6 @@  config BR2_PACKAGE_SCONESERVER_LOCATION
 comment "location support needs a toolchain w/ theads, dynamic library"
 	depends on BR2_USE_MMU
 	depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBRARY
-	depends on !BR2_microblaze
 
 config BR2_PACKAGE_SCONESERVER_LETTUCE
 	bool "lettuce"