From 30b87886767f4fed2b40db8f1ed354a841b38b33 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Thu, 26 Mar 2015 07:56:10 +0100 Subject: [PATCH] debian: disable -flto for binaries This work around what appears to be an exception handling bug, causing binaries to not always catch excepting thrown by the library. * debian/rules: Here. --- debian/rules | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/debian/rules b/debian/rules index fc1a77152..aa5b4cd28 100755 --- a/debian/rules +++ b/debian/rules @@ -41,18 +41,31 @@ PRO2SETUP = \ CXXFLAGS='-flto -fprofile-use' PYSETUP = PYTHON=/usr/bin/python3 +# There seem to be a problem with unwinding of exception handling when +# the binaries are compiled with -flto. For instance in autfilt, +# argp_parse() calls the locally defined parse_opt() that calls +# remove_ap::add_ap() (in libspot). The latter may throw an +# exception, which should be caught in main(). However If autfilt is +# compiled with -flto, the exception never traverses argp. Moving +# the try/catch block inside parse_opt() also fixes this praticular +# problem, but who knows about other exceptions? So as a workaround, +# we simply disable -flto in src/bin/. +FLTOWORKAROUND = perl -pi -e s/-flto// src/bin/Makefile + # We want to build Spot twice: once to get profile data, and a second # time to use it. override_dh_auto_configure: dh_auto_configure -- $(PRO1SETUP) $(LTOSETUP) \ --disable-devel --enable-optimizations \ --disable-static $(PYSETUP) + $(FLTOWORKAROUND) dh_auto_build dh_auto_test make clean dh_auto_configure -- $(PRO2SETUP) $(LTOSETUP) \ --disable-devel --enable-optimizations \ --disable-static $(PYSETUP) + $(FLTOWORKAROUND) override_dh_auto_install: dh_auto_install --destdir=$(CURDIR)/debian/tmp find debian/tmp -name '*.la' -exec rm -rv {} ';'