libaio: work-around for PowerPC issue
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Wed, 10 Aug 2016 22:00:52 +0000 (00:00 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Thu, 11 Aug 2016 13:04:07 +0000 (15:04 +0200)
Both the blktrace and gadgetfs-test packages were failing to build on
PowerPC due to the mysterious:

  hidden symbol `_rest32gpr_30_x' in libgcc.a(e500crtresx32gpr.o) is referenced by DSO

Due to this error, we disabled blktrace on PowerPC in commit
0d8158fc619ce849b531d07b27da4ba9748d4ea4. However, gadgetfs-test
continued to fail with the same error. As Romain Naour pointed out, the
problem seems in fact to come from a common dependency of blktrace and
gadgetfs-test: libaio. As Romain investigated, the problem started
appearing after the last bump of libaio, from version 0.3.109 to
0.3.110.

A quick bisect through the libaio changes between 0.3.109 and 0.3.110
has revealed that the problematic change is one in the libaio build
system, which now obeys to the CFLAGS provided in the environment,
rather than overriding them. So the CFLAGS provided by Buildroot cause
this problem. It turns out that the problematic CFLAGS is -Os, which is
indeed known to cause issues on PowerPC in some corner cases.

Even though it would probably be a better long-term solution to switch
to -O2 by default, and mark -Os as not available on PowerPC, it is a too
radical change so close to 2016.08. So we simply adjust the libaio
package so that it uses -O2 instead of -Os.

Fixes:

  http://autobuild.buildroot.net/results/5e6cc4c432ce6c964ac285026978ad14d9eae97c/

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/libaio/libaio.mk

index 9b28f0562a80cc912908db7ee49ea4fe264e29dd..0854fc5fd645b07de4879fc211b8ba391a8b445b 100644 (file)
@@ -11,16 +11,24 @@ LIBAIO_INSTALL_STAGING = YES
 LIBAIO_LICENSE = LGPLv2.1+
 LIBAIO_LICENSE_FILES = COPYING
 
+LIBAIO_CONFIGURE_OPTS = $(TARGET_CONFIGURE_OPTS)
+
+# On PowerPC, a weird toolchain issue causes -Os builds to produce
+# references to hidden symbols, so we're forcing -O2
+ifeq ($(BR2_powerpc),y)
+LIBAIO_CONFIGURE_OPTS += CFLAGS="$(subst -Os,-O2,$(TARGET_CFLAGS))"
+endif
+
 define LIBAIO_BUILD_CMDS
-       $(TARGET_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
+       $(LIBAIO_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
 endef
 
 define LIBAIO_INSTALL_STAGING_CMDS
-       $(TARGET_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install
+       $(LIBAIO_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install
 endef
 
 define LIBAIO_INSTALL_TARGET_CMDS
-       $(TARGET_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install
+       $(LIBAIO_CONFIGURE_OPTS) $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install
 endef
 
 $(eval $(generic-package))